深度解讀:歸檔空間不足導致的資料庫無法登錄問題

2020-12-04 楊建榮的資料庫筆記

有一天接到了同事的一個電話,說是有一個資料庫無法訪問了,希望我幫一下忙,連接過去查看,發現是一個看似很簡單的ORA錯誤,如下。

$ sqlplus / as sysdbaCopyright (c) 1982, 2011, Oracle. All rights reserved.

ERROR:ORA-09817: Write to audit file failed.Linux-x86_64 Error: 28: No space left

Additional information: 12

ORA-01075: you are currently logged

這種問題想必大家都或多或少碰到過,從錯誤日誌來看還是因為審計日誌寫不進去了;

再進一步來說,就是磁碟空間不足了。

通過df -h的結果足以說明,磁碟空間確實是不足了,如下。

Filesystem Size Used Avail Use% Mounted

/dev/sda7 5.9G 633M 4.9G 12% /

.../dev/sdb1 3.1T 3.0T 0 100% /data

注意:如果資料庫因為磁碟空間無法登錄,查看不了審計日誌的路徑,可以通過$ORACLE_ HOME/dbs下的參數文件來查找審計日誌的路徑。

臨時解決方法

要解決這個問題,就需要清理磁碟空間,發現有一個大約100MB的臨時文件,可以先挪到其他的目錄下,然後再次嘗試TNS連接就沒有問題了。

問題似乎已經得到初步解決。但是過了不到一分鐘,再次嘗試,發現又無法登錄。查看磁碟空間,空間已經用完了,於是又做了一些磁碟空間的清理,問題的處理才暫時告一段落。

問題反思

這樣一來,我們需要分析問題的原因。空間問題導致的資料庫無法登錄是不應該犯的錯誤。因為查看前幾天的巡檢結果,看到還剩下很多的空間。按照一個閾值來參考,還是夠用的。

那就說明資料庫層面還是有一些異常的地方,於是得到了如圖所示的報告。這個報告能夠看出一個資料庫的負載情況,能夠看到在一個小時內redo的切換頻率。橫軸上方是時間,顯示的是每個小時的歸檔切換頻率,縱軸是日期。

可以看到在問題發生的時間段內(用框圖標註出來的部分),redo切換頻率極高,資料庫負載是在近兩天才升上去的,但是資料庫redo切換如此頻繁,是否在應用層面有一些大的變更目前還沒有相關的通知,而導致空間問題就這樣累計了下來,結果到第二天歸檔時一下子撐滿了磁碟空間才發現問題。

為證實上面的想法還需要協同其他部門進一步確認,在此不作贅述。但是對於DBA來說,確實需要檢查資料庫層面的一些數據變化情況,而隨時做出響應。

因為目前的環境使用Data Guard的架構,歸檔數據傳輸到備庫的頻率還是很高的,所以對於歸檔的保留也就採用了一些處理。目前的歸檔保留時間是2天,考慮到這些天內歸檔切換頻率極高,很可能備庫的空間也會佔滿。所以簡單地修改了一下crontab中歸檔的刪除策略很有必要。

注意:歸檔路徑最好是放在fast_recovery_area_dest下,在11g備庫中,會有一個空間閾值,超過了80%會自動刪除閃回區下的文件,這是11g的一個新特性。

對於這個問題的反思如下:

(1)對於歸檔的刪除,最好能夠做些前瞻性的處理,比如,對於歸檔產生較多,但是又不希望直接刪除歸檔的情況,可以對歸檔進行定時壓縮和定時刪除(定時刪除的文檔須是過期的),這樣既節省了空間又可保留儘可能多的歸檔。

(2)資料庫級的變更和應用關係極為緊密,如果有什麼大的變更或者批量處理還是能夠讓DBA知曉,在這個問題上DBA還是需要做到先知先覺。

