分类:
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
首先要打开监视器的开关
在系统最繁忙的时候,运行
然后在该文件中查找处于Executing状态的应用,找到执行的对应的sql语句。
如果用这种方法找不到,可以收集sql的快照
这个快照记录了动态语句的快照信息,可以根据
这些信息来找到最耗时的语句。
2.如何优化sql语句
DB2提供了很好的工具来做sql语句优化。首先要对找到的sql语句进行分析,看是否是该语句引起了性能问题。我们可以使用db2expln来查看sql语句的访问计划和执行成本。
首先将找到的sql语句写到一个文本文件中sql.in,以“;”结尾,然后运行
查看 sql.exp可以看到这个sql语句的执行成本。
如果确认该语句有问题,可以使用db2advis来通过建索引的方法来优化该语句
如果通过创建索引无法优化该语句,一般只能从业务角度优化。
3.如果发生锁的问题如何处理
发生锁的问题,一般有两种情况,一是锁等待,二是死锁。首先检查数据库配置参数locktimeout,该参数一定不能设为-1,因为会引起某些应用无限期的等待。
可以通过快照来确定数据库发生的问题是哪一种。
查看输出中的下列内容:
如果发生了死锁,可以通过创建死锁监视器来分析产生死锁的原因,命令如下:
分析/tmp/dlmon.out文件就可以找到造成死锁的信息,结合应用就可以找到造成死锁的原因了。 |