資料庫負載急劇提高的應急處理(二)
首先第一個問題就是為什麼會突然負載提高,如果感覺,應該是業務層面出現了一些變化吧。當然沒有資料,日誌都是猜測。
我從監控中拿到了Zabbix監控的部分資料,發現在指定的時間點突然多了300多個程式。
而在資料庫的會話層面沒有發現任何的抖動,這一點就很難解釋的通了。
系統級不會平白無故出現300多個程式,這些程式主要是在忙些什麼,這些肯定說不通,我檢視了問題時間段的報警。發現了這麼一封報警資訊。
ZABBIX-監控系統:
SQL執行的大體情況如下。
SQL ID
PlanHash
Sampled # of Executions
% Activity
Row Source
% RwSrc
Top Event
% Event
SQL Text
2802892098
219
31.29
MERGE
28.83
log file switch completion
24.86
MERGE INTO TEST_OPENPLATFORM_U...
ag4b2tb6yxscc
2802892098
219
31.29
TABLE ACCESS - BY INDEX ROWID
1.04
log file switch completion
1.04
79
10.68
** Row Source Not Available **
10.68
log file switch completion
8.88
insert into TEST_USER_INFO (CI...
2398546977
48
6.14
MERGE
5.01
log file switch completion
3.88
MERGE INTO CYUC_USER_LOGIN_TOK...
167343150
10
3.97
TABLE ACCESS - FULL
3.12
CPU + Wait for CPU
3.12
MERGE INTO TEST_OPENPLATFORM_B...
4261754961
16
3.50
TABLE ACCESS - FULL
3.31
CPU + Wait for CPU
3.31
MERGE INTO TEST_GUEST_USER_INF...
8點
9點 10點 11點
12點
Elapsed Time (s)
Executions
Elapsed Time per Exec (s)
%Total
%CPU
%IO
SQL Id
SQL Module
SQL Text
1,521.05
6,464
0.24
22.07
0.72
1.94
JDBC Thin Client
MERGE INTO TEST_OPENPLATFORM_U...
69.84
1,980
0.04
1.01
6.77
8.20
JDBC Thin Client
MERGE INTO TEST_OPENPLATFORM_B...
507.27
1,304
0.39
7.36
3.32
0.00
351tx6bsgk1un
JDBC Thin Client
MERGE INTO TEST_GUEST_USER_INFO...
------------------------------------
報警內容: Alive xxxx_p
------------------------------------
報警級別: PROBLEM
------------------------------------
監控專案: Alive:0
------------------------------------
報警時間:2016.07.08-11:16:03
如果是這樣的情況就能說清楚了,在問題發生的時間段裡,因為系統延遲,orabbix無法從服務端抓取到資料,所以出現了Alive的報警,而那個時間段的資料還是會參考之前的資料,而Zabbix是客戶端的形式,在每臺伺服器上都有一個Agent,這些資料採集還是可以的,儘管延遲,但是還是會同步到服務端。因為我們是後續檢視的歷史資訊。所以這樣一來我們可以推理出來是在資料庫層面多了300個多會話。
而在業務層面去解釋這個就比較困難了。首先業務層面的反饋是沒有異常的呼叫情況。而系統層面反饋也沒有發現特別的日誌。這個工作就無形中落到了資料庫層面。大家都希望我能夠給出一些解釋,能夠從資料庫層面得到一些分析的結果,畢竟這個問題是出現在資料庫端。這讓我聯想起之前工作中的一個有意思的故事,有兩個系統需要互動,系統會發資料到模組A,然後模組A會同步資料處理到模組B,以此類推,結果模組A的問題,模組A沒有錯誤日誌,模組B有錯誤日誌,這下大家都集中在模組B,然後讓他們提供更多的分析和解釋,最後發現問題是模組A那邊過來的,沒有錯誤日誌不證明沒錯誤,在這種多系統互動中就會有很多額外的溝通成本。
當然這個問題也不是猜測出來的,我來看看資料庫端的情況。
首先是SWAP的爭用,為什麼在問題時間段會突然出現爭用很高的情況,之前沒有嗎,實際情況是之前也有的,但是不夠明顯,那問題出現之前SWAP情況怎麼樣呢。檢視資料庫日誌發現了下面的一段。這麼一段日誌還是很有說服力的。
Archived Log entry 11780 added for thread 1 sequence 2581 ID 0xc5819545 dest 1:
Fri Jul 08 10:27:49 2016
WARNING: Heavy swapping observed on system in last 5 mins.
pct of memory swapped in [3.10%] pct of memory swapped out [0.54%].
Please make sure there is no memory pressure and the SGA and PGA
are configured correctly. Look at DBRM trace file for more details.
Fri Jul 08 10:28:13 2016
Thread 1 advanced to log sequence 2583 (LGWR switch)
Current log# 7 seq# 2583 mem# 0: /U01/app/oracle/fast_recovery_area/STEST032/onlinelog/o1_mf_7_blsdlk1p_.log
Fri Jul 08 10:28:13 2016
所以可以充分說明問題集中爆發之前已經有了SWAP的爭用情況。而後面的是一個集中的觸發點,導致了SWAP的爭用更加嚴重。
那麼問題發生時到底是哪些SQL或者資料庫層面的操作導致的問題呢,我一看快照,因為是殺掉程式重啟,那個時間段剛好沒有生成快照,導致了在問題發生時間段的ASH,AWR資料生成,所以只能看到之前一個小時的資料,我們可以作為一個參考。
看到這個這個報告,我有些迷惑了,不知道問題的瓶頸在哪裡了,因為top 1的SQL本身已經最佳化過,已經是最優的方式了,執行頻率要高一些,而下面的兩個標黃的語句仔細檢視,是存在效能隱患的語句,但是執行頻率相對來說不高,佔用的比例也不高。
這樣一來問題的分析就有些茫然了。不過這邊也在和應用同學做一些確認。讓他們幫忙提供一些資料資訊。其中部分的資訊如下
/test/master 46279 43135 51140
42276 38712
/test/guest 1069 1313
1533 6148 1794
看到這些資料,在問題發生時間點,主要的執行頻率還下降了,看起來說明不了問題,不過有一點比較特別的就是/test/guest這個地方,平時的執行頻率是1000,而在問題發生時間點是6000多,這個確實是有些特別。
而從之前時間段的AWR可以看出,執行頻率還是1000多一些。
有了這些資料支撐,就可以明白問題的大體情況,原本系統的SWAP爭用已有,但是最近比較嚴重,而在問題發生時間段裡,問題更加嚴重,主要就是因為一個本來負載不是很高的SQL執行頻率從1000多提升到了6000多,執行計劃中顯示是全表掃描,好幾百萬資料的大表來說還是很明顯的問題。而對於這個語句的最佳化其實倒不是很難,關鍵有針對性的分析就尤為重要了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2121770/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫負載急劇提高的應急處理資料庫負載
- 資料庫無響應問題的緊急處理和分析資料庫
- Oracle資料庫系統緊急故障處理方法(轉)Oracle資料庫
- 電腦出故障你別急 應急寶典來處理(轉)
- 7 關於資料倉儲維度資料處理的方法探究系列——急劇變化維概述
- Oracle 資料庫應急寶典(二)_引數檔案篇Oracle資料庫
- windows應急響應(二)Windows
- 資料庫中文問題,急資料庫
- 【Mysql】連線數過多,應急處理方法MySql
- 記一次資料庫重啟後歸檔急劇增加的問題資料庫
- 急(啟動資料庫),謝謝資料庫
- 關於sequence問題的緊急處理
- 網路安全應急預案 資訊保安應急預案 應急演練
- 彭老師:關於SimpleJdonFrameworkTest的執行問題,急!急!急!急!急!急!Framework
- 玄機應急響應-第二章
- raid磁碟陣列OFFLINE後的應急處理方案AI陣列
- 急!急!急!急招軟體工程師軟體工程工程師
- 【應急響應】Windows應急響應入門手冊Windows
- 請教資料庫連線問題??急!資料庫
- 應急加固1
- 請教分散式事務的具體處理:急!!!!分散式
- 什麼是應急響應?網路安全應急響應體系的要素!
- Git 分支管理:最佳化版本控制與應急處理的關鍵策略Git
- 關於hibernate+informix資料庫的問題,急ORM資料庫
- jsp呼叫javabean封裝資料庫的問題,急!JSJavaBean封裝資料庫
- 急,急,急,請教高手struts驗證的問題!
- oracle資料庫災難挽救應急方案之DML誤操作恢復Oracle資料庫
- 急:webshere配置資料庫sybase的連線池的問題Web資料庫
- 什麼是應急響應?網路安全應急響應的物件是什麼?物件
- 我的JVM為什麼會報如下錯誤呢?急!急!急!急!十萬火急!JVM
- webshell應急排查方案Webshell
- 故障應急白皮書
- 應急加固【簡單】
- oracle資料型別隱式轉換----- 應急方案Oracle資料型別
- oracle資料庫災難挽救應急方案之DDL誤操作恢復(drop)Oracle資料庫
- oracle資料庫災難挽救應急方案之DDL誤操作恢復(truncate)Oracle資料庫
- 玄機-第二章日誌分析-mysql應急響應MySql
- Linux應急響應排查Linux