一個查詢交易致使數據庫CPU使用率高的問題

        這一陣子在作一個查詢交易的壓力測試,使用的AIX+informix數據庫。應用和數據庫分別部署在兩臺機器上。使用loadrunner進行併發測試。相關錶的歷史數據是20W級別的。使用20個併發進行測試。數據庫

        測試過程當中,應用服務器負載正常,數據庫服務器磁盤、網絡使用率正常,可是CPU使用率倒是98%左右。以爲很奇怪,由於這臺機器是測試環境中性能最好的,表現不該該如此。因而先猜想會不會是informix的參數配置不對,因而搜了些informix參數中影響CPU使用率的參數調了一遍,可是現象依舊。對裏面查詢的三張主表的SQL語句使用執行計劃查看,查詢也沒有問題,都落在索引上了。直到前兩天看到一篇文章,裏面提到若是不肯定哪段代碼致使的性能問題,能夠使用分段註釋代碼的方法定位是哪全代碼的問題,因而也想能夠把這個查詢交易裏面查詢的全部表的SQL語句註釋掉查找是操做哪張表裏致使的。最後終於定位到是在查詢另一張數據量比較大的表時,在導數據的腳本中把一個索引給刪了,致使走了另外一個低效率的索引。如下是查詢計劃的部份內容:服務器

QUERY: (OPTIMIZATION TIMESTAMP: 02-12-2015 14:33:42)
------
SELECT  col1,col2 FROM  table1 where card_no='card0002456' and status='0'網絡

Estimated Cost: 12456
Estimated # of Rows Returned: 2併發

  1) table1: INDEX PATHide

        Filters: table1.status= '0'性能

    (1) Index Name: 413_1682
        Index Keys: cust_no card_no agent_no product   (Key-First)  (Serial, fragments: ALL)
        Index Key Filters:  (table1.card_no = 'fund_card0002456' )測試


Query statistics:
-----------------orm

  Table map :
  ----------------------------
  Internal name     Table name
  ----------------------------
  t1                table1索引

  type     table  rows_prod  est_rows  rows_scan  time       est_cost
  -------------------------------------------------------------------
  scan     t1     1          2         200000     00:00.58   12456資源

 

        能夠看到雖然使用的是「INDEX PATH」,可是下面rows_scan是200000,這張表的數據量就是200000,那也就是全表掃描了。後來在yw_zhzj這張表中加上缺失的fund_card字段上的索引,數據庫CPU使用率立馬降到5%如下了。

        猛然想起以前看到的一句話:數據庫CPU使用率異常高,頗有多是某個大表在做全表掃描。惋惜當時經驗尚淺,仍舊一頭扎到informix的參數調整裏去了。如今回頭看,總結兩點:

1,CPU使用率高,但其餘資源使用率正常,那絕對先考慮有數據量較大的表在做全表掃描。

2,方向很重要

3,註釋法是個定位問題的殺手鐗

相關文章
相關標籤/搜索