如何对DB2数据库做性能分析?

如何对DB2数据库做性能分析?

 

第一步 操作系统级别性能
CPU监控:
ps -elf | sort +5 -rn | more 第6列代表CPU使用的计数器
I/O使用率:
iostat -D 收集磁盘I/O信息
内存占用率:
讨论的内存指的是虚拟内存(virtual memory),包括物理内存(physical memory)与交换空间(swap space)
vmstat -> avm 当前系统中已经激活的虚拟内存页的数量(该数值不包含文件系统缓存)
vmstat -> fre 系统中平均空闲页的数量(不能完全代表系统中可用的空闲内存:文件系统缓存驻留内存,并不会返还给空闲列表,除非被虚拟内存管理器盗取)
svmon -> clnt与in use交叉项代表有多少内存被文件系统使用(加上free项,可以初步认为是该系统中可以被应用程序所使用的内存)

第二步 数据库级别性能
1. db2grep -dump | more 查看服务器安装了几个DB2版本
2. ps -elf | grep db2inst1 查看数据库进程的CPU计数器
3. db2 get dbm cfg | grep -i dft_mon 确认快照打开
4. 实例级快照,了解当前实例有多少应用程序在执行
db2 get snapshot for database manager -> Remote connections & Local connections
5. 数据库级快照
连接数信息:applications connected currently,appls executing in db manager currently
锁信息:锁总数,锁等待数量,锁等待总时间,当前数据库锁列表占用内存,死锁次数,锁升级次数,锁超时次数
排序信息:
排序是CPU杀手,过多的排序会造成CPU的极大消耗;
排序溢出是说,如果排序堆无法容纳排序数据,就会被溢出到临时空间;
排序是一种状态,根源在SQL语句;
数据索引I/O信息:
逻辑读 DB2向缓冲池请求的次数 逻辑读越多,需要的物理I/O就越少
物理读 如果请求的数据页不在缓冲池,需要从磁盘中读取数据页的次数
吞吐量或事务信息:
提交/回滚事务数,执行动态和静态语句次数,增删改查次数
( rows read / rows selected ) 是一个非常重要的性能指标,它表示为了检索一行数据需要读取多少行,该值越大,表示代价越高,需要的I/O越多,可调优的余地越大
事务日志信息:日志I/O在很大程度上会影响数据库整体的性能
6. 应用程序快照
在数据库快照中发现存在大量的逻辑读,通过应用程序快照可以细化到某条特定的语句
7. 表空间快照
在数据库快照中发现存在大量的逻辑读,通过表空间快照可以轻松地定位哪个表空间被频繁使用
8. 表快照
如果发现一个表的页数很少,但是读的行数非常多,那么可以合理地猜测该表在某些查询语句中可能处于NLJOIN的内部子节点
9. 动态SQL快照:SQL执行次数,总共读的行数,消耗的CPU,逻辑物理读数量,排序数量等

第三步 内存使用监控
1. db2pd -osinfo
系统内存使用情况
2. db2pd -dbptnmem
整个实例的内存使用情况
3. db2pd -memsets
内存段使用情况
在实例中会有多个不同的内存段,每一个内存段中可能有一个或者多个内存池
ipcs -a | grep 578814120 内存段映射到操作系统共享内存IPC段
FMP与trace内存段很少造成性能问题
4. db2pd -mempool
深入内存池信息
5. db2pd -db <dbname> -memsets / -mempool
数据库级别内存段和内存池信息

你可能感兴趣的:(性能,db2,分析)