<DB2>《DB2使用期间一些注意事项》

2023-12-13 09:54:21

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

文章来源:https://blog.csdn.net/tangcoolcole/article/details/134902053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。