Posted on 2010-02-11 13:21
Prayer 閱讀(1031)
評論(0) 編輯 收藏 引用 所屬分類:
DB2
本系列文章主要介紹數據庫管理員(DBA)在日常維護中遇上一些比較緊急的情況如何處理,本篇主要介紹DB2交易日志存儲空間滿問題如何處理。
1、數據庫事務日志的最大大小
數據庫事務日志的最大大小由數據庫的三個配置參數決定,分別是“主日志文件的數目”(LOGPRIMARY)、“輔助日志文件的數目”(LOGSECOND)和“日志文件大小(4KB)”(LOGFILSIZ)。數據庫事務日志的最大大小的計算公式如清單 01-32 所示:
清單 1. 數據庫事務日志的最大大小的計算公式
數據庫事務日志的最大大小 = ( LOGPRIMARY + LOGSECOND )* LOGFILSIZ * 4KB
|
LOGSECOND 在這個公式中不能設為 “ -1 ” ,“ -1 ”代表你在請求一個無限的活動日志空間,數據庫也不會報數據庫事務日志已滿錯誤,如果空間不足則會報日志磁盤已滿錯誤,具體如本章第五節所述。下面我們具體看一下這三個參數:
- 主日志文件的數目 LOGPRIMARY
此數據庫配置參數用來指定要預分配的主日志文件個數。主日志文件建立分配給恢復日志文件的固定存儲器數量。在循環日志管理模式下,數據庫事務將按順序重復使用主日志,也就是當一個主日志已滿時,順序使用下一個主日志,如果主日志已滿,則按需一次分配一個輔助日志,輔助日志在使用完后,將被釋放。如果你發現數據庫會經常分配輔助日志文件,則可能需要通過增大日志文件大小或增大主日志文件的數目來提高系統性能。
- 輔助日志文件的數目 LOGSECOND
此數據庫配置參數用來指定按需分配的輔助日志文件個數。盡量不要把此參數的值設置成“ -1 ” ,“ -1 ”代表你在請求一個無限的活動日志空間,數據庫也不會報數據庫事務日志已滿錯誤,如果空間不足則會報日志磁盤已滿錯誤。
- 日志文件大小 LOGFILSIZ
此數據庫配置參數用來指定日志文件的大小。
2、數據庫事務日志已滿錯誤
數據庫事務日志已滿錯誤是指當前事務無法寫入到活動日志中(此時主日志文件和輔助日志文件已經全部用完或者沒有足夠當前事務寫入的空間),需要注意的是,這個錯誤和日志磁盤空間已滿是兩個概念,如果想查看日志磁盤已滿錯誤,請參照本章第五節。數據庫事務日志已滿不是由于磁盤空間滿引起的,而是由于沒有落實的事務總體過大,超過了數據庫事務日志所能容納的最大大小所造成的。
一般系統上線之初(如果是分階段上線,則是每次上線之初),由于經常要導大量的數據,容易出現這個問題,當出現這個問題時,直接的辦法是找到引起這個錯誤的當前事務,終止掉這個事務即可,后續在操作時找到當前執行的事務中比較大的事務,盡量落實或回滾該事務。
一般情況下,建議大家在系統上線之初進行導數時,盡量使用 LOAD 實用程序(如果是歸檔日志模式,建議使用帶 NONRECOVERABLE 選項的 LOAD 實用程序,否則裝入完成后數據庫或裝入的表所在的表空間會被置于備份暫掛狀態,需要做一次全備才能解除備份暫掛狀態),LOAD 實用程序在裝入數據時不記日志。
如果使用 IMPORT 實用程序,建議使用 COMMITCOUNT 選項。無論是循環日志模式還是歸檔日志模式,使用 IMPORT 實用程序導入大量數據時,都有可能報數據庫事務日志已滿(也就是當前導入操作產生的事務過大,使得當前活動日志滿了,包括所有的主日志和輔助日志都用完了),所以為了避免數據庫日志已滿錯誤,提高并發性,可以使用 COMMITCOUNT 選項,對要導入的數據分階段提交。比如可以將 COMMITCOUNT 參數設置為“自動”,指示 import 實用程序 內部決定何時進行落實。此外,也可以將 COMMITCOUNT 選項設置為特定數字,指示 import 實用程序 在導入指定記錄數后即進行落實。
盡量避免在上線之初直接使用“ INSERT INTO … SELECT .. FROM .. ”語句,導入一個很大的事務的方式進行導數,這樣會使事務非常大。另外,還可以在系統上線之初把主日志文件的數目(LOGPRIMARY)、輔助日志文件的數目(LOGSECOND)和日志文件大小(4KB)(LOGFILSIZ)三個參數調大,等系統正式上線穩定后,再調回合適的值。
如果是在正式上線后的系統,經常出現這個問題,就需要查找原因,具體的原因可能有:
- 數據庫并發連接比較多
這種情況下,就要考慮適當增加主日志文件的數目(LOGPRIMARY)和日志文件大?。?KB)(LOGFILSIZ)。
- 有人通過第三方軟件或其他工具直接連接到了生產庫
在這樣的情況下,就要監控數據庫,看其是否經常寫一些大的語句對數據庫進行增刪改的操作,如果是的話,建議增加數據庫的控制,盡量不要讓不相關的人員連接生產庫(如果其他人有需要,盡量開放備份庫給他們使用,而不要開放生產庫,生產庫盡量只給業務系統正常使用),如果你使用的是 DB2 V9.5 版本,則可以使用工作負載管理 WLM 對數據庫的資源進行調配。如果使用的是 DB2 V9.5 之前的版本,則可以在數據庫服務器上通過配置操作系統的方式,限制一些 IP 的訪問。
當出現這樣的錯誤時,不要嘗試使用 DB2STOP FORCE 命令來強制停掉數據庫,建議大家使用 FORCE APPLICATION 命令停掉引起這個錯誤的應用程序或者停掉所有的應用程序。也不建議大家使用 KILL 命令來殺掉任何 DB2 相關的進程。