性能調優篇 - TPS低 - 優化SQL語句(一)


在執行性能測試的時候,問題總千奇百怪的。我這里整理了一些常用的性能測試時查看問題的方法。

一.SQL語句沒有引用索引:

執行性能測試時,服務器的運行情況下:

  1. 數據庫、應用程序CPU不超過80%;
  2. 內存足夠(空余內存>20M);
  3. 網絡正常;
  4. 磁盤輸入/輸出正常;

日志沒有打印錯誤,但是TPS很低,如只有100-120(單個接口請求的性能測試,TPS一般會在550-60000這樣,除非程序很復雜,那么TPS會小一些)。這種情況下應該先查看SQL的語句是不是存在問題:

  如:

  查詢語句,是否有索引,索引有沒有起到作用;(是查詢語句還要看數據表中的總數據)

案例:我先前測試的時候,有個查詢接口就是存在這樣的問題,TPS很低,是因為沒有索引導致的,加入索引后,TPS從以前的110到6000這樣。

二.SQL語句索引沒有起到作用:

執行性能測試時,服務器的運行情況下:

  1. 數據庫的CPU高達90%-99.9%,應用程序的CPU比較低;
  2. 內存足夠(空余內存>20M);
  3. 網絡正常;
  4. 磁盤輸入/輸出正常;

                                                CPU 很高的監控圖

 

日志沒有打印錯誤,但是TPS很低,需要查看索引沒有起到作用,是否遍歷了很多無關的表格數據。

案例:我先前測試的時候,部分接口就是存在這樣的問題,TPS很低,CPU很高,有索引,但是SQL查詢的語句寫得有問題,遍歷很多數據,導致引用的索引失效了。

 

可以用EXPLAIN來統計一個查詢,SQL會遍歷多少次的問題,程序的語句導致大量的表掃描。使用的索引區分度低,表達式中是否帶非,導致索引失效,rows的值越大,說明遍歷次數越多:

 

EXPLAIN SELECT * FROM  tb_hlf_pos_cashier where account=’ XXXXX ’;

 

 

(以上都是在性能測試的時候,SQL語句優化后,性能提高的途徑。當然我只是找到問題,具體的SQL語句優化,是開發的同事優化的,所以這里我也只能講解我了解的知識,很多詳細的優化代碼我沒研究過)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM