2011-12-12 38 views
9

我對MySQL的我自己的存儲引擎的工作。到目前爲止,這個存儲引擎的工作原理可靠和正確的 - 但僅限於小(約100 MB)表... 對於大表,我得到一個分段錯誤,當我嘗試通過命令來執行一個查詢,所以這樣的事情會導致段錯誤:我自己的存儲引擎崩潰,因爲太小sort_buffer

select * from item order by i_author; 

所以我編譯MySQL,在調試模式下,只見,那現在在merge_buffers功能的斷言失敗filesort.cc有:

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

老實說不知道我在存儲引擎中可以更改哪些內容以使此錯誤消失。它首先看起來像我不得不改變配置paramater sort_buffer_size的值 - 但即使設置這個東西比表的大小也較高任何改變,此錯誤。

有誰,誰知道怎麼寫MySQL存儲引擎有任何想法如何解決這個問題?

回答

4

沒有與獵鷹存儲引擎報道了類似的issue。在錯誤的註釋是,

看來,當你有行 估計是嚴重的錯誤發生在文件排序問題。

很可能是在某處你的存儲引擎中的錯誤,但這是通過堆棧溢出來調試一個很難的事情。

+0

啊非常感謝,這個提示真的解決了這個問題。根據文檔,對錶格大小進行正確估算並不是強制性的 - 顯然文檔是錯誤的。 我現在所做的就是從我的二進制鍵索引記錄高我的B + - 樹和計算的上限從大小(因爲只需要估計,給予正確的值過於昂貴)。現在我所有的測試都在大桌面上運行。 非常感謝那個提示! –