2010-10-02 69 views
1

慢得多我有一個非規範化表product有大約6萬行(〜2GB)主要用於查找。字段包括price, color, unitprice, weight, ...MySQL集羣比InnoDB的

我有color等查詢條件被從Web動態生成BTREE索引,如

select count(*) 
from product 
where color = 1 and price > 5 and price < 100 and weight > 30 ... etc 

select * 
from product 
where color = 2 and price > 35 and unitprice < 110 
order by weight 
limit 25; 

我曾經使用InnoDB和試圖MEMORY表,並切換到NDB希望更多的併發查詢可以更快地完成。我有兩個具有相同架構,索引和數據的表。一個是InnoDB,另一個是NDB。但結果非常令人失望:對於上面提到的查詢,InnoDB比NDB快50倍。這就像0.8 seocond vs 40秒。對於這個測試,我反覆運行一個選擇查詢。 InnoDB和NDB查詢都使用color上的相同索引。

我在雙Xeon 5506(總共8個內核),運行CentOS 5的32GB內存上使用了mysql-5.1.47 ndb-7.1.5。我設置了2個NDB數據節點,一個MGM節點和一個MYSQL節點同一個盒子。對於我分配的每個節點,如9GB內存,也嘗試MaxNoOfExecutionThreads=8, LockPagesInMainMemory, LockExecuteThreadToCPU和許多其他配置參數,但沒有運氣。當NDB運行查詢時,我的峯值CPU負載僅爲200%,即8個內核中只有2個處於忙碌狀態。大部分時間它都是100%。我正在使用ndbmtd,並在數據節點日誌中進行了驗證,並且確實生成了LQH線程。 我也試過解釋,分析 - 它只是顯示Sending data大部分時間都在消耗。我也通過網上提供的一些Mysql Cluster調優文檔,在我的情況下不是很有幫助。

任何人都可以在此提供一些線索?有沒有更好的方法來調整NDB數據庫?欣賞它!

+0

問題應該是「MySQL Cluster比Innodb慢得多」? – Martin 2010-10-02 19:58:12

+0

你的表上定義了哪些索引? – Martin 2010-10-02 20:00:28

+0

innodb和ndb中使用的索引是相同的,'color'是int(11)類型。 – 2010-10-03 01:42:21

回答

3

您需要爲您的應用程序選擇正確的存儲引擎。

的MyISAM - 頻繁的讀/寫很少。適用於大型表格中的數據查詢。對於複雜的索引是否合理,對於批量重新加載非常有用。

記憶 - 有利於快速訪問相對小而簡單的表。

InnoDB - 適用於事務處理。也適用於混合讀/寫工作負載。

NDB - 相對不太成熟。有利於容錯。

MySQL服務器是不是天生的多處理器的軟件。因此添加內核並不一定會提升性能。一個好的mySQL主機是一個體面的雙核系統,具有大量的RAM和最快的磁盤IO通道和磁盤,你可以負擔得起。除非您不關心查詢性能,否則不要將您的mySQL數據文件放在聯網或共享文件系統上。

如果你在Linux上運行的問題,這兩個命令(運行MySQL服務器的計算機上),看看是否你燃燒你所有的CPU,或燃燒所有的磁盤IO:

sar -u 1 10 
sar -d 1 10 

你應用程序聽起來像是myISAM的候選人。這聽起來像你有很多硬件。在這種情況下,您可以構建一個主服務器和一個自動複製的從服務器。但是,只需一臺服務器即可。這將更容易維護。

+0

感謝您的信息。我使用sar以及vmstat,top,iostat等來監控負載。大多數情況下,CPU使用率低於20%,而40秒單一選擇的iowait並不多。而對於innodb,我能夠發送大量請求,以在一段較長的時間內獲得持續90%至95%的CPU負載。也許我現在應該回滾到InnoDB ... – 2010-10-03 02:45:47

+0

嗯。也許你的集羣網絡飽和。 – 2010-10-03 11:32:33

+0

所有數據節點,MGM節點,SQL節點都在同一個框中。如何驗證網絡負載?謝謝! – 2010-10-04 02:40:00