2011-02-02 9 views
5

Tengo una base de datos MySQL con los registros 21M y yo estoy tratando de hacer una actualización de aproximadamente 1 M registros, pero la consulta falla con ERROR 1206 (HY000): The total number of locks exceeds the lock table size.consulta UPDATE en MySQL en una mesa grande

¿Es posible actualizar la tabla sin necesidad de adquirir ¿cabellos?

No tengo acceso para cambiar los parámetros de configuración de MySQL como innodb_buffer_pool_size. ¿Hay alguna forma diferente de lograr lo mismo?

Gracias

EDIT:

  1. Lo he intentado en lotes de 5000, funciona un par de veces, pero me da el mismo error
  2. He intentado LOCK TABLES para bloquear toda la mesa y todavía no funciona.
+0

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

+0

solo hágalo en trozos como faisal dijo –

+0

¡Qué limitación tan estúpida! ¿Alguien sabe de alguna solución? Supongo que usar MyISAM? – chmullig

Respuesta

3

Creo que puede usar la cláusula de límite para hacer las actualizaciones en lotes.

+0

Lo he intentado en lotes de 5000, funciona un par de veces, pero obtengo el mismo error – rampr

+0

¿Entonces quizás intente trozos más pequeños? :) – gnur

1

Intente bloquear a nivel de tabla en lugar de a nivel de fila. Use LOCK TABLES MyTable WRITE. Esto podría resolver el problema. ¡Sin garantías! ¡No olvides desbloquear las mesas tampoco!

Cuestiones relacionadas