How*_*ard 2 mysql performance query-cache performance-tuning
我的查询缓存设置如下:
mysql> SHOW GLOBAL STATUS LIKE 'Q%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 2270 |
| Qcache_free_memory | 6580864 |
| Qcache_hits | 12802676 |
| Qcache_inserts | 2094054 |
| Qcache_lowmem_prunes | 111676 |
| Qcache_not_cached | 137257 |
| Qcache_queries_in_cache | 7559 |
| Qcache_total_blocks | 18240 |
| Queries | 15571718 |
| Questions | 15571715 |
+-------------------------+----------+
Run Code Online (Sandbox Code Playgroud)
如您所见,我的 值相当高Qcache_lowmem_prunes,但我仍然有相当多的可用内存(总共 32MB 查询缓存大小中的 6MB)
我想看看是否可以进一步减少Qcache_lowmem_prunes.
我应该使用较低的值query_cache_min_res_unit吗?(现在是 4096)
您的query_cache_min_res_unit是 4KB 并且您有 6MB 的查询缓存可用?看这个:
6MB = 6144 KB
6144 KB divided by 4KB/query = 1536 queries.
Run Code Online (Sandbox Code Playgroud)
您可以在查询缓存中的 6MB 可用空间中容纳 1536 个小查询结果。这 6MB 很可能被视为内存碎片。为什么?
根据有关查询缓存配置的 MySQL 文档
如果你有很多查询结果很小,默认块大小可能会导致内存碎片,如大量空闲块所示。由于内存不足,碎片可以强制查询缓存从缓存中修剪(删除)查询。在这种情况下,请减小query_cache_min_res_unit的值。由于修剪而删除的空闲块和查询的数量由Qcache_free_blocks和Qcache_lowmem_prunes状态变量的值给出。
在这种情况下,您也可以选择query_cache_min_res_unit的最小值:512。这将节省您多次降低它的步骤,直到您获得更好的状态结果。至少,它应该减少碎片化。
| 归档时间: |
|
| 查看次数: |
4238 次 |
| 最近记录: |