Tokyo Tyrant性能優化--針對磁盤IO佔用高

Tokyo Tyrant性能優化--針對磁盤IO佔用高


轉載自:http://yfyfj.blog.163.com/blog/static/154247842013264398931/?suggestedreading

 

簡介

 

ttserver有兩個參數#bnum和#xmsiz,其中,bnum設置桶數量,標明有多少桶ttserver中的“熱數據”會交換到內存;xmsiz是使用內存的大小限制,如果不設置默認爲64M。

我們在線上的部分ttserver經檢查都沒有設置xmsiz參數,並且bnum參數設置的值也不是很合理,所以在這裏提供一個優化這兩個參數的策略。

 

案例1:

用“羣組”功能舉例:羣組功能在ttserver中存儲每個用戶的羣組數量信息,每個用戶要讀取三種key(總數、今日數量、昨日數量),每個value約200字節,按熱用戶3000人計算,理論熱數據應該只有2M,正常情況下即使不設置xmsiz參數應該也可以把所有熱數據交換到內存,從而降低磁盤io開銷。。。但事實並非如此!杯具了!


查看ttserver中stats發現數據量已達500萬,容量11G,此進程IO較高,這是爲啥囁?原來程序結構中“今日數量”“昨日數量”兩個數據的key中拼有日期,也就是說,每個用戶除了“總數”這個數據的key是固定之外,每天都會有2條新數據產生。而當用戶讀取的時候在ttserver裏就出現了數據冷熱不均的情況,“總數”這個一直是熱數據,其他兩個數量一直是冷數據,所以所有用戶的“總數”熱數據越來越大,佔據了64M內存,之後的所有讀取操作都走了磁盤IO。

 

解決方案:

這種情況調整熱數據區的方法就木有作用了,只能從程序結構中進行調整,把“今日數據”“昨日數據”兩個key固定,把日期放到value裏即可。這樣就不會出現一個用戶的三份數據冷熱不均的情況了。預計調整程序後熱數據區應只有2M左右即可滿足需要。

 

案例2:

BBS,bbs使用主貼(2個)、回帖(2個)總共4個ttserver,均表示讀取IO較高,帶動服務器整體load衝上5。


查看ttserver中stats發現數據量已達千萬,容量20G,bnum=1000,xmsiz未設置。這個問題應該就在熱數據區未設置使用內存大小,所以ttserver使用的是默認的64M內存,顯然這點內存是無法滿足bbs熱數據需要的。

 

解決方案:

BBS中的熱數據分佈較合理,一般新數據較熱,舊數據較冷,預計調整ttserver熱區內存可降低磁盤IO消耗。但由於bbs在tt中存儲的數據(帖子內容)長度不固定,無法推算熱區大小,所以只能通過逐漸加大緩存區並監控磁盤io降低情況來進行調整,預計第一次調整爲500M。

 

Tokyo Cabinet 單個數據庫文件記錄數超過1億,性能會急劇下降。Tokyo Tyrant 的新版本支持了數據庫文件拆分,例如 ttserver -mul 256 database.tcb 啓動TT時,將會自動拆分成256個文件,存取時,根據key哈希到不同的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章