Ta strona jest oryginalną dokumentacją PmaControl. Zachowuje praktyczną strukturę indeksu do pracy nad optymalizacją MySQL, bez kopiowania treści zewnętrznych i bez zależności od zewnętrznego produktu.
Cel
Kontrole schematu szukają struktur kosztownych w produkcji: brakujących indeksów, zbyt szerokich kolumn, brakujących kluczy głównych, historycznych tabel MyISAM i nieużywanych indeksów.
Co sprawdzać
- Tabele InnoDB bez klucza głównego.
- Zduplikowane lub silnie nadmiarowe indeksy.
- Kolumny
VARCHARlubTEXTużyte w zbyt szerokich indeksach. - Kolumny joinów z różnymi typami albo collation.
- Duże tabele bez strategii archiwizacji.
- Brak foreign keys tam, gdzie wymaga tego integralność biznesowa.
Przydatne zapytania
SELECT table_schema, table_name
FROM information_schema.tables t
WHERE engine = 'InnoDB'
AND table_schema NOT IN ('mysql', 'performance_schema', 'information_schema', 'sys')
AND NOT EXISTS (
SELECT 1
FROM information_schema.table_constraints c
WHERE c.table_schema = t.table_schema
AND c.table_name = t.table_name
AND c.constraint_type = 'PRIMARY KEY'
);
Najważniejsze
Dobra kontrola schematu łączy każdą anomalię z zapytaniem, planem wykonania albo mierzalnym kosztem operacyjnym.
Zinwentaryzuj rozmiary, silniki i właścicieli
Zacznij od tabel krytycznych dla biznesu i korzystających z nich zapytań. Zapisz przeznaczenie, retencję, tempo zapisów i okno serwisowe. Metadane wskazują kandydatów, ale nie dowodzą problemu wydajności. Liczba wierszy i rozmiary InnoDB są szacunkowe: służą do rankingu, nie dokładnej ewidencji. Unikaj kosztownych pełnych zliczeń tylko dla pozornej precyzji.
SELECT table_schema, table_name, engine, table_rows,
ROUND(data_length / 1024 / 1024, 1) AS data_mib,
ROUND(index_length / 1024 / 1024, 1) AS index_mib
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema NOT IN ('mysql', 'sys', 'performance_schema',
'information_schema')
ORDER BY data_length + index_length DESC
LIMIT 20;
Porównaj indeksy z rzeczywistym obciążeniem
SELECT table_schema, table_name, redundant_index_name,
dominant_index_name
FROM sys.schema_redundant_indexes
WHERE table_schema NOT IN ('mysql', 'sys');
SELECT object_schema, object_name, index_name
FROM sys.schema_unused_indexes
WHERE object_schema NOT IN ('mysql', 'sys');
Te widoki MySQL sys wymagają zainstalowanego schematu i odpowiedniej instrumentacji. Indeks jest nieużywany tylko w obserwowanej pracy: uwzględnij raporty, zamknięcie miesiąca, odczyty z replik i role po przełączeniu. Przed usunięciem sprawdź unikalność i zależności kluczy obcych. Wspólny prefiks to kandydat do analizy, nie automatycznego usunięcia. W MySQL 8+ odpowiednie indeksy można najpierw ukryć w kontrolowanym teście, lecz nadal obciążają zapisy.
Sprawdź ścieżki dostępu i zgodność kolumn
SELECT table_name, column_name, column_type, is_nullable,
character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'app'
ORDER BY table_name, ordinal_position;
EXPLAIN FORMAT=JSON
SELECT id, created_at
FROM app.orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;
Zastąp app.orders i kolumny rzeczywistym reprezentatywnym zapytaniem. Sprawdź możliwe i wybrane klucze, szacowaną liczbę wierszy, pozostałe filtry i sortowanie. W przykładzie indeks zaczynający się od (customer_id, created_at) jest kandydatem do testu, nie uniwersalnym zaleceniem. Uzgodnij typy, znak, zestawy znaków i kolacje kolumn łączonych. Konwersje i funkcje mogą zmienić ścieżkę dostępu. Sprawdzaj plan dla realistycznych parametrów, także dużych klientów.
Sklasyfikuj problemy struktury
| Sygnał | Jak potwierdzić | Następny krok |
|---|---|---|
| Brak klucza głównego | Definicja tabeli i identyfikacja wierszy | Wybierz stabilny klucz i oceń przebudowę |
| Nadmiarowy indeks | Definicja, zależności i zakres obciążenia | Przetestuj usunięcie przed wykonaniem DDL |
| Niezgodne kolumny złączeń | Typy, kolacje i rzeczywisty plan | Zweryfikuj konwersję i semantykę aplikacji |
Przekształć ustalenie w kontrolowaną migrację
- Zapisz
SHOW CREATE TABLE, zależne zapytania, klucze obce i pierwotny plan. - Oszacuj miejsce tymczasowe, czas, blokady metadanych i wpływ na repliki dla danego DDL i wersji. DDL online nadal może czekać na blokady metadanych.
- Testuj na reprezentatywnych danych; porównaj odczyty, koszt zapisu, rozmiar i poprawność.
- Zaplanuj wycofanie: odtworzenie indeksu trwa, a cofnięcie schematu może wymagać konwersji danych lub przywrócenia kopii.
Dalsza diagnostyka
- Powiąż ustalenia ze strojeniem i zapisz w ocenie.