一則備庫CPU報警的思考
報警郵件內容如下:
ZABBIX-監控系統:
------------------------------------
報警內容: Disk I/O is overloaded on ora_statdb2_s_xxx@xxxxx
------------------------------------
報警級別: PROBLEM
------------------------------------
監控專案: CPU iowait time:14.1 %
------------------------------------
報警時間:2016.01.05-03:31:26
看到這封報警郵件,不知道大家作何感想,有什麼疑問嗎?
首先第一個疑問,為什麼備庫會報出CPU異常的郵件,到底是什麼操作導致。
第二,為什麼是備庫報警,主庫為什麼沒有報警。
第三,怎麼去杜絕或者減少這類報警。
其實對這個問題做了分析,就會發現裡面還是有一些治標治本的含義。
首先來逐步分析這個問題,為什麼備庫會報出CPU異常,這是一個OLAP的資料庫,11gR@,CPU使用異常,是否是因為備庫在做大量的報表查詢?
要想驗證這個問題,可以用一個直接了當的sql來說明。
SQL> select username,count(*)from v$session group by username;
USERNAME COUNT(*)
------------------------------ ----------
32
PUBLIC 3
SYS 1
所以其他的設想都不存在,這個庫沒有其它的應用程式連線,可以簡單來說就是在默默接收歸檔。
那麼備庫的CPU使用率為什麼這麼高,我們也可以結合很多原因來看,當然從資料庫日誌裡面也能看出一些端倪來,那就是歸檔切換頻率還是蠻高的。
可以看到網路卡的繁忙程度,其實在一個時間段裡還是比較集中的。
那麼就可以從主庫來分析一下歸檔的情況了。
當然我也確實比較懶,能看到圖形報告就肯定不願意多去拿更多的命令去分析了。
主庫的歸檔切換頻率如下,可以看到系統在特定的時間段裡還是比較繁忙的。
但是話說回來,這是一個OLAP,怎麼比OLTP還繁忙。
如果排除系統的原因,那麼更多的可能性就是sql語句了。不過還有一個問題需要弄明白,是不是每天都會這樣,因為不是每天都收到報警郵件。
我們來看看七天之內的歸檔情況。可以看到在每天的固定時間段裡,歸檔切換還是比較頻繁的,尤其在今天更為明顯。
當然這個地方我還要補充一下,圖形結果都是片面的,更好的說明還有一個文字的報告。
也是下面的文字報告給我了思路。
如果仔細看看,發現其實在每週的週二都會有一個時間段產生大量的歸檔。
如此一來,想必有些朋友應猜出來了,應該是scheduler導致,這個也是我最後定位問題的一個很好的方向。結合一個星期還不夠,結合了大半個月的資料才發現了這個規律。
那麼可以去檢視awr報告看看哪些scheduler在執行。
還是用指令碼吧。62033是問題時間段附近的快照號。就得到了下面的sql列表。
$ sh showsnapsql.sh 62033
---------- ------------- ---------------- ---------- ----------
62033 75ubgcf0pdrkr 0 1802s 19%
62033 36s5j5zrztscz 0 1802s 19%
62033 882jz57wm9cj7 0 1802s 19%
62033 gab74zwuduz76 0 1678s 18%
62033 0fhgdzus0hu2t 0 1628s 17%
毫無疑問,這幾個裡面應該就有我們需要找到的目標,可以看到top 5的sql語句都是執行了近半個小時,executions都為0.所以還是有很大的可能性。
抓取到了幾個大查詢sql,幾個update,當然最重要的就是其中的一個scheduler了。
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
BEGIN proc_update_cardinfo(); END;
其實top 5中的sql語句都會直接間接在這個scheduler中呼叫的儲存過程中存在。而這個語句的一個核心語句就是下面的形式。
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
UPDATE TESTINFO A SET A.MAX_LEVEL = NVL((SELECT USER_CLASS FROM ROLE_CLASS_INFO B WHERE A.GROUPID =
B.GROUP_ID AND B.CN_GUID = A.ROLE_GUID), A.MAX_LEVEL) WHERE DRAWED = 'Y'
表裡的資料都在億級,所以全表也會很長時間,消耗也是非常的大。
當然後續就是看看這個語句,還有什麼改進的空間,這個還是得和開發的同學好好討論一下。
然後最後的問題,為什麼主庫沒有這類的報錯。
有兩個資料可以佐證,那就是主庫的記憶體是132G,備庫是32G,主庫的CPU是24,而備庫是8,相差比較懸殊,也難怪會出現這樣的問題。
所以通過備庫的CPU報警我們發現備庫存在大量的日誌切換,然後把注意力很自然轉移到主庫,發現在特定的時間段裡會產生大量的歸檔,而大量的歸檔的產生會給備庫造成一些系統壓力,導致CPU負載過高,但是根本的是為什麼主庫的歸檔產生非常多,和主庫中的而一個scheduler有關,所以最後的根本就是調優這個scheduler看看,有多大的改進空間。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1972211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 報警系統QuickAlarm之報警規則解析UI
- ConcurrentModificationException日誌關鍵字報警引發的思考Exception
- 怎麼設定資料庫的報警資料庫
- Prometheus時序資料庫-報警的計算Prometheus資料庫
- 架構師備考的一些思考架構
- 必備丨iOS12的新功能讓手機一鍵發簡訊報警iOS
- 監控報警系統的指標、規則與執行閉環指標
- 架構師備考的一些思考(二)架構
- 架構師備考的一些思考(三)架構
- 架構師備考的一些思考(四)架構
- 年輕人的第一個go程式:監控資料庫欄位 報警Go資料庫
- 製作一個報警系統
- 移動警務-二維碼一鍵報警平臺搭建
- 智慧公安-移動警務-二維碼一鍵報警系統
- 智慧公安-移動警務一鍵報警系統平臺搭建
- 為什麼要庫存預警?如何庫存預警?
- [轉帖]幾款不同的CPU一些資料–備查
- Python釘釘報警及Zabbix整合釘釘報警Python
- QPM 準備優化前的思考優化
- 在DG備庫備份資料庫並恢復到一個主機上,報錯RMAN-06820資料庫
- [20230220][20230110]生成相關備庫的awr報表
- 備份mysql資料庫報告MySql資料庫
- 智慧警務系統,二維碼一鍵報警平臺研發搭建
- 減半警報器
- zabbix釘釘報警
- 一個可擴充套件的報警系統Quick-Alarm套件UI
- oracle資料庫自動發郵件實現報警功能Oracle資料庫
- 【python 監控報警】python自動發微信監控報警Python
- 關於redis快取資料庫的一些思考Redis快取資料庫
- 智慧警務系統開發,二維碼一鍵報警系統解決方案
- Oracle ADG 備庫新增備庫Oracle
- pinpoint-docker開啟郵件報警和整合釘釘報警推送Docker
- 智慧公安掃碼一鍵定位報警系統搭建
- zabbix郵件報警通知
- vue 自定義報警元件Vue元件
- 使用Vmalert監控報警
- 週報調整的若干思考
- 康孚備份資料庫時報錯資料庫
- Oracle 12.2 physical standby備庫收集AWR報告Oracle