(3)從資料庫層面進行了分析,在短期內生成了大量的redo,造成了頻繁的日誌切換,導致歸檔佔用了大量的空間,最後無法登錄,因此,我們可以做一些工作來儘可能長時間的保留近期的歸檔;同時我們還可以換一個思路,即查看是什麼操作生成了大量的redo,是否可以減少redo的生成量,達到釜底抽薪的效果。

關於上面的反思第三條,順著這個思路我們詳細講述一下。

從資料庫層面進行分析

一般來說,日誌會記錄儘可能完整的信息,這是做數據恢復的基礎,但謹慎起見,我們先來分析一下再來做決定看看是否可行。

查看資料庫的redo切換頻率,在近幾天內的redo切換頻率極高,基本每個小時日誌切換都在250次左右。對於一個OLTP的系統來說是非常高的負載,這種頻繁的日誌切換我也只在數據遷移的一些場景中碰到過。

但是奇怪的是查看資料庫的DB time,卻發現這個值其實並不高,如下所示,看起來似乎前後矛盾,因為從這一點來看資料庫內的負載變化其實並不是很高。

BEGIN_SNAP END_SNAP SNAPDATE DURATION_MINS DBTIME

---------- ---------- ----------------------- ----------

82560 82561 05 Sep 2019 00:00 30 26

82561 82562 05 Sep 2019 00:30 30 26

82562 82563 05 Sep 2019 01:00 29 29

82563 82564 05 Sep 2019 01:30 30 27

82564 82565 05 Sep 2019 02:00 30 23

82565 82566 05 Sep 2019 02:30 30 23

82566 82567 05 Sep 2019 03:00 30 20

對於這種情況,我們還是抓取一個AWR報告來看看。

在AWR報告中,可以看到瓶頸還是主要在DB CPU和IO相關的等待事件,見下表。

Top 5 Timed Foreground Events表4-1

查看時間模型,可以看到DB CPU和SQL相關的影響各佔了主要的比例。

查看等待事件能夠看到主要都是在CPU的消耗上,進一步分析能夠關注的重點就是SQL語句,Top 1的SQL語句執行情況見下表。

這條語句執行頻率極高,語句也很簡單,但是CPU消耗卻很高,初步懷疑是走了全表掃描。

語句如下:

update sync_id set max_id = :1 where sync_id_type = :2

簡單查看執行計劃,發現確實是走了全表掃描;通常情況下,這種情況首先是需要走索引的,沒有索引可以新建一個索引,但是當筆者看到SQL by Executions這個部分時,發現問題其實不是那麼簡單。

可以看到第2個語句就是剛剛提到的Top 1的SQL,對應的指標很不尋常的,一次執行處理的行數近5 000多行,執行了1萬多次,處理的數據行數近8000萬,見下表。

但是查看表,發現數據其實就是1萬多條,所以這明顯是一個問題。

我們再來進一步分析,一個小表1萬多行的數據,每次執行更新5 000多行,可以斷定數據的分布是不均勻的。因為這個表結構非常簡單,只有兩個欄位,所以還是很好定位的。

簡單查看了一下數據情況,發現數據主要分布在兩個type列值上,基本上佔用了99.99%以上,如下所示。

SQL> select max_id,count(*)from SYNC_ID where SYNC_ID_TYPE='SYNC_LOG_ID' group by max_id;

MAX_ID COUNT(*)

---------- ----------

38 5558

SQL> select max_id,count(*)from SYNC_ID where SYNC_ID_TYPE=SYNC_TEST2_LOG_ID' group by max_id;

MAX_ID COUNT(*)

---------- ----------

108 5577

從數據的分布情況可以看到,表中存在了大量的冗餘數據,而且表中也沒有索引欄位和其他約束;這樣一來,每次更新時只要更新一個欄位值,就會修改5 000多行數據的值;如果執行頻繁,短時間內就會頻繁生成大量的redo。因此從目前的SQL運行情況來看,這條語句應該是造成redo頻繁切換的主要原因。

