5

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

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

所有查询都发生这种情况,load data例如selectinsert

以下是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


我的信息

[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文件中进行哪些更改?

4

3 回答 3

2

收盘

该线程正在将更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果没有,您应该确认您没有完整的磁盘并且该磁盘没有被大量使用。

您可以查看General MySql Thread States以获取更多详细信息。

希望这有帮助!

于 2012-07-24T13:36:10.590 回答
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

于 2012-07-24T13:33:55.767 回答
0

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

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

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

于 2017-05-01T08:36:52.040 回答