2011-11-23 13 views
6

Mam dość powolne zapytanie (w rzeczywistości jest to ładowanie danych z mysql.dump). Teraz chcę sprawdzić, ile wierszy jest już załadowanych.Zatrzymaj i wznów uruchomione zapytanie mysql

select count(*) from my_table; 

O ile dane są ładowane, my_table jest zablokowany, więc nie mogę wykonać to SQL przed wysypisko jest załadowany.

Cmd  ID State    User Host   DB  Time Query       
Query  191 update    root localhost  rehub 00:09 INSERT INTO `my_table` VALUES ... 
Query  189 Waiting for table root localhost  rehub 06:25 select count(*) from my_table 

Czy istnieje sposób wstrzymania zapytania 191, wykonania zapytania 189, a następnie wznowienia zapytania 191?

+0

Zgaduję, że możesz spróbować szczęścia na stronie information_schame.tables? – ajreal

+0

Użyj Oracle, gdzie "pisarze nigdy nie blokują czytelników";) –

+1

Czy jest możliwe, że zmienisz opcje zrzutu? Jeśli tak, czy użyłeś '-extended-insert'? Następnie '-extended-insert = FALSE' może pomóc, ale spowolni import. –

Odpowiedz

4

Nie ma sposobu na zawieszenie zapytania.

Jeśli wykonujesz masowe ładowanie, możesz użyć programu ładującego, który wykonuje co kilka tysięcy wierszy.

Ponadto użycie MyISAM zamiast InnoDB złagodzi ten problem. MyISAM to dobry wybór do masowego przetwarzania, w którym nie chodzi przede wszystkim o uczciwość transakcyjną.

0

Nadal można uzyskać liczbę wstawionych rekordów przy użyciu show innodb status

2

Cytując z manual:

Wszystkie opcje, które --opt podpórek również są domyślnie włączone ponieważ --opt jest domyślnie włączone.

Więc jeśli dodać –-extended-insert=FALSE i --add-locks=FALSE z opcjami mysqldump Twój select count (*) powinno działać. W zależności od sytuacji należy uważać na problemy z integralności referencyjnej bazy danych. I spowolni import!