畢竟是線上環境,需要做一些確認和溝通之後才能夠變更的,目前只是建議,我們還需要驗證測試一下

驗證測試

測試的思路很簡單,只需把這個表裡的數據導出來,放到其他的測試環境中,然後模擬做頻繁的更新,查看歸檔的頻率即可。

首先把數據導入另外一個測試環境中。其次使用下面的語句進行頻繁更新即可,先更新100萬次,中間可以隨時中斷,於是我寫了下面的腳本。

function test_update

{

sqlplus test/test <<EOF

update sync_id set max_id = 38 where sync_id_type = 'SYNC_LOG_ID';

commit;

EOF

}

for i in

do

test_update

done

在測試開始的時候,歸檔切換頻率是0。

Redo Switch times per hour xxxx-Sep-05 16:02:55

--- -- -- ---- ---- ---- ---- ---- ---- ---- ----

9月5日 0 0 0 0 0 0 0 0運行了不到3分鐘,日誌切換就達到了14次,還是能夠說明問題的。

Redo Switch times per hour xxxx-Sep-05 16:05:20

--- -- - ---- ---- ---- ---- ---- ---- ---- ----

9月5日 14 0 0 0 0 0 0 0

然後我們使用更新的方式來驗證一下。

Redo Switch times per hour xxxx-Sep-05 16:08:04

9月5日 14 0 0 0 0 0 0 0

過了4分鐘,日誌一次都沒有切換。

9月5日 14 0 0 0 0 0 0 0

這就足以說明了我們的推論是正確的

最後就是做進一步的確認,然後在正式的環境中部署,在線上環境清理了冗餘數據之後,這個問題再沒有出現過

