2

MariaDB 的 QCache_hits 和 Com_select 一起增加。

例如。

MySQL

  • 显示全局状态 - Com_select 为 0。Qcache_hits 为 0。
  • 第一次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 1。Qcache_hits 为 0。
  • 第二次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 1。 Qcache_hits 为 1。
  • 第三次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 1。Qcache_hits 为 2。

玛丽亚数据库

  • 显示全局状态 - Com_select 为 0。Qcache_hits 为 0。
  • 第一次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 1。Qcache_hits 为 0。
  • 第二次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 2。 Qcache_hits 为 1。
  • 第三次选择:从 id = 1 的 test_table 中选择 * - Com_select 为 3。Qcache_hits 为 2。

如果缓存被命中,为什么即使 Com_select 的数量增加?

我的环境是 Ubunut 12.04(x64) 和 MariaDB 5.5.35。


MariaDB [test]> show global status where Variable_name in ('Com_select', 'Qcache_hits');

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 79    |
| Qcache_hits   | 6     |
+---------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]> insert into testtable values (11, 3);
Query OK, 1 row affected (0.00 sec)<br/>

MariaDB [test]> select * from testtable where id = 11;
+----+------+
| id | name |
+----+------+
| 11 |    3 |
+----+------+
1 row in set (0.00 sec)

MariaDB [test]> show global status where Variable_name in ('Com_select', 'Qcache_hits') ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 80    |
| Qcache_hits   | 6     |
+---------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from testtable where id = 11;
+----+------+
| id | name |
+----+------+
| 11 |    3 |
+----+------+
1 row in set (0.00 sec)

MariaDB [test]> select * from testtable where id = 11;
+----+------+
| id | name |
+----+------+
| 11 |    3 |
+----+------+
1 row in set (0.00 sec)

MariaDB [test]> show global status where Variable_name in ('Com_select', 'Qcache_hits') ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 82    |
| Qcache_hits   | 8     |
+---------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]>
4

1 回答 1

0

我可以使用 MariaDB 5.5.39 和 10.0.14 验证这一点。我不确定这是否是故意的更改(恕我直言,MariaDB 的行为更正确),但至少根据 MariaDB 知识库中的这一部分,它的行为应该与这里的 MySQL 相同:

请注意,从查询缓存返回的查询不会增加 Com_select 状态变量,因此要查找在服务器上运行的有效查询的总数,请将 Com_select 添加到 Qcache_hits。

https://mariadb.com/kb/en/mariadb/documentation/optimization-and-tuning/buffers-caches-and-threads/query-cache/

所以我已经提交了这个错误报告:

https://mariadb.atlassian.net/browse/MDEV-7216

于 2014-11-26T12:07:11.520 回答