MySQL状态“关闭表”占用了整个过程的两倍

时间:2012-07-24 13:18:57

标签: mysql performance

我有一个需要很长时间的删除查询。当我签入processlist时,状态显示为“关闭表格”。关闭牌桌需要很长时间。

实施例
我运行一个查询,总时间 1:42 秒,其中 80-90 秒用于关闭表。

所有问题都会发生这种情况,例如load dataselectinsert

以下是 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 文件中需要做哪些更改?

3 个答案:

答案 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

http://dev.mysql.com/doc/refman/5.5/en/table-cache.html

答案 2 :(得分:0)

检查这两个变量的值,这对于在这种情况下提高mysql性能也很重要。

query_cache_size : - 每次插入都会刷新查询缓存,这会增加MySQL的性能,因为它会增加开销。检查值是否过高且以兆字节为单位。

Innodb_flush_log_at_trx_commit : - 您可以将其设置为0(日志文件每秒刷新到磁盘),1(每次提交将日志文件刷新到磁盘)和2(日志文件刷新为每隔短的间隔(秒)。