Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103695878
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-14 12:56:09

    来源:csdn    作者:胡晶玉

三、数据库性能问题

数据库的性能问题一般不属于故障,但是当性能问题变得很严重时,就变成了故障。

解决数据库的性能问题,可以从以下方面入手,检查数据库的配置,如缓冲池,排序堆等是否合理;检查数据库是否收集过统计信息,准确的统计信息对语句优化起着重要的左右;对sql语句进行优化;查看是否有系统资源瓶颈。

确认性能问题首先要从系统的资源消耗来分析,一般可以借助操作系统的工具,如aix的topas命令。数据库的性能问题一般的表现是应用变慢,甚至没有响应。

Tip:如何快速定位问题

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

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

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

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

数据库一般有三类的性能问题,一是CPU占用过多,二是IO过于繁忙,三是有锁等待。

1.快速找到执行成本较高的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

这个快照记录了动态语句的快照信息,可以根据

Total execution time (sec.ms)      = 0.000000
Total user cpu time (sec.ms)       = 0.000000
Total system cpu time (sec.ms)     = 0.000000

这些信息来找到最耗时的语句。

2.如何优化sql语句

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

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

db2expln –d  -f  -z “;” –g –o sql.exp

查看 sql.exp可以看到这个sql语句的执行成本。

如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句

db2advis –d  -i sql.in

如果通过创建索引无法优化该语句,一般只能从业务角度优化。

3.如果发生锁的问题如何处理

发生锁的问题,一般有两种情况,一是锁等待,二是死锁。首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。

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

db2 get snapshot for db on 

查看输出中的下列内容:

Deadlocks detected                         = 0
Lock Timeouts                              = 0

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

mkdir /tmp/dlmon
db2 connect to 
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文件就可以找到造成死锁的信息,结合应用就可以找到造成死锁的原因了。

阅读(233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~