-- CHECK TABLE — sprawdź spójność tabeli CHECK TABLE produkty; CHECK TABLE klienci, zamowienia; -- wiele tabel CHECK TABLE produkty EXTENDED; -- dokładniejszy test -- ANALYZE TABLE — zaktualizuj statystyki klucza (dla optymalizatora) ANALYZE TABLE produkty; -- OPTIMIZE TABLE — defragmentuj tabelę i odzysk miejsca OPTIMIZE TABLE produkty; -- Dla InnoDB wykonuje REBUILD tabeli (może trwać długo przy dużych tabelach) -- REPAIR TABLE — napraw uszkodzoną tabelę (tylko MyISAM) REPAIR TABLE stara_tabela; -- InnoDB: przywróć z backupu lub użyj innodb_force_recovery
| Polecenie | Cel | Kiedy używać |
|---|---|---|
CHECK TABLE | Sprawdzenie integralności struktury i danych | Po błędzie, przed migracją |
ANALYZE TABLE | Aktualizacja statystyk indeksów | Po masowych INSERT/DELETE, gdy EXPLAIN pokazuje złe plany |
OPTIMIZE TABLE | Defragmentacja, odzysk przestrzeni dyskowej | Po masowych DELETE, gdy tabela zajmuje dużo miejsca |
REPAIR TABLE | Naprawa uszkodzonej tabeli (tylko MyISAM) | Komunikat "Table is marked as crashed" |
| Litera | Właściwość | Opis |
|---|---|---|
| A | Atomicity (Atomowość) | Transakcja to "wszystko albo nic" — jeśli coś się nie powiedzie, całość jest cofnięta |
| C | Consistency (Spójność) | Transakcja prowadzi bazę z jednego spójnego stanu do drugiego (nie narusza więzów) |
| I | Isolation (Izolacja) | Równoległe transakcje nie widzą nawzajem swoich niezatwierdzonych zmian |
| D | Durability (Trwałość) | Po COMMIT dane są trwale zapisane — nawet awaria serwera ich nie usunie |
-- Poziomy izolacji transakcji w MySQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- domyślny InnoDB SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- najsilniejszy
-- Przykład deadlock: -- Transakcja A blokuje wiersz 1, czeka na wiersz 2 -- Transakcja B blokuje wiersz 2, czeka na wiersz 1 -- → MySQL cofa jedną z transakcji (tę z mniejszym kosztem) -- Diagnozowanie blokad SHOW ENGINE INNODB STATUS; -- szczegóły deadlocka SHOW PROCESSLIST; -- aktywne połączenia KILL 42; -- zabij połączenie o id=42 -- Jak unikać deadlocków: -- 1. Zawsze blokuj tabele/wiersze w tej samej kolejności we wszystkich transakcjach -- 2. Skracaj transakcje — im krótsza, tym mniej czasu na kolizję -- 3. Używaj SELECT ... FOR UPDATE tylko gdy naprawdę potrzebujesz -- 4. Obsługuj błąd deadlock w aplikacji (retry)
-- Informacje o tabelach w bazie 'sklep' SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS rozmiar_MB FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sklep' ORDER BY DATA_LENGTH DESC; -- Lista kolumn w tabeli produkty SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'sklep' AND TABLE_NAME = 'produkty'; -- Lista kluczy obcych SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'sklep' AND REFERENCED_TABLE_NAME IS NOT NULL;
Które stwierdzenie poprawnie opisuje właściwość Isolation (I) w ACID?
Które zachowanie aplikacji NAJLEPIEJ zapobiega deadlockom?
CHECK TABLE = sprawdź integralność; ANALYZE TABLE = statystyki; OPTIMIZE TABLE = defragmentacjaSHOW ENGINE INNODB STATUS — szczegóły deadlocków i blokadINFORMATION_SCHEMA — systemowy widok z metadanymi o tabelach, kolumnach, indeksach