2011-12-12 13 views
9

Sto lavorando al mio motore di archiviazione per MySQL. Finora questo motore di archiviazione funziona in modo affidabile e corretto, ma solo per le tabelle piccole (~ 100 MB) ... Per le tabelle di grandi dimensioni, ottengo un errore di segmentazione, quando provo a eseguire una query con un ordine, quindi qualcosa di simile porterà ad un segfault:Il mio motore di archiviazione si arresta in modo anomalo a causa di un buffer di ordinamento troppo piccolo

select * from item order by i_author; 

Così ho compilato MySQL in modalità debug, e vide che la ora c'è un errore di asserzione nella funzione merge_buffers in filesort.cc:

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

Onestamente non ho idea di cosa posso cambiare nel mio motore di archiviazione per far scomparire questo errore. Sembrava prima di dover cambiare il parametro di configurazione sort_buffer_size - ma anche impostando questa cosa più in alto della dimensione della tabella non cambia nulla con questo errore.

Qualcuno, che sa scrivere motori di memorizzazione MySQL, ha qualche idea su come risolvere questo?

risposta

4

C'è un analogo issue segnalato con il motore di archiviazione falcon. Il commento nel bug era,

Sembra che il problema si verifica in filesort quando si hanno le stime di riga che sono seriamente errate.

Molto probabilmente c'è un bug nel tuo motore di archiviazione da qualche parte, ma è una cosa difficile eseguire il debug attraverso l'overflow dello stack.

+0

Ah grazie mille, questo suggerimento ha davvero risolto il problema. Secondo la documentazione, dare una stima corretta per la dimensione della tabella non è obbligatoria, ovviamente la documentazione è sbagliata. Quello che ho fatto ora è di registrare il massimo del mio B + -Tree dal mio indice di chiave binaria e calcolare un limite superiore per la dimensione da quello (dal momento che solo una stima è necessaria, dare il valore corretto sarebbe troppo costoso). Ora tutti i miei test funzionano su grandi tavoli. Grazie mille per questo suggerimento! –

Problemi correlati