【发布时间】:2012-05-21 19:40:37
【问题描述】:
我想这个问题被问过很多次了,但是搜索它我只发现了一些回复中的一些注释。
我知道文件通常由 OS+文件系统处理,但是有(或应该有)方法来改变它。其他大型数据库系统至少使用文件预分配并通过添加大块来增长。据我所知,MySQL 缺乏这种类型的功能(或者我的知识已经过时?)并且它只能提供OPTIMIZE TABLE 哪些碎片整理文件中的记录,但文件本身可能非常碎片化。
作为一个具体的问题,我有一个应该充当堆栈的表:很多INSERTs 和DELETEs,数据的生命周期很短(从几秒到几秒)小时),堆栈的最大大小是已知的。该表会经常修改 - 每天数千次,并且还有其他 活动 表,因此这种情况会随着时间的推移导致磁盘布局非常碎片化。我目前的想法是预先分配整个 stack 表,然后使用 top index 和 UPDATEs。
无论如何,除了我的具体问题(如果有一个解决方案也很好),有哪些方法可以减少甚至消除 MySQL 数据文件的碎片整理(如果可能),MyISAM 和 InnoDB ,最好在 *nix 系统上? 并且 原始设备 至少对于 InnoDB 来说是一种解决方案吗?
【问题讨论】:
-
针对您的具体问题,您是否考虑过使用 NoSQL 数据库? Redis 看起来是满足您需要的不错选择。
-
@Sam:Redis 是否缺少数据库软件本身产生的碎片等这种特殊类型的问题?
-
Redis 是一个内存数据库,所以文件碎片不是问题。可能确实存在内存碎片,您必须检查这是否是您特定问题的问题。抱歉,我不能给你更具体的答案。
标签: mysql defragmentation