為什麼國產資料庫的日誌看了讓人上頭呢?
日誌分析是分析資料庫故障的重要手段,記得三十多年前剛剛開始學Oracle的時候,前輩告誡我做資料庫運維,遇到故障,ALERT LOG永遠是第一個要關注的要素。這麼多年的實踐也證明了,沒有遵循這個原則的時候往往會吃苦頭。有一次遇到一個十分棘手的問題,STATSPACK報告也分析了、各種指標、TOP SQL也看了,沒有發現問題。折騰了半天,快絕望的時候突然想起了看看alert log。一看嚇了一跳,資料庫不斷的在報ORA-00600[kcbgtcr_1],每分鐘寫出幾個GB的日誌。這種故障以前遇到過幾次,一下子就明白咋回事了。
在資料庫國產化時代,我有點蒙圈了。各種資料庫的日誌檔案各異,格式也五花八門,因為對資料庫的原理知之甚少,因此看起來如看天書。這些資料庫日誌的唯一的相似點就是看著讓人蒙圈。有些資料庫系統都慢得快掛了,各種日誌檔案裡乾淨得很,找不到可以讓人參考的資訊。有些資料庫則是沒事都每個小時幾百個MB的日誌資訊,好像寫日誌對效能沒任何影響似的。最大的問題是日誌雖然多,但是沒有太多有用的東西,或者說讓人看得有些費解,有點像我們程式沒寫好,忘了把一些除錯資訊刪掉一樣。
就看日誌上頭的問題,我也與許多國產資料庫廠商的研發人員做過交流,他們回答的理由五花八門,不過有一點是相似的,那就是他們希望在日誌裡多輸出一些資訊,以便於故障時更為準確的定位。這個觀點讓我對國產資料庫日誌為什麼如此雜亂有了一個初步的認知,那就是國產資料庫的日誌實際上包含了兩部分內容:log和trace。大家可能知道,可觀測性的三大來源是metric、log和trace。有些朋友可能會混淆log和trace,把這二者混淆起來。Log是記錄事件的,讓運維人員知道某些資訊、告警、錯誤在某個時刻發生了,一般情況下,log可以只包含事件發生時的一些關鍵資料和資訊,但是不包含事件的詳情,比如詳細的堆疊,記憶體,訊息資訊等。而Trace是一種更為詳細記錄事件或者告警的機制,可以用於細緻分析和除錯跟蹤,因此Trace一般記錄了某個事件或者故障的詳細追蹤資訊,可以用於故障分析或者BUG定位。
在大多數資料庫中並沒有明確的將log和trace區分開來,而是統一輸出到日誌裡的。這樣就讓我們在檢視日誌的時候感到十分困惑。在上面的日誌中,我們看到一些unkwon的告警,但是我們無法對這些告警展開分析,因為缺乏trace的資訊,按理說在資料庫處於生產執行的時候,對於diag/info類的資訊可以不記錄日誌,只記錄一些十分關鍵的Info類資訊,比如日誌切換,檢查點發生等。而對於ERROR/FATAL/UNKOWN的錯誤,則要做詳細一些的記錄,比較嚴重的不能忽略的,要記錄trace資訊,這樣才便於跟蹤與定位問題,或者用於售後服務人員分析問題。
但是我們是不是願意看到這樣的日誌檔案呢?密密麻麻都是trace資訊。有心人可以一眼就看出這是Oceanbase的日誌檔案,為了便於跟蹤與定位問題,oceanbase資料庫在各類server的日誌中記錄了大量的這樣的資訊。實際上這些內容應該屬於trace資訊,對於原廠的運維人員定位與分析問題十分有用,但是對於甲方或者第三方的DBA來說,不亞於看天書一樣。
為此,Oceanbase的小夥伴還開發了一款用於OB日誌分析的工具-obdiag,藉助obdiag,DBA終於可以部分看懂這些天書了。
國產資料庫的日誌最大的問題是沒有仔細區分log和trace,並且沒有把寫log和trace的尺度掌握好。其實這方面我們已經有了一個很好的老師-Oracle。
Oracle很好的解決了我上面所說的國產資料庫日誌的問題,日誌和trace是完全分離的。Alert log是日誌,而trace則是*.trc。在alert log中十分乾淨整潔地按照時間順序記錄了相關的事件。如果某個事件產生了trace檔案,則記錄下trace檔案的檔名。根據alert log我們可以十分清晰的看到在某個事件區間裡發生了什麼。如果我們要了解某個事件的詳細資訊,則去trace裡檢視就可以了 。
比如在1月23號發生的某個事件需要做process state dump,我們沒必要把這個幾十MB的TRACE都寫入alert log,而是放在一個獨立的事件trace裡就可以了。如果我們的國產資料庫的日誌都這樣有條理,是不是對運維和原廠的售後服務很有幫助呢?
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/ETyznKoHbFZdQXhOLvaizA,如有侵權,請聯絡管理員刪除。
相關文章
- 為什麼物件導向的資料庫不普及呢?物件資料庫
- 資本為什麼盯上國產資料庫(案例解析篇)資料庫
- 請問日誌審計什麼意思呢?
- 國產資料庫市場橫空殺出個巨頭?亞信 AntDB資料庫憑什麼資料庫
- 日誌審計是什麼?為什麼企業需要日誌審計?
- 日誌脫敏是什麼意思?為什麼要做日誌脫敏?用什麼工具好?
- 為什麼一些智慧手機遊戲會讓人上癮?遊戲
- 為什麼要Supplemental Log(追加日誌)
- 好端端的資料結構,為什麼叫它SB樹呢?資料結構
- 如果資料庫日誌已滿,怎麼辦?資料庫
- 將資料庫轉換為歸檔日誌模式資料庫模式
- 將RAC資料庫更改為不歸檔日誌的模式資料庫模式
- [Vue進階]為什麼我的程式碼讓別人看起來頭皮發麻?Vue
- 為什麼開發人員必須要了解資料庫鎖?資料庫
- 2021,國產資料庫人的最好時代資料庫
- 為什麼我喜歡資料庫?沒那麼複雜和嚇人資料庫
- MySQL資料庫中的日誌檔案---(1)錯誤日誌MySql資料庫
- 為什麼DBA需要資料庫廠商的資料庫概念文件資料庫
- PG資料庫為什麼要用autovacuum資料庫
- 《伊格效應》開發日誌:為什麼做職人這個題材?
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 為什麼PostgreSQL是最成功的資料庫?SQL資料庫
- oracle資料庫mmnl日誌很大Oracle資料庫
- 分析資料庫日誌(LogMiner)資料庫
- 清除SQL Server資料庫日誌SQLServer資料庫
- 為什麼會有這麼多種的資料庫資料庫
- 資料庫altert日誌中的GTX提示資料庫
- MySQL資料庫中的日誌檔案---(3)慢查詢日誌MySql資料庫
- MySQL資料庫中的日誌檔案---(2)普通查詢日誌MySql資料庫
- 什麼是資料庫?什麼是雲資料庫?資料庫
- 企業資料整合是什麼呢?
- 讓領導懂資料庫是資料庫國產化替代成功的一半資料庫
- 你為什麼離職呢?
- Galgame研發日誌:那麼,怎麼才能回本呢?GAM
- 社群的教程買過的為什麼不能看了
- Oracle資料庫重做日誌及歸檔日誌的工作原理說明Oracle資料庫
- 為什麼NoSQL資料庫這麼受歡迎?SQL資料庫
- 分散式資料庫入門:以國產資料庫 TDSQL 為例分散式資料庫SQL