首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSQL状态“关闭表”,占用进程时间的两倍。

问MSQL状态“关闭表”,占用进程时间的两倍。
EN

Database Administration用户
提问于 2012-07-25 04:19:43
回答 1查看 7.5K关注 0票数 5

我有一个删除查询,需要很长时间。当我签入processlist时,状态显示为“结束表”。关门要花很长时间。

示例:

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

load data、select和insert等所有查询都会出现这种情况。

下面是my.cnf设置:

代码语言:javascript
复制
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

我的备忘录

代码语言:javascript
复制
[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文件中做什么样的更改?

EN

回答 1

Database Administration用户

发布于 2012-07-25 10:54:57

关闭表--此线程正在将已更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的行动。如果没有,则应该验证您没有完整的磁盘,并且磁盘没有被大量使用。

这个错误报告也是相关的。

--进一步,

MySQL关闭未使用的表,并在以下情况下从表缓存中删除它:

  • 当缓存已满且线程试图打开不在缓存中的表时。
  • 当缓存包含超过table_cache条目和缓存中的表不再被任何线程使用时。
  • 当发生表刷新操作时。当某人发出FLUSH TABLES语句或执行mysqladmin刷新表或mysqladmin刷新命令时,就会发生这种情况。

您可以通过检查mysqld状态变量Opened_tables来确定表缓存是否太小,该变量指示自服务器启动以来打开表的操作数:

代码语言:javascript
复制
mysql> SHOW GLOBAL STATUS LIKE 'Opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 2741  |
+---------------+-------+

如果该值非常大或增长很快,即使您还没有发出许多刷新表语句,您也应该增加表缓存大小,以获得更多信息--请参阅MySQL如何在这里打开和关闭表:

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

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/21446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档