【问题标题】:MYSQL myisam Repair with keycacheMYSQL myisam 用 keycache 修复
【发布时间】:2011-06-28 11:00:29
【问题描述】:

我正在禁用键;批量加载数据;然后在 myisam 表上重新构建索引。然而, 最后一部分需要永远,因为它是

使用 keycache 修复

而不是按排序修复
这是我的变量,我的表中有大约 1 亿条记录,每一行有一个整数主键、一个 smallint 列和一个 varchar(256) 列。我的 myisam_max_sort_file_size 是 500G,我怀疑索引的最大大小是否会接近这个值。

mysql> 显示变量 where variable_name like '%myisam%'; +----------------------------+--------------------- -+ |变量名 |价值 | +----------------------------+--------------------- -+ | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 536870912000 | | myisam_mmap_size | 18446744073709551615 | | myisam_recover_options |关闭 | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 4294967296 | | myisam_stats_method | nulls_unequal | | myisam_use_mmap |关闭 | +----------------------------+--------------------- -+

我的盒子有 8 GB 的 RAM 和 250GB 的存储空间,为什么 MYSQL 不使用带有排序的修复?

【问题讨论】:

  • 可能的欺骗。在此处查看 MarkR 的答案:stackoverflow.com/questions/1067367/…
  • 我已经阅读了另一个线程,它对我没有帮助。我在 /tmp 中有足够的磁盘空间,这是我的 mysql 正在使用的空间
  • 桌子有多大?如果您增加 myisam_sort_buffer_size 的大小,它可能会有所帮助。
  • 该表有 1 亿行,但我将 myisam_sort_buffer_size 设置为 4G。 myisam_max_sort_file_size 是 500G 应该够大了
  • 显然 myisam_sort_buffer_size = 4G 是不够的,我需要将其设置为 10G,然后启用密钥将使用修复和排序。这让我很困惑!

标签: mysql myisam


【解决方案1】:

显然 myisam_sort_buffer_size = 4G 是不够的,我需要将其设置为 10G,然后启用密钥将使用修复排序。这让我很困惑!

【讨论】:

  • myisam_sort_buffer_size 没有写入内存吗?当你有 8G 内存时将它设置为 10G,它的工作量如何?
【解决方案2】:

对于其他发现此问题的人,我最近发现我的MySQL 5.1 服务器不喜欢myisam_sort_buffer_size4G 的精确倍数。我在一次重大的 RAM 升级后发现了这一点,让我从 Keycache 进行修复。

我用不同的 myisam_sort_buffer_size 值测试了一个 200MBENABLE KEYS

4G - repair with keycache
5G - repair with sort
6G - repair with sort
7G - repair with sort
8G - repair with keycache

...

不确定 4G 倍数是否特定于我的配置,但需要注意。在尝试设置为8G16G 甚至64GB 之后,我花了很长时间才发现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2010-12-29
    • 2012-07-13
    相关资源
    最近更新 更多