其中QPS和TPS自然是重點考察的性能指標。其他指標可以作為每次測試數據的參考數據列出。如果遇到瓶頸,可能還需要考量當時系統的cpu,網絡,磁盤的利用率情況。這個遇到具體問題再具體分析。
工具方面,首選考察的自然是MySQL自帶的測試工具mysqlslap。
./mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info -uroot -proot
一個簡單的示例即可說明工具的使用情況,
-a 自動生成sql
--concurrency=50,100分別執行50,100并發,
--iterations=5 執行5次,引擎分別選用myisam和innodb引擎測試。
--number-of-queries Limit each client to this number of queries (this is not
exact).(一個客戶端執行的測試SQL數量上限,通過--only-print觀察自動生成的sql的執行情況來看,該條數限制的是準備數據以外的SQL語句的條數)
--engine=myisam,innodb 分別用myisam和innodb引擎進行測試。
當然你也可以通過-q指定你想要測試的sql腳本,測試結束后,mysqlslap會給出你測試的相關數據。
關于mysqlslap的更多參數可參考:http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html
從目前來看上手還是比較容易的。通過執行的query數量和時間,很容易計算出tps和qps等指標。
SysBench
也是MySQL官網提到的一個benchmark工具。只是在64位系統下安裝困難,限于網絡環境和考慮到其功能和我們即將進行的測試場景,暫時放棄。
性能測試基礎準備其他話題
在思考和驗證怎樣使用mysqlslap規劃測試場景的過程中,收獲到一些離散的細節問題,也在此一并記錄一下。也許哪天,哪一條就會有所幫助。
打開MySQL general_log 記錄執行的sql情況
默認情況下該屬性是關閉的,通過set global general_log=ON 打開后,可在log文件中查看數據庫執行的sql記錄。該需求是OneCoder想要考察JDBC的batch insert的提交方式,究竟是數據庫中是執行的多條insert然后commit還是一個insert values大列表的時候產生的。
對比批量插入數據 多條insert和一條insert 大values列表(values(),(),())方式,性能差別
從目前通過mysqlslap執行測試的效果來看,后者明顯優于前者。前者1000條平均時間大約是0.2ms,而后者在0.1ms左右。該測試想法是在通過mysqldump到處已有數據的時候發現其sql文件的生成方式的時候以及聯想到oracle到mysql的數據遷移工具的處理方式的時候想到的。
寫入性能瓶頸的一個大誤解
曾經極大的錯誤的認為單線程下mysql可處理的批量插入數據量就是該節點的瓶頸,所以只認為多線程并發寫入優化只在NDB的環境下才有效。今天在看MySQL的一些benchmark圖表曲線的時候,猛然驚醒,并發數和tps的曲線是類拋物線的就說明在一定并發數的范圍內,TPS是有明顯提高的。于是用以前的JDBC的代碼,增加了幾個線程,對同一個mysql并發寫入,果然TPS成倍提升。
今天總結的大概就這么多,由于是事后回憶總結,不免有所遺漏,想起來再補充把。熱烈歡迎指導。
原文地址:MySQL性能測試—前期知識儲備, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com