1. 程式人生 > >性能調優篇 - TPS低 - 優化SQL語句(一)

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

導致 http ont xxx pla 測試的 打印 接口 class

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

一.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語句優化,是開發的同事優化的,所以這裏我也只能講解我了解的知識,很多詳細的優化代碼我沒研究過)

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