Obecnie uruchamiam zapytanie alter w mojej tabeli (20 mln wpisów) w celu dodania indeksu. działa już ponad 3 dni (utknął na „kopiuj do tabeli tmp”).
czy jest sposób, aby zobaczyć postęp zapytania lub innymi słowy, czy jest sposób, aby uzyskać szacunkowy czas zakończenia?
dzięki.
SHOW CREATE TABLE tblname\G
na stole i powiedz nam indeks, który chcesz zrobić.Odpowiedzi:
Kiedy mysql zmienia tabelę, zasadniczo tworzy jej kopię, a następnie zamienia kopię. W ten sposób, jeśli anulujesz aktualizację w środku, tabela nadal będzie w stanie stabilnym. Możesz więc zajrzeć do katalogu danych mysql (/ var / lib / mysql /?), Aby zobaczyć, jak duży jest nowy plik, który pokaże ci, jak daleko jest on dalej. Jest to nieco trudniejsze w przypadku Innodb, ale gdzieś tworzona jest tabela tmp.
Możesz znacznie skrócić czas indeksowania, zwiększając zmienne bufora sortowania (myisam_sort_buffer_size, sort_buffer_size). Zrób tak duże, jak to możliwe, dzięki posiadanej pamięci. Możesz skrócić o kilka dni czas modyfikacji, a nawet skrócić go do kilku godzin, w zależności od ilości pamięci. Zrobiłem tabelę rekordów 150 mln w około 3 godziny.
źródło
Ponieważ innodb_fle_per_table jest WYŁĄCZONY, nie możesz zobaczyć tabeli i zmierzyć jej postępu.
Wcześniej napisałem o tym, jak to zrobić dla MyISAM . Możesz to zrobić dla InnoDB tylko wtedy, gdy włączona jest opcja innodb_file_per_table i ponownie zarchiwizujesz infrastrukturę InnoDB . Nadal wymaga spojrzenia w systemie operacyjnym na rozmiary danych plików.
Po pełnym wdrożeniu czyszczenia programu InnoDB i włączeniu pliku innodb_file_per_table możesz zaktualizować indeks w następujący sposób:
PRZYKŁAD masz następujące
db.lotsofdata
z 20 milionami nazw:Tabela wygląda następująco:
Załóżmy, że chcesz utworzyć indeks nazw. Możesz to zrobić:
Podczas działania INSERT, wchodzisz do systemu operacyjnego i uruchamiasz to:
To daje listę aktualnego rozmiaru
lotsofdata_new.ibd
. Kiedy staje się większy niżlotsofdata.ibd
, wtedy wiesz, że jesteś bliski ukończenia.BTW MariaDB ma wewnętrznie wdrożony Status Postępu .
źródło
Nie ma niezawodnego sposobu na sprawdzenie postępu tworzenia indeksu. Jeśli masz plik innodb-file-per-table, możesz uzyskać pewne wskazówki, patrząc na tymczasowy plik .ibd, który jest tworzony w katalogu danych i porównuje go z rozmiarem bieżącego pliku, ale to nie jest bardzo wiarygodne, ponieważ twój obecny plik danych może być rozdęty z powodu usuwania / fragmentacji, a nowy plik danych będzie miał dodatkowy indeks, którego poprzedni nie miał.
Wygląda na to, że używasz wersji MySQL bez zainstalowanej wtyczki InnoDB . Wtyczka InnoDB umożliwia szybkie tworzenie indeksu, który nie wymaga pełnej przebudowy tabeli w celu dodawania i usuwania indeksu. Wtyczka InnoDB jest domyślnie włączona w MySQL 5.5 i dostępna z ustawieniem konfiguracji w 5.1.38 i późniejszych.
Serwer Percona na wiele sposobów (wcześniej niż 5.5) ma domyślnie włączoną wtyczkę InnoDB.
źródło
Zmiana pt-online-schematu przez Percona pokazuje szacowany pozostały czas. Domyślnie drukuje szacunkowy pozostały czas i procent postępu co 30 sekund.
Ma także dodatkowe funkcje w porównaniu do samego uruchomienia polecenia ALTER.
http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html
źródło