Jestem programistą PHP, więc nie bądź surowy. Mam zrzut dużego stołu ~ 5,5 GB. Nasz premier postanowił utworzyć w nim nową kolumnę, aby wykonać nową funkcję. Tabela to InnoDB, więc co próbowałem:
Zmień stół na ekranie z blokadą stołu. Zajęło ~ 30 godzin i nic. Więc po prostu to powstrzymałem. Najpierw popełniłem błąd, ponieważ nie zakończyłem wszystkich transakcji, ale po raz drugi nie było multilocka. Status był
copy to tmp table
.Ponieważ muszę także zastosować partycjonowanie dla tej tabeli, postanowiliśmy zrobić zrzut, zmienić nazwę i utworzyć tabelę o tej samej nazwie i nowej strukturze. Ale zrzut robi ścisłą kopię (przynajmniej nie znalazłem czegoś innego). Dodałem więc, aby zrzucić nową kolumnę
sed
i wysłać zapytanie. Ale zaczęły się dziwne błędy. Uważam, że było to spowodowane charsetem. Tabela w utf-8 i plik stał się potem us-asciised
. Mam więc błędy (nieznane polecenie „\”) na 30% danych. To także zły sposób.
Jakie są inne opcje, aby to osiągnąć i zwiększyć wydajność (mogę to zrobić za pomocą skryptu php, ale zajmie to wieki). Jaka będzie wydajność INSERT SELECT
w tym przypadku.
Dzięki za wszelkie zaliczki.
SET NAMES utf8
i.COLLATION
Ale me idk, dlaczego 30% danych uległo później uszkodzeniused
. Myślę, że ładowanie zbiorcze będzie najszybsze, ale może istnieje coś więcej, czego mi brakuje. Dziękuję Mark