我已使用以下配置配置了mariadb:
query_cache_size = 0
query_cache_type = 0
但是mariadb还是在CPU 100%的情况下挂起了。我检查了processlist,我得到了mysql cli中20多个进程的'Waiting for query cache lock "'。所有的进程都等待了超过几千秒。我现在已经看到了很多次了。(为了补充这一点,我们是一个共享主机提供商,有很多用户同时访问数据库)。
我还注意到总是有一个过程
Query | 6301 | closing tables | DROP DATABASE `vafagimone5854_V2JewLtWqhsB7inA1cO3`
这是线索吗?
另外,当我运行SHOW VARIABLES LIKE 'have_query_cache';
时:
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
以及SHOW VARIABLES LIKE 'query_cache_size';
:
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| query_cache_size | 16777216 |
+------------------+----------+
这是超级奇怪的,因为我禁用了缓存。最终,我杀死了mariadbd
并重新启动了服务器进程,这显然不是理想的。
但令我惊讶的是,现在变数都没事了:
SHOW VARIABLES LIKE 'query_cache_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| query_cache_size | 0 |
+------------------+-------+
但是,这仍显示缓存已启用
SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
我非常困惑,有没有可能有人在运行时是query_cache_size
?为什么have_query_cache
总是“是”。
1条答案
按热度按时间bbuxkriu1#
have_query_cache是编译时启用的,不能更改。另请参阅query cache kb page。
看起来你把配置文件改成了
query_cache_size=0
,但是直到你重新启动它才生效。现在它重新启动了,希望性能会更好。删除数据库时长时间“关闭表”是很奇怪的,除非表的数量非常大,并且表缓存不足(这值得检查)。