Innanzitutto, consideriamo quelle variabili di stato:
Tabelle aperte : il numero di tabelle aperte.
Opened_tables : il numero di tabelle che sono state aperte. Se Opened_tables è grande, il valore di table_open_cache è probabilmente troppo piccolo.
Sorprendentemente, la risposta alla tua domanda sta nella domanda stessa.
Le due variabili avrebbero più senso solo se si aggiungesse un'altra variabile di stato nel mix: Uptime (o Uptime_since_flush status per medie fresche dopo FLUSH STATUS ).
Dovresti confrontare Open_tables agsinst (Opened_tables / Uptime) . Se Open_tables sale sopra (Opened_tables / Uptime) , ora hai motivo di preoccupazione e dovresti tenere d'occhio cose come le seguenti:
AGGIORNAMENTO 2011-08-31 12:18 EDT
Nota perché ho anche suggerito di utilizzare Uptime_since_flush_status anziché Uptime per ottenere un modello di crescita Opened_tables fisso per un determinato periodo.
Ad esempio, se si esegue FLUSH STATUS;
ogni lunedì a mezzanotte, è possibile generare 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;
Questo fattore di tabella aperta equivale al numero che rappresenta il numero di tabelle aperte in un dato momento rispetto al numero medio di tabelle aperte durante un determinato periodo. Con un FLUSH HOSTS;
ogni settimana / giorno / host, quella media è contro la settimana / giorno / ora.
Ecco un esempio di uno dei clienti del mio datore di lavoro:
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)
Questo client mantiene normalmente circa 7745 OpenTableFactor al massimo. Se OpenTableFactor si abbassa improvvisamente (anche se un po '), potrebbe indicare modelli di traffico più bassi, alte concentrazioni interrotte e così via. Se OpenTableFactor non cambia mai (anche se un po '), potrebbe offrirti l'opportunità di modificare queste impostazioni:
Una volta regolato, OpenTableFactor può cambiare costantemente o colpire un altro soffitto o plateau. Pertanto, l'utilizzo di unità diverse all'interno delle variabili di stato diventa vitale per questo tipo di ottimizzazione.
AGGIORNAMENTO 2011-08-31 12:42 EDT
La query SQL che ho eseguito per OpenTableFactor non funziona per MySQL 5.0 e versioni successive. Se si utilizza MySQL Administrator o MONyog , è possibile personalizzare un grafico utilizzando la formula nella query e nel monitor. MONyog raccoglie la cronologia usando SQLLite per un successivo grafico storico. Questo può essere fatto per qualsiasi versione di MySQL.