記壓力測試中一次效能除錯

darren__chan發表於2014-12-15
最近系統做壓力測試,我負責資料庫監控。壓力測試期間發起某一場景時發現了剛開始響應時間較為平穩,但中間出現停頓甚至超時,公司的大神剛好在現場,我有幸觀摩了一把。

大神一上來,便拼出了一條SQL,主要查詢統計發生的事件!以下貼上sql:

SELECT EVENT, count(*), sql_text, to_char(sample_time, 'yyyymmdd hh24')
  from dba_hist_active_sess_history a,
  gv$sqlarea b
 where a.sql_id = b.sql_id
   and sample_time >= sysdate - 180 / 1440
   and program like '%JDBC%'   
 group by event, to_char(sample_time, 'yyyymmdd hh24'),sql_text
 order by 4,2
 
通過統計 發現 排名考前的是HW enqueue ,大師解釋是由於有限時間段內寫入大量資料,並且該表含有clob欄位,表空間擴充套件分配不及造成爭用,所以解決方法是提前分配表空間。大師使用先往表空間建表插入資料再刪除方式。
網上使用的方法是這樣:alter table allocate extent;

以下語句查詢表空間剩餘:
SELECT A.BYTES/1024/1024/1024, (A.BYTES-B.BYTES)/1024/1024/1024,A.FILE_NAME FROM DBA_DATA_FILES A,DBA_FREE_SPACE B WHERE A.TABLESPACE_NAME = 'TS_HX_YSPZ_DATA' AND A.TABLESPACE_NAME = B.TABLESPACE_NAME AND A.FILE_ID = B.FILE_ID


 HW enqueue 的問題解決後,接下來 發現排名第二的是索引爭用 enq: TX - index contention 時間,直接調整索引即可!


後來大師敲出實時監控三sql,以下獻出:

select event,count(*),sql_text from gv$session a,gv$sqlarea b where a.sql_id = b.sql_id group by event,sql_text order by 2 desc;


select status,count(*),INST_ID from gv$session where type = 'USER' group by status,INST_ID;


select * from v$log ORDER BY 2,4;


第一條是統計當前使用等待事件及sql;
第二條統計當連線數情況;
第三條查詢聯機日誌情況,監控是否有寫不平情況;


最後發現有聯機日誌寫不平現象,就直接新增幾組聯機日誌!

alter database add logfile thread 2 group 30 ('+FRA/gdsthxzg/onlinelog/group_t2g30a','+DATA/gdsthxzg/onlinelog/group_t2g30b') size 1G;








來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-1368814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章