诊断DB2数据库故障与性能瓶颈

1、在db2数据库主机遇到重大故障时我们可以通过db2support收集数据库诊断日志数据

#在可以连接的时候

#db2support . -d sample -c -g -s

#不能连接的时候

#db2support . -c -g -s

2、bufferpool设置的太大连接数据库时导致系统宕机的解决方法:

操作步骤:

#db2set DB2_OVERRIDE_BPF=10000

#db2 terminate

#db2stop

#db2start

#db2 connect to db

#连上db

#db2 alter bufferpool buffer001 numblockpages

#原来的块SIZE太大,我们这里禁用它

#db2 force applications all

#db2 connect to db

#db2 alter bufferpool buffername immediate size 50000

#将SIZE改小

#db2set DB2_OVERRIDE_BPF= #设置为空,还原回去

#db2 terminate

#db2 force applications all

#db2stop

#db2start

3、如何快速定位问题

1)如果系统的CPU利用很高,IO很少,那么数据库的排序较多

2)如果系统的IO繁忙,CPU很多是wait,那么说明数据库有过多的IO

3)如果系统CPU,IO都很空闲,那么说明可以是有锁的问题

4)如果系统IO,CPU都非常忙,说明有执行代价非常高的sql在执行

4、快速找到执行成本较高的sql

#首先要打开监视器的开关

#db2 update monitor switches using bufferpool on lock on sort on statement on table on uow on

#在系统最繁忙的时候,运行

#db2 get snapshot for all applications > app.out

#然后在该文件中查找处于Executing状态的应用,找到执行的对应的sql语句。

#如果用这种方法找不到,再收集sql的快照

#db2 get snapshot for dynamic sql on > sql.out

5、如何优化sql语句

DB2提供了很好的工具来做sql语句优化。首先要对找到的sql语句进行分析,看是否是该语句引起了性能问题。我们可以使用db2expln来查看sql语句的访问计划和执行成本。

#首先将找到的sql语句写到一个文本文件中以;结尾,然后运行

#db2expln –d dbname -f sqlfile -g -o sql.explain查看 sql.explain可以看到这个sql语句的执行成本。

#如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句.db2advis -d -i sqlfile如果通过创建索引无法优化该语句,一般只能从业务角度优化。

6、如果发生锁的问题如何处理

发生锁的问题,一般有两种情况,一是锁等待,二是死锁。

#首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。

#其次可以通过快照来确定数据库发生的问题是哪一种。

#db2 get snapshot for db on

#查看输出中的下列内容:

#Deadlocks detected = 0

#Lock Timeouts = 0

#如果发生了死锁,可以通过创建死锁监视器来分析产生死锁的原因,命令如下:

#mkdir /tmp/dlmon

#db2 connect to dbname

#db2 create event monitor dlmon for deadlocks with detail write to file ‘/tmp/dlmon’ replace

#db2 set event monitor dlmon state 1等有死锁发生后

#db2 set event monitor dlmon state 0

#db2evmon –d /tmp/dlmon >/tmp/dlmon.out

#分析/tmp/dlmon.out文件就可以找到造成死锁的信息,结合应用就可以找到造成死锁的原因了。

二、关于bufferpool

1、大缓冲池的优点

它们使频繁请求的数据页能够保存在缓冲池中,这样可更快地访问。更少的 I/O 操作可以减少 I/O 争用,从而可提供更短的响应时间并减少 I/O 操作所需的处理器资源。

它们提供在相同的响应时间内到达更高的事务处理速率的机会。

它们防止频繁使用的磁盘存储设备(如目录表)和频繁引用的用户表和索引的 I/O 争用。由于包含临时表空间的磁盘存储设备上的 I/O 争用减少,查询所需的排序也从中受益。

许多缓冲池的优点

2、基于下列原因可考虑使用多个缓冲池:

可以把临时表空间分配给单个缓冲池中,以便为需要临时存储器的查询尤其是执行大量排序的查询提供更佳性能。

如果数据必须由很多小的更新事务应用程序反复地快速访问,考虑将包含该数据的表空间指定给单独的缓冲池。如果此缓冲池的大小定得合适,将有更多的机会找到它的页,以利于缩短响应时间和降低事务成本。

您可以将数据隔离到不同的缓冲池中,以利于特定的应用程序、数据和索引。例如,您可能要将频繁更新的表和索引置于一个单独的缓冲池中,与那些虽频繁查询但不频繁更新的表和索引分开。此更改将减少对第一组表的频繁更新对第二组表的频繁查询具有的影响。

对于很少使用的应用程序所访问的数据,可使用较小的缓冲池,尤其对于需要对一个很大的表非常随机地进行访问的应用程序。在 这种情况下,不需要将数据保存在缓冲池中的时间超过单个查询的保存时间。最好为此数据保留一个小缓冲池,而释放多余的内存用于其他用途,如用于其他缓冲 池。

