Tout d'abord, considérons ces variables d'état:
Tables ouvertes : nombre de tables ouvertes.
Opened_tables : Le nombre de tables qui ont été ouvertes. Si Opened_tables est grand, votre valeur table_open_cache est probablement trop petite.
Étonnamment, la réponse à votre question réside dans la question elle-même.
Les deux variables n'auraient plus de sens que si vous jetiez une autre variable d'état dans le mélange: Uptime (ou Uptime_since_flush status pour les moyennes fraîches après FLUSH STATUS ).
Vous devriez comparer Open_tables agsinst (Opened_tables / Uptime) . Si Open_tables grimpe au-dessus (Opened_tables / Uptime) , vous avez maintenant des raisons de vous inquiéter et devez garder un œil ouvert sur des choses comme les suivantes:
MISE À JOUR 2011-08-31 12:18 EDT
Veuillez noter pourquoi j'ai également suggéré d'utiliser Uptime_since_flush_status au lieu d' Uptime pour obtenir un modèle de croissance Opened_tables fixe pour une période donnée.
Par exemple, si vous exécutez FLUSH STATUS;
tous les lundis à minuit, vous pouvez générer un 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;
Ce facteur de table ouverte correspond au nombre qui représente le nombre de tables ouvertes à un moment donné par rapport au nombre moyen de tables ouvertes tout au long d'une période donnée. Avec un FLUSH HOSTS;
chaque semaine / jour / hôte, cette moyenne est contre la semaine / jour / heure.
Voici un échantillon de l'un des clients de mon employeur:
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)
Ce client maintient normalement environ 7745 OpenTableFactor à max. Si OpenTableFactor tombe soudainement (même si c'est un peu), cela pourrait indiquer des modèles de trafic plus faibles, des connexions avortées élevées, etc. Si OpenTableFactor ne change jamais (même un peu), cela pourrait vous offrir la possibilité de modifier ces paramètres:
Une fois réglé, l'OpenTableFactor peut changer constamment ou atteindre un autre plafond ou plateau. Ainsi, l'utilisation de différentes unités dans les variables d'état devient vitale pour ce type de réglage.
MISE À JOUR 2011-08-31 12:42 EDT
La requête SQL que j'ai exécutée pour OpenTableFactor ne fonctionne pas pour MySQL 5.0 et inversement. Si vous utilisez MySQL Administrator ou MONyog , vous pouvez personnaliser un graphique en utilisant la formule dans la requête et le moniteur. MONyog collecte l'historique à l'aide de SQLLite pour un graphique historique ultérieur. Cela peut être fait pour n'importe quelle version de MySQL.