Сначала давайте рассмотрим эти переменные состояния:
Открытые таблицы : количество открытых таблиц.
Opened_tables : количество открытых таблиц. Если Opened_tables большой, ваше значение table_open_cache, вероятно, слишком мало.
Удивительно, но ответ на ваш вопрос лежит в самом вопросе.
Две переменные будут иметь больше смысла, только если вы добавите еще одну переменную состояния в смесь: Uptime (или статус Uptime_since_flush для свежих средних после FLUSH STATUS ).
Вы должны сравнивать 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 ПО ВОСТОЧНОМУ ВРЕМЕНИ
SQL-запрос, который я выполнил для OpenTableFactor, не работает для MySQL 5.0 и обратно. Если вы используете MySQL Administrator или MONyog , вы можете настроить график, используя формулу в запросе и мониторе. MONyog собирает историю, используя SQLLite для последующего исторического построения графиков. Это можно сделать для любой версии MySQL.