ana*_*han 5 mysql innodb myisam memory
任何配置错误是否会导致 mysql..mysql 调谐器显示创建过多的临时表
Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk
table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%
Run Code Online (Sandbox Code Playgroud)
早些时候,临时表是of the 23725 temp tables 38% were created on disk
,但我改变max_heap
,并tmp_table
从16米200米和它降低到30%..
engine myisam
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800
Run Code Online (Sandbox Code Playgroud)
另一个具有默认配置的系统正在显示
of 23725 temp tables, 1% were created on disk
但是我尝试在出现此问题的机器上更改为默认值,它仍然显示 Of 580 temp tables, 16% were created on disk
我正在使用带有 48 gb ram 的 Ubuntu 11.4 64 位...任何人都可以提出解决方案吗?
使用“group by”将数据库引擎从 myisam 更改为表上的内存会解决这个问题吗?
当查询无法一次性计算时,MySQL 使用临时表。切换存储引擎不会改变这一点。问题在于查询,而不是配置。
增加该tmp_table_size
值只会阻止其中一些写入磁盘,它们仍将在内存中创建并填充数据。这些数据可能首先来自磁盘,尽管使用 48GB 的 RAM,您可能已经缓存了很多数据。即使缓存,由于这些临时表中有 30% 大于 200MB,因此在 RAM 中复制该数量的数据仍然需要时间。
您甚至可以在运行查询之前通过使用EXPLAIN
语法确定它是否将使用临时表。只要放在EXPLAIN
你的查询之前,它就会输出一堆关于执行计划和查询效率的信息,而无需实际执行它。
您可能会找到导致这些临时表的查询,因为它们很可能是慢查询,因此最终会出现在您的慢查询日志中。
如果您需要帮助调整特定查询,DBA.SE是一个不错的选择。
TL; 博士
调整您的查询。
归档时间: |
|
查看次数: |
7183 次 |
最近记录: |