1 建存儲過程時 Create 后不能使用 TAB 鍵
create procedure
create 后只能用空格,而不可用 tab 健,否則編譯會通不過。
2 查看語句執行計劃
dynexpln -d testdb -f test.sql -o test.out -g -z ';'
sql 語句放在 test.sql 中,結果輸出到 test.out。
3 查看SP存儲過程執行計劃
db2expln -c kstar -d testdb -o test.out -p P2806220 -s 0
-p 是存儲過程的 id
4 手工做數據庫別名配置及去除該別名配置
db2 catalog db gtjazb on /gtjadb2(目錄)
db2 uncatalog db gtjazb
5 查看及停止數據庫當前的應用程序
db2 list applications show detail
授權標識 | 應用程序名 | 應用程序句柄 | 應用程序標識 | 序號# | 代理程序 | 協調程序 | 狀態 | 狀態更改時間 | DB 名 | DB 路 徑 | | 節點號 | pid/線程
1、應用程序標識的第一部分是應用程序的 IP 地址,不過是已 16 進制表示的。
2、pid/線程即是在 unix 下看到的線程號
停止應用程序::該 236 是查看中的應用程序句柄
db2 "force application(236)"
db2 “force application all”
6 更改 dbheap 的大小
db2 update db cfg for testdb using DBHEAP 4096
該值是對 db 的。 Dbheap>catalogcache_sz+logbufsz
7 改 catalogcache 的大小
db2 update db cfg for testdb using catalogcache 2048
和表的數量和字段數量有關,如果表及字段較多,最好將該指標改
大一些。該值的大小可以開為和建表 script 的大小相當,再稍大一點。
當然,如果有動態創建表的話,根據實際情況可能要開得更大一些。
8 改工具堆大小
UTIL_HEAP_SZ
這個指標值是用于對 import,export,load 等工具來分配內存的。
9 改排序堆的大小
db2 update db cfg for testdb using SORTHEAP 2048
將排序堆的大小改為 2048 個頁面,查詢比較多的應用最好將該
值設置比較大一些。
該指標值是對每個連接分配的內存,如果連接數比較多,注意不要
開得太大。如果看到了 sort overflow 的話,可以將改值調大一些。
這個內存是只在用的時候才申請,平時是不會申請的。
10 改 stmtheap 的大小
db2 update db cfg for head using STMTHEAP 4096
該指標值是對每個連接分配的內存,如果連接數比較多,注意不要
開得太大。該數據值和解釋語句有關,如果太小,可能比較大的語句會解釋不了。這個內存是只在用的時候才申請,平時是不會申請的。
11 改鎖的相關參數的大小
db2 update db cfg for head using LOCKLIST 40000
這個是整個 db 的最大鎖資源占的內存。鎖資源的消耗是每條共享鎖
占 36 個字節,獨占鎖占用 72 個字節。鎖資源的大小要考慮應用來設置。
db2 update db cfg for head using MAXLOCKS 10
這個參數是設定單個應用程序能夠使用的最大鎖資源,這是個百分
比的值。實際上單個應用程序能夠使用的鎖資源的大小為
LOCKLIST* MAXLOCKS
db2 update db cfg for head using LOCKTIMEOUT 60
這個參數是設定應用程序鎖等待的最大時間。單位是秒,這個值的
設定要比較適當,對并發較多的情況下,鎖等待可能是不可避免的,如
果設定不適當,可能會發生太多的 time out 錯誤。
db2 update db cfg for head using DLCHKTIME 10000
這個參數是設定系統檢測死鎖發生的時間,單位是毫秒,不要設得
太小,耗系統資源且沒太多必要
12 升級后消除版本問題
db2 bind @db2ubind.lst
db2 bind @db2cli.lst
13 數據庫性能下降后做 runstats 及 rebind 包。
在表(大表)的記錄的條數有 30%
的變化以后,就應該做一次 runstats
從方便管理的角度,直接從 syscat.tables 中建 script。
db2 “select 'runstats on table db2inst1.' || tabname || ' and indexes all' from syscat.tables where tabschema='DB2INST1' and type='T'” >stats.sql
將 stats.sql 中的多余的信息刪除后,運行該腳本。
db2 -tvf stats.sql
請注意在做 runstats 時,將其他應用全部斷開。
為了提高速度,可以調整一下 database 的參數,將 applheapsz ,
sortheadp,stmtheap 先擴大 10 倍,但注意做完 rebind 后將參數恢復回來。
注意:在作完 runstats 后,相關的 sp 如果不做 rebind,性能不會有任何變 化,不會使用新的統計數據來計算。
db2 “select 'rebind package '||pkgname from syscat.packages where pkgschema='DB2INST1’ “ >rebind.sql
將 stats.sql 中的多余的信息刪除后,運行該腳本。
db2 -tvf rebind.sql
15 修復診斷數據庫 db2dart 的使用
db2dart testdb//對一個表做診斷(從這里可以得到該表的 index 的 id號)
db2dart testdb/T //對一個表的 index 做修復
db2dart gtjazb /MI
db2dart 還有一些功能,但 db2dart 是個比較深的用法,一般情況下不要使用。具體可以看幫助。
16 獲取數據庫的信息 db2support 的使用
db2support /gtja_emc/dream/ -d testdb
17 有關鎖的知識
在 db2 get snapshot for Locks on head >snap.log 時,經常會看到一些
鎖的類型,不是很明白:
S:share 鎖,共享鎖,加上后,其他應用程序可以讀,但不可 update,
每個占用 36 個字節。
X:exclusive,獨占鎖,加上后,其他程序除非使用 UR 隔離級,
否則不可讀。每個占用 72 個字節。
**** 表鎖
IN (Intenet None)不需要行鎖
IS (Intent Share) 需要行鎖配合
IX (Intent eXclusive) 需要行鎖配合
SIX (Share with Intent exclusive)需要行鎖,共享排他鎖
S (Share) 不需要行鎖配合
U (Update) 不需要行鎖配合
X (eXclusive) 不需要行鎖配合
Z (Super Exclusive)不需要行鎖配合
***** 行鎖
S (Share)共享鎖
U (Update) 更改鎖
X (eXclusive) 排他鎖
W (Weak eXclusive)弱排他鎖
NS (Next Key Share) 下一行共享鎖
NX (Next Key eXclusive)下一行排他鎖
NW (Next Key Weak eXclusive)下一行弱排他鎖
鎖的疊加情況:
S 鎖和 S 鎖是可以多個程序對一個對象加。
X 鎖和 S 鎖不兼容。
Object Type= Row (行鎖)
Object Type= Table (表鎖)
Object Type= Key Value
Object Type= Internal P Lock
Object Type= Internal V Lock
Object Type= Internal C Lock