2011-12-12 9 views
9

Estoy trabajando en mi propio motor de almacenamiento para MySQL. Hasta ahora, este motor de almacenamiento funciona de manera confiable y correcta, pero solo para tablas pequeñas (~ 100 MB) ... Para tablas grandes, aparece un error de segmentación cuando intento ejecutar una consulta con un pedido por, algo así dará lugar a una violación de segmento:Mi propio motor de almacenamiento se cuelga debido a un pequeño sort_buffer

select * from item order by i_author; 

Así que he recopilado MySQL en modo de depuración, y vio, que el ahora hay un error de aserción en la función merge_buffers en filesort.cc:

/* The following will fire if there is not enough space in sort_buffer */ 
DBUG_ASSERT(maxcount!=0); 

Honestamente no tengo idea de qué puedo cambiar en mi motor de almacenamiento para que desaparezca este error. Al principio parecía que tenía que cambiar el parámetro de configuración sort_buffer_size - pero incluso establecer esto más alto que el tamaño de la tabla cambia algo con este error.

¿Alguien que sepa cómo escribir motores de almacenamiento MySQL tiene alguna idea de cómo resolver esto?

Respuesta

4

Se ha reportado un issue similar con el motor de almacenamiento Falcon. El comentario en el error era

Parece que el problema se produce en el archivo cuando tiene filas estimaciones que son muy incorrectas.

Lo más probable es que haya un error en su motor de almacenamiento en alguna parte, pero eso es algo difícil de depurar a través del desbordamiento de la pila.

+0

Ah muchas gracias, esta pista realmente resolvió el problema. De acuerdo con la documentación, no es obligatorio dar una estimación correcta del tamaño de la mesa, obviamente la documentación es incorrecta. Lo que hice ahora es registrar el alto de mi B + -Tree desde mi índice de clave binaria y calcular un límite superior para el tamaño de eso (ya que solo se necesita una estimación, dar el valor correcto sería demasiado caro). Ahora todas mis pruebas se ejecutan en grandes mesas. ¡Muchas gracias por ese consejo! –

Cuestiones relacionadas