Mysql

query_cache_size 在沒有我意願的情況下定期重置

  • August 23, 2018

我有一個接收大量搜尋的網站,所以我需要一個記憶體。

VPS 在 plesk 許可證下,作業系統是 Centos。

前幾天我用下面的命令在mysql中實現了一個記憶體:

SET GLOBAL query_cache_size = 16777216;

問題是幾天后 query_cache_size 會自動重置:

mysql> SHOW VARIABLES LIKE 'query_cache_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| query_cache_size | 0     |
+------------------+-------+
1 row in set (0.00 sec)

這是文件/etc/my.cnf

[mysqld]
bind-address = 127.0.0.1
local-infile = 0
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
user = mysql

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

query_cache_size = 16777216
query_cache_type = 1
query_cache_limit = 1048576

我該如何解決這個問題?

一般來說,query_cache 不是很有用。其中的問題是全域互斥鎖,當您更新表時會發生記憶體結果的逐出(所述表的所有記憶體結果,全部)。

我會考慮調查該實例的情況。可能是提供商使用一些配置管理工具(Chef、Puppet、Saltstack、Ansible)對其進行管理,並且 MySQL 變數被設置為所有者認為將保護虛擬機管理程序上的記憶體使用的值。

如果您有控制台訪問權限,請檢查 Linux 程序列表,了解本地執行的代理可能指向 Chef 或 Puppet 的跡象。根據您的經驗水平和您對電腦的控制量,設置一些審核日誌記錄以檢查誰/什麼連接到您的實例並更改配置可能很有用。

https://mariadb.com/kb/en/library/mariadb-audit-plugin-installation/ https://github.com/mcafee/mysql-audit/wiki/Installation

您可以通過使用 mysql 中的事件調度程序(選擇您的首選時間間隔)來強制它的狀態。

USE mysql;
CREATE EVENT set_query_cache
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO
  SET GLOBAL query_cache_size = 16777216;

儘管 mysql 每 5 秒發生一次事件,但變數 query_cache_size 再次設置為 0:

select EVENT_DEFINITION,INTERVAL_VALUE from events;
+----------------------------------------+----------------+
| EVENT_DEFINITION                       | INTERVAL_VALUE |
+----------------------------------------+----------------+
| SET GLOBAL query_cache_size = 16777216 | 5              |
+----------------------------------------+----------------+

SHOW VARIABLES LIKE 'query_cache_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| query_cache_size | 0     |
+------------------+-------+

引用自:https://dba.stackexchange.com/questions/214431