Mam serwer mysql 5.1 z bazą danych około 450 tabel, zajmującą 4 GB. Zdecydowana większość tych tabel (wszystkie oprócz 2) to MyIsam. W większości przypadków było to w porządku (nie wymaga transakcji), ale aplikacja zyskuje ruch i niektóre tabele zostały naruszone z powodu blokowania tabel podczas aktualizacji. To jest powód, dla którego 2 tabele są teraz InnoDB.
Konwersja w mniejszych tabelach (100 000 wierszy) wcale nie trwa długo, co powoduje minimalne przestoje. Jednak kilka moich tabel śledzenia zbliża się do 50 milionów wierszy. Czy istnieje sposób na przyspieszenie ALTER TABLE...ENGINE InnoDB
na dużych stołach? A jeśli nie, to czy istnieją inne metody konwersji minimalizujące przestoje w tych tabelach o dużym obciążeniu zapisu?
mysql-5
storage-engine
Derek Downey
źródło
źródło
Odpowiedzi:
Zacznę od stwierdzenia, że nienawidzę ZMIENIĆ. To zło, IMHO.
Powiedz, to jest twój obecny schemat tabeli -
Oto ścieżka, którą polecam -
Utwórz nowy obiekt tabeli, który zastąpi stary:
Wstaw wszystkie wiersze ze starej tabeli według nazwy do nowej tabeli:
Test dymu swojej migracji:
Zamień nazwy tabel, aby zachować kopię zapasową na wypadek, gdybyś musiał cofnąć.
Przejdź do testów regresji.
Takie podejście staje się coraz bardziej preferowane w przypadku tabel z wieloma indeksami i milionami wierszy.
Myśli?
źródło
ALTER TABLE
trwać dłużej niżINSERT INTO...SELECT
w przypadku 50 milionów wierszy?1) Ochrona przed stratą jest funkcją paranoi. Zawsze wykonuj kopię zapasową. Jeśli naprawdę jesteś paranoikiem, wykonaj kopię zapasową, a następnie przywróć z kopii zapasowej.
2) Ta strona podręcznika MySQL zawiera instrukcje dotyczące konwersji typów tabel.
3) PostgreSQL wykonuje wyszukiwanie pełnotekstowe , wydaje się, że silnik Sphinx robi to dla MySQL
źródło
X razy łatwiej jest zoptymalizować cały serwer (konfigurację pamięci, pamięci podręczne, indeksy), gdy używany jest tylko jeden silnik. Mieszanie myisam z innodb na dużych bazach danych zawsze utknie w pewnym momencie wymuszonym przez kompromis, aby oba silniki działały dobrze (ale nie doskonale :)
Polecam zainteresować się niektórymi dedykowanymi wyszukiwarkami pełnotekstowymi, takimi jak sfinks , lucene ( solr ) i pozbyć się go z warstwy bazy danych.
źródło