我有一个需要很长时间的删除查询。当我签入processlist
时,状态显示为“关闭表格”。关闭牌桌需要很长时间。
实施例
我运行一个查询,总时间 1:42 秒,其中 80-90 秒用于关闭表。
所有问题都会发生这种情况,例如load data
,select
和insert
。
以下是 my.cnf 设置:
key_buffer_size = 2G
sort_buffer_size = 8M
read_buffer_size = 10M
read_rnd_buffer_size = 10M
join_buffer_size = 2M
bulk_insert_buffer_size = 100M
myisam_sort_buffer_size = 64M
#tmp_table_size = 100M
#max_heap_table_size = 64M
#max_allowed_packet = 64M
table_cache=1024
我的meminfo
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 7862 6686 1175 0 11 4091
-/+ buffers/cache: 2583 5278
Swap: 15998 18 15980
请告诉我在 my.cnf 文件中需要做哪些更改?
答案 0 :(得分:1)
关闭表格
线程正在将更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果没有,您应该验证您没有完整的磁盘并且磁盘使用不是很大。
您可以查看General MySql Thread States了解更多详情。
希望这有帮助!
答案 1 :(得分:0)
您需要在my.cnf中设置以下变量,以避免打开和关闭表格:
table_open_cache = 10000
table_definition_cache = 10000
查看http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_table_open_cache
答案 2 :(得分:0)
检查这两个变量的值,这对于在这种情况下提高mysql性能也很重要。
query_cache_size : - 每次插入都会刷新查询缓存,这会增加MySQL的性能,因为它会增加开销。检查值是否过高且以兆字节为单位。
Innodb_flush_log_at_trx_commit : - 您可以将其设置为0(日志文件每秒刷新到磁盘),1(每次提交将日志文件刷新到磁盘)和2(日志文件刷新为每隔短的间隔(秒)。