2011-11-23 7 views
6

Ho una query abbastanza lenta (in realtà si tratta di caricamento di dati da mysql.dump). Ora voglio verificare quante righe sono già state caricate.Sospendi e riprendi la query mysql in esecuzione

select count(*) from my_table; 

Per quanto riguarda i dati si sta caricando, my_table è bloccato, quindi non posso eseguire questo sql prima discarica viene caricato.

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 

Quindi non v'è un modo per mettere in pausa interrogazione 191, eseguire la query 189 e poi riprendere interrogazione 191?

+0

la mia ipotesi si può tentare la fortuna su information_schame.tables? – ajreal

+0

Utilizzare Oracle, dove "i writer non bloccano mai i lettori";) –

+1

È possibile modificare le opzioni di dump? Se sì, hai usato '-extended-insert'? Quindi un '-extended-insert = FALSE' potrebbe aiutare, ma rallenterà l'importazione. –

risposta

4

No, non esiste un modo per sospendere una query.

Se si sta eseguendo lavori di caricamento di carichi voluminosi, è possibile che si desideri utilizzare un caricatore di massa che esegue il commit di alcune migliaia di righe.

Inoltre, l'utilizzo di MyISAM anziché di InnoDB allevierà questo problema. MyISAM è una buona scelta per l'elaborazione di massa in cui non sei principalmente interessato all'integrità transazionale.

0

è ancora possibile ottenere il numero di record inseriti utilizzando show innodb status

2

Per citare dal manual:

Tutte le opzioni che --opt troneggia per anche sono per default perché --opt è attivo per impostazione predefinita.

Quindi, quando si aggiungono –-extended-insert=FALSE e --add-locks=FALSE alle opzioni mysqldump il valore del select (*) dovrebbe funzionare. A seconda della situazione, fai attenzione ai problemi con l'integrità referenziale del tuo db. E rallenterà l'importazione!

Problemi correlati