MariaDB 不缓存任何查询

Que*_*low 3 mysql mariadb query-cache

我测试了几个简单的查询,如下所示:

SELECT COUNT(*) FROM Users WHERE courses='a';
Run Code Online (Sandbox Code Playgroud)

但没有一个被缓存。以下是缓存相关变量:

show variables like "%cache%";
+-------------------------------+----------------------+
| Variable_name                 | Value                |
+-------------------------------+----------------------+
| aria_pagecache_age_threshold  | 300                  |
| aria_pagecache_buffer_size    | 100000000            |
| aria_pagecache_division_limit | 100                  |
| binlog_cache_size             | 32768                |
| binlog_stmt_cache_size        | 32768                |
| have_query_cache              | YES                  |
| join_cache_level              | 2                    |
| key_cache_age_threshold       | 300                  |
| key_cache_block_size          | 1024                 |
| key_cache_division_limit      | 100                  |
| key_cache_segments            | 0                    |
| max_binlog_cache_size         | 18000000000000000000 |
| max_binlog_stmt_cache_size    | 18000000000000000000 |
| metadata_locks_cache_size     | 1024                 |
| query_cache_limit             | 1048576              |
| query_cache_min_res_unit      | 4096                 |
| query_cache_size              | 0                    |
| query_cache_strip_comments    | OFF                  |
| query_cache_type              | ON                   |
| query_cache_wlock_invalidate  | OFF                  |
| stored_program_cache          | 256                  |
| table_definition_cache        | 400                  |
| table_open_cache              | 400                  |
| thread_cache_size             | 0                    |
+-------------------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)

缓存相关状态显示:

show status like "%cache%";
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| Aria_pagecache_blocks_not_flushed | 0     |
| Aria_pagecache_blocks_unused      | 15737 |
| Aria_pagecache_blocks_used        | 2     |
| Aria_pagecache_read_requests      | 78    |
| Aria_pagecache_reads              | 3     |
| Aria_pagecache_write_requests     | 6     |
| Aria_pagecache_writes             | 0     |
| Binlog_cache_disk_use             | 0     |
| Binlog_cache_use                  | 0     |
| Binlog_stmt_cache_disk_use        | 0     |
| Binlog_stmt_cache_use             | 0     |
| Com_assign_to_keycache            | 0     |
| Qcache_free_blocks                | 0     |
| Qcache_free_memory                | 0     |
| Qcache_hits                       | 0     |
| Qcache_inserts                    | 0     |
| Qcache_lowmem_prunes              | 0     |
| Qcache_not_cached                 | 0     |
| Qcache_queries_in_cache           | 0     |
| Qcache_total_blocks               | 0     |
| Ssl_callback_cache_hits           | 0     |
| Ssl_session_cache_hits            | 0     |
| Ssl_session_cache_misses          | 0     |
| Ssl_session_cache_mode            | NONE  |
| Ssl_session_cache_overflows       | 0     |
| Ssl_session_cache_size            | 0     |
| Ssl_session_cache_timeouts        | 0     |
| Ssl_used_session_cache_entries    | 0     |
| Subquery_cache_hit                | 0     |
| Subquery_cache_miss               | 0     |
| Threads_cached                    | 0     |
+-----------------------------------+-------+
Run Code Online (Sandbox Code Playgroud)

我已阅读手册检查是否满足以下条件:

  • query_cache_type 服务器变量设置为 1 或 ON
  • 查询中不存在以下函数: BENCHMARK() CONNECTION_ID() CONVERT_TZ() CURDATE() CURRENT_DATE() CURRENT_TIME() CURRENT_TIMESTAMP() CURTIME() DATABASE() ENCRYPT()(一个参数) FOUND_ROWS() GET_LOCK() LAST_INSERT_ID() LOAD_FILE() MASTER_POS_WAIT() NOW() RAND() RELEASE_LOCK() SLEEP() SYSDATE() UNIX_TIMESTAMP() (无参数) USER() UUID() UUID_SHORT()
  • 它不是以下形式:

    SELECT SQL_NO_CACHE ... SELECT ... INTO OUTFILE ... SELECT ... INTO DUMPFILE ... SELECT ... FOR UPDATE SELECT * FROM ... WHERE autoincrement_column IS NULL SELECT ... 锁定共享模式

  • 它使用非临时表
  • 它不会生成警告
  • 它不访问分区表
  • 它不访问 INFORMATION_SCHEMA、mysql 或 Performance_schema 数据库中的表
  • 它不使用用户或局部变量
  • 它不使用存储的函数
  • 它不使用用户定义的函数
  • 它不在具有 SERIALIZABLE 隔离级别的事务内

我唯一不确定的是:

  • 用户对查询中的任何表都没有列级权限

我运行SHOW FULL COLUMNS FROM Users;并且所有列都包含“选择、插入、更新”。即使是新创建的表也包含这些权限。谁能解释一下可能出了什么问题?

Mic*_*bot 5

你错过了一件事。

query_cache_size              | 0       
Run Code Online (Sandbox Code Playgroud)

要设置查询缓存的大小,请设置query_cache_size系统变量。将其设置为 0 将禁用查询缓存,设置query_cache_type=0 也是如此。

https://dev.mysql.com/doc/refman/5.6/en/query-cache-configuration.html

尽管已启用,但查询缓存大小默认为 0KB,这会有效禁用查询缓存。通过设置 > 40KB 的数量来启用它

https://mariadb.com/kb/en/query-cache/

https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_query_cache_size