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