性能調優篇 - TPS低 - 優化SQL語句(一)
阿新 • • 發佈:2017-07-11
導致 http ont xxx pla 測試的 打印 接口 class
在執行性能測試的時候,問題總千奇百怪的。我這裏整理了一些常用的性能測試時查看問題的方法。
一.SQL語句沒有引用索引:
執行性能測試時,服務器的運行情況下:
- 數據庫、應用程序CPU不超過80%;
- 內存足夠(空余內存>20M);
- 網絡正常;
- 磁盤輸入/輸出正常;
日誌沒有打印錯誤,但是TPS很低,如只有100-120(單個接口請求的性能測試,TPS一般會在550-60000這樣,除非程序很復雜,那麽TPS會小一些)。這種情況下應該先查看SQL的語句是不是存在問題:
如:
查詢語句,是否有索引,索引有沒有起到作用;(是查詢語句還要看數據表中的總數據)
案例:我先前測試的時候,有個查詢接口就是存在這樣的問題,TPS很低,是因為沒有索引導致的,加入索引後,TPS從以前的110到6000這樣。
二.SQL語句索引沒有起到作用:
執行性能測試時,服務器的運行情況下:
- 數據庫的CPU高達90%-99.9%,應用程序的CPU比較低;
- 內存足夠(空余內存>20M);
- 網絡正常;
- 磁盤輸入/輸出正常;
CPU 很高的監控圖
日誌沒有打印錯誤,但是TPS很低,需要查看索引沒有起到作用,是否遍歷了很多無關的表格數據。
案例:我先前測試的時候,部分接口就是存在這樣的問題,TPS很低,CPU很高,有索引,但是SQL查詢的語句寫得有問題,遍歷很多數據,導致引用的索引失效了。
可以用EXPLAIN來統計一個查詢,SQL會遍歷多少次的問題,程序的語句導致大量的表掃描。使用的索引區分度低,表達式中是否帶非,導致索引失效,rows的值越大,說明遍歷次數越多:
EXPLAIN SELECT * FROM tb_hlf_pos_cashier where account=’ XXXXX ’;
(以上都是在性能測試的時候,SQL語句優化後,性能提高的途徑。當然我只是找到問題,具體的SQL語句優化,是開發的同事優化的,所以這裏我也只能講解我了解的知識,很多詳細的優化代碼我沒研究過)
性能調優篇 - TPS低 - 優化SQL語句(一)