0

我在 innodb 数据库(MySQL)中有 81 个表。它们中的数据在磁盘上达到 2GB。我的查询很少一次将超过 3 个表连接在一起。我的 innodb_buffer_pool 大小约为 2.1 GB。

运行 mysqltuner.pl 我得到以下信息!

[!!] 表缓存命中率:7%(274 打开/3K 打开)

从 mysqlreport 我看到我确实打开了 274,打开了 3K,我的上限是 400。

然而,这样做

show status like '%open%'

得到这个结果

...
Open_table_definitions      161
Open_tables                 274
Opened_files             150232
Opened_table_definitions      0
Opened_tables                 0

两个问题:

1)“打开的表”不应该在上面显示状态(如“%open%”)的结果中说 3K 而不是零吗?

2)关于我需要做什么来解决这个问题的任何建议!即低表缓存命中率?

谢谢

PS。如果有帮助,第二个!我在 mysqltuner.pl 中是这样的:

[!!] 在磁盘上创建的临时表:29%(磁盘上 35K / 总共 119K)

4

2 回答 2

0
  1. show status like '%open%'显示当前会话的状态,而不是整个 MySQL 数据库的状态(显示状态语法)。要获取全局状态,请show global status like '%open%'改用。

  2. 我遇到的 mysqltuner.pl 的一个问题是,每当它运行时,它都会打开数据库中的所有表,从而增加 opens_tables 统计信息。如果不是这样,MySQL 手册建议设置table_open_cache为 * 。

于 2015-09-09T09:56:52.310 回答
0

1)“打开的表”不应该在上面显示状态(如“%open%”)的结果中说 3K 而不是零吗?

是的,结果主要来自 SHOW STATUS 和 SHOW VARIABLES 以及一些基本的微积分运算。

2)关于我需要做什么来解决这个问题的任何建议!即低表缓存命中率?

表缓存命中是由于: 1. 打开的表太少 2. 所有数据库中的表总数 <<< 打开表缓存大小。

于 2015-08-24T09:48:01.140 回答