2011-02-02 12 views
5

Ho un database MySQL con i record 21M e sto cercando di fare un aggiornamento su circa 1M record, ma la domanda non riesce con ERROR 1206 (HY000): The total number of locks exceeds the lock table size.query di aggiornamento in MySQL sul grande tavolo

E 'possibile aggiornare la tabella senza acquisire serrature?

Non ho accesso per modificare i parametri di configurazione MySQL come innodb_buffer_pool_size. C'è un modo diverso per ottenere lo stesso?

Grazie

EDIT:

  1. ho provato in lotti di 5000, funziona un paio di volte, ma ottengo lo stesso errore
  2. ho provato LOCK TABLES per bloccare l'intero tavolo e ancora non funziona.
+0

http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exains-the-lock-table-size-2/ –

+0

farlo solo in blocchi come faisal detto –

+0

Che stupida limitazione. Qualcuno sa di un lavoro in giro? Immagino che usi MyISAM? – chmullig

risposta

3

Penso che sia possibile utilizzare la clausola limite per eseguire gli aggiornamenti in batch.

+0

L'ho provato in lotti di 5000, funziona alcune volte, ma ottengo lo stesso errore – rampr

+0

Allora forse provi i pezzi più piccoli? :) – gnur

1

Provare a bloccare a livello di tabella anziché a livello di riga. Utilizzare LOCK TABLES MyTable WRITE. Questo potrebbe risolvere il problema. Nessuna garanzia però! Non dimenticare di sbloccare i tavoli!

Problemi correlati