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哈希到不同的文件。