Najpierw rozważmy te zmienne statusu:
Otwarte tabele : liczba otwartych tabel.
Opened_tables : liczba tabel, które zostały otwarte. Jeśli Opened_tables jest duży, twoja wartość table_open_cache jest prawdopodobnie zbyt mała.
Co zaskakujące, odpowiedź na twoje pytanie leży w samym pytaniu.
Obie zmienne spowodowałoby większy sens tylko jeśli rzucisz jeszcze jedną zmienną stanu do mix: Uptime (lub stanu Uptime_since_flush świeżych średnich po PŁUCZ STATUS ).
Powinieneś porównywać Open_tables agsinst (Opened_tables / Uptime) . Jeśli Open_tables wspina się wyżej (Opened_tables / Uptime) , teraz masz powód do niepokoju i powinieneś mieć oko na rzeczy takie jak:
AKTUALIZACJA 31.08.2011 12:18 EDT
Zwróć uwagę, dlaczego zasugerowałem również użycie Uptime_since_flush_status zamiast Uptime, aby uzyskać poprawny wzorzec wzrostu Opened_tables dla danego okresu.
Na przykład, jeśli uruchamiasz w FLUSH STATUS;
każdy poniedziałek o północy, możesz wygenerować 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;
Ten współczynnik otwartej tabeli odpowiada liczbie reprezentującej liczbę otwartych tabel w danym momencie w porównaniu ze średnią liczbą otwartych tabel w danym okresie. W przypadku FLUSH HOSTS;
każdego tygodnia / dnia / gospodarza ta średnia jest w stosunku do tygodnia / dnia / godziny.
Oto próbka jednego z klientów mojego pracodawcy:
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)
Ten klient zwykle utrzymuje około 7745 OpenTableFactor na maks. Jeśli OpenTableFactor spadnie nagle (nawet trochę), może to wskazywać na niższe wzorce ruchu, wysokie przerwane połączenia i tak dalej. Jeśli OpenTableFactor nigdy się nie zmieni (choćby trochę), może dać Ci możliwość zmiany tych ustawień:
Po skorygowaniu OpenTableFactor może się ciągle zmieniać lub uderzać w inny sufit lub płaskowyż. Dlatego stosowanie różnych jednostek w zmiennych stanu staje się niezbędne dla tego rodzaju strojenia.
AKTUALIZACJA 31.08.2011 12:42 EDT
Zapytanie SQL, które uruchomiłem dla OpenTableFactor, nie działa dla MySQL 5.0 i starszych. Jeśli używasz MySQL Administrator lub MONyog , możesz dostosować wykres za pomocą formuły w zapytaniu i monitorze. MONyog zbiera historię za pomocą SQLLite do późniejszego tworzenia wykresów historycznych. Można to zrobić dla dowolnej wersji MySQL.