相關焦點

  • 資料庫行業深度報告:歷史機遇,國產資料庫市場迎來十倍空間
    如需報告請登錄【未來智庫】。一、資料庫行業的基本情況(略)1.資料庫的性能:六個方面,一套標準資料庫的性能指標聚焦於 6 個方面:吞吐量、負載均衡、讀寫速度、分區分片、並發性和可用性。不同類型的資料庫由於使用場景的差異,在性能和功能上有不同的偏重,在這六個指標方面同樣會有所差異。
  • EMC軟體工程師講解數據備份歸檔解決方案
    現在是下午五點,我們的記者在第二專題會議廳發來最新的專題報告——數據備份歸檔解決方案,由EMC的軟體工程師劉傑來講解,下面是報告的主要內容:    EMC軟體分為四部分,最主要的是智能存儲和數據保護。成長型企業的數據正在以一個非常大的幾何級數的速度增長。如何在有限的預算裡保護好企業數據是一個非常重要的問題。
  • 鏈家 資料庫管理員 怒刪公司 9TB 數據,二審駁回上訴,被判 7 年...
    在2018年6月4日利用其擔任鏈家公司資料庫管理員,並掌握公司財務系統root權限的便利,遠程登錄公司財務系統伺服器,通過執行rm、shred命令刪除數據文件、擦除操作日誌等,刪除了財務數據及相關應用程式,致使公司財務系統無法登錄。 為了防止被人發現,他還在電腦安裝了更改MAC地址的軟體,但IP位址及其電腦主機名將其曝光。
  • 走近NoSQL資料庫的四大家族 深度解讀
    【IT168 資訊】在目前的企業IT架構中,系統管理員以及DBA都會考慮使用NoSQL資料庫來解決RDBMS所不能解決的問題,特別是網際網路行業。傳統的關係型資料庫主要以表(table)的形式來存儲數據,而無法應對非結構化數據的挑戰。在進行數據標準化的過程中,關係型資料庫性能遭遇了瓶頸。
  • deepin 深度系統更新(2020.11.25)發布:大量修復
    今天深度系統官方發布了深度系統更新(2020.11.25),IT之家獲悉,本次更新部分深度應用,全面優化使用體驗,包括磁碟管理器、文件管理器、深度音樂、深度影院、深度相機等。修復部分模塊漏洞,提升系統安全性。
  • 包弼德談哈佛中國歷代人物資料庫:谷歌學術和中國知網過時了
    在這種滲透中,量化史學一方面以其實證性和數據挖掘的大樣本優勢,取得了優勢地位;另一方面,它在定性問題上的局限性和計算機深度學習的未知,受到了不少質疑指摘。哈佛CBDB資料庫負責人王宏甦解讀文本的數據編碼問題。(2)通過多方爭吵、相互攻擊實現創新除了通過編碼的方式,實現了歷史文本的初步挖掘和分析外,CBDB相比於其他資料庫,還特別看重相互間的不斷攻擊。
  • [分享]土層深度不足資料下載
    土層深度不足專題為您提供土層深度不足的相關資料與視頻課程,您可以下載土層深度不足資料進行參考,觀看相關視頻課程提升技能。一、地基基礎施工中存在的問題 地基基礎施工在工程中是很重要的,我們雖然在不斷的改進地基的施工,以其更加堅固,但是,目前,在工程建設過程中,仍有幾點問題沒有得到解決。 查看詳情 一位園林老兵對海綿城市的深度解讀!
  • VR視頻創作工具Specular Theory 登錄Oculus Store
    《VR視頻創作工具Specular Theory 登錄Oculus Store》文章已經歸檔,不再展示相關內容,編輯建議你查看最新於此相關的內容:北美ISP聯合封殺P2P導致視頻網站流量猛降今天,網絡視頻提供商Vuze正式向聯邦通訊委員會(
  • 百度網盤空間調整,再不登錄可能會縮水,看看你的登錄了嗎?
    百度網盤空間調整,再不登錄可能會縮水,看看你的登錄了嗎?提到百度網盤,大家一定都不陌生。它是2012年3月百度推出的一項雲存儲服務。用戶可以將自己的文件上傳到網盤上,並且可以在多個終端上隨時隨地查看自己上傳的內容。
  • 數據引擎,創見未來——深度探秘分布式資料庫技術嘉年華
    據悉,由上海大數據聯盟、中國通信標準化協會大數據技術標準推進委員會、MySQL全球事業部主辦,北京海量數據技術股份有限公司承辦的「新一代企業級分布式資料庫高端技術嘉年華——暨MySQL全球技術沙龍(上海站)」將於2018年12月22日下午在上海舉行。匯聚頂尖資料庫技術專家、行業翹楚及用戶領袖,一眾資料庫從業者即將共饗這場技術盛宴。
  • 歸檔結案制度的理性思考
    因此,一些法院在制定審判流程管理規定時特別強調審限管理,實行「歸檔結案」制度,即案件審結後,以卷宗歸檔日為結案日,以此制約超期審判。  將卷宗歸檔時間作為案件結案時間,在督促審判人員加強責任心,快速辦案,及時歸檔,制止虛報、瞞報結案數,防止案卷遺失等方面效果明顯。然而,作為法院一項管理制度,應當既保證其內容的合法性,又要考慮其實施的可行性,以便於實際操作。
  • 深度作業系統 20 正式版發布 - OSCHINA - 中文開源技術交流社區
    可使用指紋進行解鎖登錄、驗證身份和管理員權限。現已支持多款國產指紋硬體。 優化系統待機喚醒體驗 優化自動更換壁紙功能體驗 修復高分屏切換解析度後出現花屏現象 修復在控制中心設置字體大小為20,登錄頁面字體沒有生效 修復輸入正確帳號密碼登錄雲同步,又彈出帳號密碼輸入框 修復外接無線網卡和藍牙,機器沒有響應的問題 修復雙屏模式下任務欄選擇狀態一直隱藏,桌面的圖標部分消失 修復配合N卡切換閉源驅動失敗的問題 修復任務欄概率性顯示2個文件管理器圖標 修複數位板下列表裡"
  • Cell深度解讀!睡眠不足竟會讓人短命!科學家發現睡眠剝奪會導致...
    2020年6月9日 訊 /生物谷BIOON/ --睡眠不足的最初症狀大家都很熟悉,包括疲憊、注意力難以集中、易怒等,很少會有人經歷長時間睡眠不足所帶來的後果,包括方向迷失、偏執甚至產生幻覺等。
  • 歸檔文件的質量要求
    歸檔文件的質量要求:  1)歸檔的工程文件一般應為原件。  2)工程檔案資料的照片及聲像檔案,要求圖像清晰,聲音清楚,文字說明或內容準確。  3)工程文件的內容必須真實、準確,與工程實際相符合。  4)工程文件應採用耐久性強的書寫材料,如碳素墨水、藍黑墨水,不得使用易退色的書寫材料。
  • 最強攻略2: 史上最全非編碼RNA資料庫匯總解讀
    詳情請戳:RNALocate:非編碼RNA亞細胞定位檢索工具LNCipedia是一個公共資料庫,用於存儲較長的非編碼RNA(lncRNA)序列和注釋。該資料庫整合了多個人類(Human)lncRNA資料庫信息,很大程度上解決了lncRNA資料庫各自為政的問題。
  • AWS新品直指微軟,它會是改變資料庫的「Game Changer」嗎?
    Matt引用Gartner分析師Merv Adrian的話——遺留資料庫中最大的力量就是慣性。這種慣性源於對數據模型的投資,與特定資料庫深度集成的供應鏈,或者僅僅是擔心失敗。 也許正如他所說,開源的Babelfish可以消除一些資料庫領域的慣性,為大家向PostgreSQL遷移鋪平道路。
  • 「Oracle資料庫」如何更改重做日誌文件的位置或者名稱?
    重做日誌文件重建後,有的時候我們需要修改它的名稱或者位置,舉個最常見的例子,本來日誌文件是在D盤,但是實際情況下D盤空間嚴重不足,這個時候我們就必須將D盤上的資料庫日誌文件移動到其它大的磁碟分區中,這就是比較常見的場景了。下面,小編為大家介紹具體的操作方法。
  • 微軟OneDrive遭遇宕機:無法登錄
    IT之家12月18日消息 在美國當地時間12月17日下午3:30,微軟OneDrive出現無法登錄的問題,該問題影響了美國、歐洲地區,並擴大到墨西哥、印度等國家和地區。隨後微軟更新了OneDrive狀態,特意指出了OneDrive Web網頁端出現問題,用戶在訪問https://onedrive.live.com 上的Web程序時發生故障。在當天下午7點,微軟進行了系統重啟以便恢復OneDrive服務,不過在晚上8點微軟更新狀態表示,系統重啟並未完全解決問題,微軟需要進行配置升級以便恢復服務。
  • iCloud經歷短時宕機 用戶遭遇登錄和驗證失敗等問題
    數小時前,蘋果 iCloud 服務遭遇了驗證功能的短時宕機,導致一些用戶的屏幕上彈出了「您選擇的應用程式並不存在」等報錯信息。 由於存在一定的延時,我們並未在事發第一時間的蘋果系統狀態頁面上找到故障出現的確切原因,不過現在已認定與 iCloud 的帳戶登錄問題有關。
  • MySQL資料庫常見的出錯代碼及出錯信息
    詳細內容請大家參考下文: 1005:創建表失敗 1006:創建資料庫失敗 1007:資料庫已存在,創建資料庫失敗 1008:資料庫不存在,刪除資料庫失敗 1009:不能刪除資料庫文件導致刪除資料庫失敗 1010:不能刪除數據目錄導致刪除資料庫失敗 1011:刪除資料庫文件失敗 1012:不能讀取系統表中的記錄