首先,让我们考虑一下这些状态变量:
打开的表:打开的表数。
Opened_tables:已打开的表数。如果Opened_tables大,则您的table_open_cache值可能太小。
令人惊讶的是,问题的答案就在问题本身之内。
仅当您将一个状态变量添加到混合中时,这两个变量才更有意义:正常运行时间(或FLUSH STATUS之后刷新平均值的Uptime_since_flush 状态)。
您应该比较Open_tables agsinst ( Opened_tables / Uptime)。如果Open_tables超过( Opened_tables / Uptime),现在您会感到担忧,应该对以下情况保持警惕:
更新美国东部时间2011-08-31 12:18
请注意为什么我还建议使用Uptime_since_flush_status而不是Uptime来获取给定时间段内固定的Opened_tables增长模式。
例如,如果您在FLUSH STATUS;
每个星期一的午夜运行,则可以生成一个OpenTableFactor:
SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM
(SELECT variable_value Uptime FROM information_schema.global_status
WHERE variable_name = 'Uptime_since_flush_status') up,
(SELECT variable_value Open_tables FROM information_schema.global_status
WHERE variable_name = 'Open_tables') opn,
(SELECT IF(variable_value=0,1,variable_value) Opened_tables
FROM information_schema.global_status
WHERE variable_name = 'Opened_tables') opnd;
此开放表系数等于表示在任何给定时间的开放表数量相对于整个给定期间的平均打开表数量的数量。对于FLUSH HOSTS;
每周/每天/主机,该平均值与每周/每天/小时相对。
以下是我的一位雇主客户的示例:
mysql> SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM (SELECT variable_value Uptime FROM information_sc hema.global_status WHERE variable_name = 'Uptime_since_flush_status') up, (SELECT variable_value Open_tables FROM informat ion_schema.global_status WHERE variable_name = 'Open_tables') opn, (SELECT IF(variable_value=0,1,variable_value) Opened_ta bles FROM information_schema.global_status WHERE variable_name = 'Opened_tables') opnd;
+----------+-------------+---------------+-------------------+
| Uptime | Open_tables | Opened_tables | OpenTableFactor |
+----------+-------------+---------------+-------------------+
| 14385123 | 16326 | 30429078 | 7717.996519579068 |
+----------+-------------+---------------+-------------------+
1 row in set (0.00 sec)
此客户端通常最多维护大约7745个OpenTableFactor。如果OpenTableFactor突然下降(即使略有下降),则可能表示流量模式较低,对接高中止状态等等。如果OpenTableFactor从未更改(即使有少许更改),它可能会为您提供更改以下设置的机会:
调整后,OpenTableFactor可能会不断变化或达到另一个上限或稳定水平。因此,在状态变量中使用不同的单位对于这种调整至关重要。
更新2011-08-31 12:42 EDT
我为OpenTableFactor运行的SQL查询不适用于MySQL 5.0和更高版本。如果使用MySQL Administrator或MONyog,则可以使用查询和监视中的公式来自定义图形。MONyog使用SQLLite收集历史记录,以便以后进行历史记录。可以对任何版本的MySQL执行此操作。