技术开发 频道

让数据库飞起来 10大DB2优化技巧

  7. 锁

  LOCKTIMEOUT的缺省值是 -1,这意味着将没有锁超时(对 OLTP 应用程序,这种情况可能会是灾难性的)。尽管如此,我还是经常发现许多 DB2 用户用LOCKTIMEOUT= -1。将LOCKTIMEOUT设置为很短的时间值,例如 10 或 15 秒。在锁上等待过长时间会在锁上产生雪崩效应。

  首先,用以下命令检查LOCKTIMEOUT的值: 

1 db2 "get db cfg for DBNAME"  

  并查找包含以下文本的行:

1 Lock timeout (sec) (LOCKTIMEOUT) = -1

  如果值是 -1,考虑使用以下命令将它更改为 15 秒(一定要首先询问应用程序开发者或您的供应商以确保应用程序能够处理锁超时): 

1 db2 "update db cfg for DBNAME using LOCKTIMEOUT 15"

 

  您同时应该监视锁等待的数量、锁等待时间和正在使用锁列表内存(lock list memory)的量。请发出以下命令:

1 db2 "get snapshot for database on DBNAME"

 

  查找以下行: 

1 Locks held currently= 0
2 Lock waits= 0
3 Time database waited on locks (ms)= 0
4 Lock list memory in use (Bytes)= 576
5 Deadlocks detected= 0
6 Lock escalations= 0
7 Exclusive lock escalations= 0
8 Agents currently waiting on locks= 0
9 Lock Timeouts= 0

 

  如果Lock list memory in use (Bytes)超过所定义LOCKLIST大小的 50%,那么在LOCKLIST数据库配置中增加 4k 页的数量。

6. 临时表空间

  为了改善 DB2 执行并行 I/O 和提高使用TEMPSPACE的排序、散列连接(hash join)和其它数据库操作的性能,临时表空间至少应该在三个不同的磁盘驱动器上拥有三个容器。

  要想知道您的临时表空间具有多少容器,请发出以下命令: 

1 db2 "list tablespaces show detail"

 

  查找与以下示例类似的TEMPSPACE表空间定义:

1 Tablespace ID= 1
2 Name= TEMPSPACE1
3 Type= System managed space
4 Contents= Temporary data
5 State= 0x0000
6 Detailed explanation: Normal
7 Total pages= 1
8 Useable pages= 1
9 Used pages= 1
10 Free pages= Not applicable
11 High water mark (pages)= Not applicable
12 Page size (bytes)= 4096
13 Extent size (pages)= 32
14 Prefetch size (pages)= 96
15 Number of containers= 3

  注意Number of containers的值是 3,而且Prefetch size是Extent size的三倍。为了得到非常好的的并行 I/O 性能,重要的是Prefetch size为Extent size的倍数。这个倍数应该等于容器的个数。

  要查找容器的定义,请发出以下命令:

1 db2 "list tablespace containers for 1 show detail"

 

  1 指的是tablespace ID #1,它是刚才所给出的示例中的TEMPSPACE1。

0
相关文章