2011-01-25 46 views
1

我使用的是MySQL存储表,以此来缓存被读几遍数据行。我选择了这个替代方案,因为我无法在我的解决方案中使用xcache或memcache。 阅读mysql manual and forum关于这个话题我已经得出结论,当表达到其最大内存大小错误将引发之后。我想知道是否有办法捕获这个错误,以便截断表并释放内存。我不想提高可以使用的内存限制,我需要一种自动释放内存的方式,以便表格可以继续工作。Mysql:当内存表达到max_heap_table_size时该怎么办?

谢谢。

回答

5

如果你的内存不足时,发动机会引发错误1114与以下错误消息:

The table 'table_name' is full 

你应该赶在客户端此错误,并从表中删除一些数据。

1

你应该用正常的,持续的,而不是表,并依靠固有的缓存。对于其中的内容可以安全地扔掉表,MyISAM的是一个安全引擎(前提是你高兴的事在每次启动一个TRUNCATE TABLE),或者,您也可以使用相同的引擎,你的永久表(例如InnoDB的)。

无论如何,内存表非常糟糕(在所有发布的MySQL版本中; Drizzle和其他一些版本更好),因为它们将行填充到最大长度,这意味着您无法真正开始将VARCHAR合理地放入其中。

不幸的是,您还不能在每个表(或每个事务)基础上设置innodb耐久性参数,因此您必须根据每个服务器来决定需要多少耐久性 - 在您的情况下,无您可以设置的innodb_flush_log_at_trx_commit为2(或甚至0,但很少获得你)

+0

它不再是真实的MEMORY存储引擎垫VARCHAR处理而止。最近版本的Percona MySQL服务器修复了这个问题。 – matt 2012-03-28 08:21:36

相关问题