当将不同的活动和数据隔离到不同的缓冲池之后,可从统计信息和记帐跟踪获得一个良好的、相对成本较低的性能诊断数据。

时间: 2024-08-17 18:32:55

诊断DB2数据库故障与性能瓶颈的相关文章

db2数据库删除-DB2数据库所在磁盘丢失如何删掉数据库并恢复?

问题描述 DB2数据库所在磁盘丢失如何删掉数据库并恢复? 情景:主库:DB2数据库在H盘备库:DB2数据库在H盘故障:备库DB2数据库ABC所在H盘丢失.需求:将备库DB2数据库ABC的信息去掉,从主库导出数据,恢复到备库.尝试:1.从主库中导出数据(主库数据库名称也为ABC),数据文件放在D:DATA2.将主库上的导出文件传送到备库的D:DATA下3.在备库, 导入数据文件,结果报错,说H盘找不到.4.在备库,准备删掉ABC数据库信息,使用db2 drop database db abc报错,

利用jdbc连接db2数据库

问题描述 利用jdbc连接db2数据库 数据库连接配置如下: jdbc.driver=com.ibm.db2.jcc.DB2Driver jdbc.url=jdbc:db2://localhost:50000/finical jdbc.username=db2admin jdbc.password=325314 报错如下: com.ibm.db2.jcc.b.DisconnectException: The application server rejected establishment of

jsp用jdbc连接db2数据库的方法

js|数据|数据库 数据库版本:db2 UDB v7.2服务器操作系统:aix4.3.3 1.关闭服务器上的web服务:2.停止jdbc侦听进程db2jd,db2jd一般启动的是6789的端口服务,   先用ps -ef | grep db2jd 查看到它的进程号   然后用kill -9 <进程号>  命令停止;3.在数据库服务器中,进入/usr/lpp/db2_07_01/java12目录,执行./usejdbc2以启用jdbc2:4.将/usr/lpp/db2_07_01/java12下

.Net开发DB2数据库相关应用程序比较

比较|程序|数据|数据库 简介 在.NET应用软件开发人员看来,使用DB2与使用其它任何其它关系数据库没有区别.人们可以看到无数使用SQL Server以及甲骨文公司产品执行数据库任务的例子,但关于使用包括.NET在内的微软公司技术访问DB2数据库的文档就远没有那么多了. 目前,开发人员可以使用不同的访问技术通过编程的方式将.NET客户端连接到DB2上,这些代码从根本上来说是基本相同的,但仍然存在一些我们需要考虑的有趣的限制. DB2架构慨览 DB2数据库引擎的基本元素是数据库对象.系统目录.目

JSP如何连接DB2数据库

js|数据|数据库 JSP与DB2数据库连结的问题网上有很多资料,但笔者发现大部分资料均有误,无法真正处理与DB2连结的问题,笔者经过研究解决了这个问题,现将我的一点心得发表出来,与君共享. <%@ page session="false" %><%@ page import="java.sql.*"%><%@ page import="java.util.*"%> <html><head&g

使用连接池连接IBM DB2数据库

数据|数据库 最近在论坛上看到有人总结了连接池的使用,很可惜的是他仅仅总结了Oracle和SQL Server这两种.现在,我把IBM DB2的连接池技术补充上.以供大家参考!Tomcat配置:<Context path="/浏览器中输入的名字" docBase="绝对路径"                    debug="5" reloadable="true" crossContext="true&qu

如何使用JSP连接DB2数据库

js|数据|数据库 <%@page import="java.sql.*" import ="java.util.*" import ="java.io.*" contentType="text/html; charset=gb2312" %> <html> <head> <title>使用Db2数据库</title> <meta name="GENE

JDBC连接DB2数据库详解

数据|数据库|详解 From: RichardChoi (Richard in JLUBBS) E-mail: richardchoi@126.com 关于DB2数据库的JDBC连接文章有很多,比较出名的有诸如"JDBC数据库连接大全"和"JSP的DB2连接数据库",虽然都是很详细的资料,也都说解决了前人没有解决的问题,但还是有许多纰漏.我就这两天的经验给大家写一篇关于JDBC连接数据库的文章,以解决一部分人的疑问. 第一, JDBC是JDK的一部分(至少在Java

用Visual C#中实现DB2数据库编程(转)

visual|编程|数据|数据库 在Visual Studio.NET Beta 1版本中访问IBM DB2等非SQL Server数据库通常是使用ADO.NET的ODBC方法,而在Beta 2中则改用OLE DB方式存取数据库. Beta1中连接字符串主要需声明数据库的ODBC的DNS名字,但Beta 2中的OLE DB连接的字符串就较复杂了,使用的类也不相同.由于DB2等数据库在大型机等应用中使用非常广泛,.NET自然会全力支持此类编程开发,为此,下文将逐步阐述OLE DB的DB2开发. O