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

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

一.SQL語句沒有引用索引:服務器

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

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

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

  如:測試

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

案例:我先前測試的時候,有個查詢接口就是存在這樣的問題,TPS很低,是由於沒有索引致使的,加入索引後,TPS從之前的110到6000這樣。spa

二.SQL語句索引沒有起到做用:日誌

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

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

                                                CPU 很高的監控圖blog

 

日誌沒有打印錯誤,可是TPS很低,須要查看索引沒有起到做用,是否遍歷了不少無關的表格數據。

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

 

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

 

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

 

 

(以上都是在性能測試的時候,SQL語句優化後,性能提升的途徑。固然我只是找到問題,具體的SQL語句優化,是開發的同事優化的,因此這裏我也只能講解我瞭解的知識,不少詳細的優化代碼我沒研究過)

相關文章
相關標籤/搜索