- 調整SQL命令,排除cartesian product
- 將text欄位改成varchar格式,因為NDB會為有text欄位的table開一個隱藏的table放text欄位的資料,而使table的DML産生更多的鎖
- 使用多個SQL節點,同時每個SQL節點開多個到data node的連線(在my.cnf設ndb-cluster-connection-pool=6,在config.ini開多個[mysqld] slot)
- 在SQL node使用thread pool plugin (在my.cnf設plugin-load=thread_pool.so)
- 在config.ini以ThreadConfig參數指定各種NDB thread所使用的CPU therad,以減少CPU的content switch
- 將一些不會online更改,較小的table由NDB改為InnoDB以解決太多NDB表的Join所造成的問題(最複雜的SQL由約30個NDB的table改為15個NDB table和十多個InnoDB table)
2015年2月25日 星期三
決定MySQL Cluster 的效能的因素 - 在韓國的PoC的經驗談
過年前一星期去了趟韓國協助那裡的同事為當地的大客戶做MySQL Cluster PoC,它的情境是一自個現有跑在另一個資料庫的應用系統移植過來,測試的環境架了一個有4個data node, 3個SQL node的MySQL Cluster。原有的應用系統有許多複雜的SQL命令(有derive table,join的base table和derrived 達62個),也有的table有text格式的欄位,這兩點是我比較擔心的。果然執行這些SQL命令所需要的時間由0.x秒增加到5~6秒,而導入3萬多行到一個有text欄位的table需要2~3個小時。為此檢查這些SQL命令,發現其中有些重複的join,甚至還有些會産生cartesian product。經過以下的調優使PoC獲得還不錯的結果:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言