Most CPU SQL
检查点 | 捕获消耗CPU最多的SQL语句 |
方法 | select first 5 sqx_estcost,sqx_estrows,sqx_sqlstatement from sysmaster:syssqexplain order by sqx_estcost desc |
Most Buffread Tables
检查点 | 捕获消耗最多buffer read 的表 |
方法 | Dbaccess sysmaster select tabname,sum(pf_bfcread) as buffreads from sysactptnhdr,systabnames Where pf_bfcread > 0 and systabnames.partnum = sysactptnhdr.partnum and dbsname = "dbname" group by tabname order by buffreads desc; |
Buffer Spin Contention
检查点 | 找到buffer spin争用的情况 |
方法 | onstat -g spi|sort -nr |head |
Sort on Disk
检查点 | 是否有过多的磁盘排序 |
方法 | A.查看session排序的情况 dbaccess sysmaster select sid,total_sorts,dsksorts,max_sortdiskspace from syssesprof order by 3 desc; B.查看整个排序情况是否有磁盘排序 dbaccess sysmaster Select * from sysprofile where name matches "*sort*" order by 3 desc; SELECT trim(n.dbsname) type, trim(n.owner) users, trim(n.tabname) table, trim(dbinfo('DBSPACE', i.ti_partnum)) dbspace, round(i.ti_nptotal*4,0) kb -- 4 for AIX, 2 for HP-UX FROM sysmaster:systabnames n, sysmaster:systabinfo i WHERE (sysmaster:bitval(i.ti_flags, 32) = 1 OR sysmaster:bitval(i.ti_flags, 64) = 1 OR sysmaster:bitval(i.ti_flags, 128) = 1) AND i.ti_partnum = n.partnum ;
|
操作系统参数
检查点 | 检查OS参数是否正确 |
方法 | SEMMNS NFILES |
总结
正确配置数据库各项参数,及时运行update statistics, 经常查看online.log发现重要错误信息。监控数据库各项性能运行情况,为数据库优化提供基础参考信息。
通过健康度检查,可以帮助企业检测系统应用情况和知识管理方法论的掌握情况。基于评估结论,企业可以识别存在的问题和隐患
收起Large tables
检查点 | 数据量特别大的表,考虑采用fragment |
方法 | Select tabname,nrows, (npused*pagesize)/1024/1024 used_space_m from systables where nrows> 1000000 order by 2 desc; select dbsname, dbinfo('UTC_TO_DATETIME',ti_created) , tabname, ti_nextns, ti_nptotal, ti_npused, ti_npdata, ti_nrows, ti_rowsize from systabnames, systabinfo where partnum = ti_partnum and tabname not like 'sys%' and dbsname not like 'sys%' And ti_nrows > 1000000; |
Extents over tables
检查点 | 超过50 extents的表 |
方法 | select t.tabname tabname, count(*) extent_num, max(t.nrows) rows from sysmaster:sysextents e, systables t where e.tabname=t.tabname and t.tabname not like "sys%" group by 1 having count(*) > 50 order by 2 desc; |
Level over indexes
检查点 | 索引层超过4层的表 |
方法 | select t.tabname,i.idxname, i.levels from sysindexes i,systables t where i.tabid = t.tabid and i.levels>=4 order by 3 desc |
Sequence scan tables
检查点 | 顺序扫描的表及扫描次数 |
方法 | select p.dbsname , t.tabname , sum(p.seqscans) seqscans , max(t.nrows) nrows from sysmaster:sysptprof p , systables t where p.tabname = t.tabname and t.nrows > 100 and p.seqscans>0 and p.dbsname not like "sys%" and p.tabname not like "sys%" group by 1,2 order by 3 desc select first 10 p.tabname::char(20) tabname,t.nrows,p.seqscans from sysmaster:sysptprof p, utilitydb:systables t where p.tabname=t.tabname and p.dbsname='utilitydb' and t.tabid >99 and p.seqscans > 0 order by p.seqscans desc; |
DBSpace I/O
检查点 | Dbspace I/O 情况 衡量磁盘读和磁盘写 |
方法 | select d.name dbspace, fname[1,125] chunk_name, sum(pagesread) diskreads, sum(pageswritten) diskwrites, sum(pagesread)+sum(pageswritten) disk_rwes from sysmaster:syschkio c, sysmaster:syschunks k, sysmaster:sysdbspaces d where d.dbsnum = k.dbsnum and k.chknum = c.chunknum --# c.chknum group by 1, 2 order by 5 desc; onstat -D onstat -g iof |
Most I/O tables
检查点 | I/O最多的表 |
方法 | select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites, (isreads + pagreads)+ (iswrites + pagwrites) disk_rsws from sysmaster:sysptprof where tabname not like 'sys%' and dbsname not like 'sys%' order by 5 desc |
Read Ahead
检查点 | RA_PAGES & RA_THRESHOLD 参数配置 |
方法 | 查看onconfig参数文件 |
运行情况 | RA_PAGES 64 RA_THRESHOLD 60 |
Most Resource SQL
检查点 | 监控消耗当前消耗最多资源的SQL |
方法 | select username, syssesprof.sid, lockreqs, lockwts, deadlks, lktouts, logrecs, isreads, iswrites, isrewrites, isdeletes, iscommits, isrollbacks, longtxs, bufreads, bufwrites, seqscans, pagreads, pagwrites, total_sorts, dsksorts, max_sortdiskspace, logspused from syssesprof, syssessions where syssesprof.sid = syssessions.sid order by bufreads desc;--根据需要按照不同的资源进行排序 onstat -g ses sid |
等待事件
检查点 | SESSION等待事件 |
方法 | select username, sid, is_wlatch, -- blocked waiting on a latch is_wlock, -- blocked waiting on a locked record or table is_wbuff, -- blocked waiting on a buffer is_wckpt, -- blocked waiting on a checkpoint is_incrit -- session is in a critical section of -- transaction (e.g writing to disk) from syssessions Where is_wlatch+ is_wlock+ is_wbuff+ is_wckpt>0 order by username; onstat -g ses sid |
检查点 | 检查数据与索引 |
方法 | A. 验证表数据页:oncheck -cD B. 验证索引:oncheck -cI |
运行情况 | 检查输出结果中是否有错误和警告类信息 |
健康状况评估 | oncheck -cD 命令。 如果数据页确认检测到错误,则尝试从指定表卸装数据、删除表、重新创建表以及重新装入数据。如果该过程不成功,请从存储空间备份执行数据恢复。 oncheck -cI 命令 要确认数据库中每个表上的索引,如果该命令检测到错误,则删除并重新创建受影响的索引。 |
Instance Profile
检查点 | 数据库实例概要信息 |
方法 | onstat -p |
Current Active SQL
检查点 | 当前正在运行的SQL情况 |
方法 | onstat -g sql onstat -g ses onstat -g sql #sid onstat -g ses #sid onstat -g stm |
Checkpoint
检查点 | Checkpoint次数及时长 检查点是使磁盘上的页与共享内存缓冲池中的页同步的过程。在检查点期间,IDS 阻止用户线程进入临界会话,并阻止所有的事务活动。因此,如果检查点持续时间过长,那么用户可能会经历系统挂起。在存在几千个事务并且响应时间至关重要的 OLTP 环境中,情况尤其如此。 |
方法 | grep Checkpoint online.log |
Long Transaction
检查点 | Long Transaction发生的次数及相应的事务 |
方法 | online.log 监控当前长事务:onstat |
Lock
检查点 | Lock发生的次数及相应的事务 |
方法 | A.Onstat -g ppf 监控当锁与死锁事务:onstat -g ppt B.dbaccess sysmaster select dbsname,tabname, sum(pf_rqlock) as locks, sum(pf_wtlock) as lockwaits, sum(pf_deadlk) as deadlocks from sysactptnhdr,systabnames where pf_wtlock > 0 and systabnames.partnum = sysactptnhdr.partnum --and dbsname = "dbname" group by dbsname,tabname order by lockwaits desc; |
Blocking Lock
检查点 | 当前发生blocking lock的情况 |
方法 | Dbaccess sysmaster Select t2.dbsname database, t5.sid sessionID,t8.txt type,t2.tabname tablename, T4.sid lock_sess,t5.username lock_user,t6.sid wait_sess,t1.rowidr row_id,t1.keynum From syslcktab t1,systabnames t2,systxptab t3,sysrstcb t4, sysscblst t5,sysrstcb t6,sysscblst t7,flags_text t8 Where t1.owner=t3.address and t1.partnum=t2.partnum And t3.owner=t4.address and t1.wtlist=t6.address And t4.sid=t5.sid and t8.tabname='syslcktab' And t8.flags=t1.type and t6.sid=t7.sid; Select t2.dbsname database, t5.sid sessionID,t8.txt type,t2.tabname tablename, T4.sid lock_sess,t5.username lock_user,t6.sid wait_sess,t1.rowidr row_id,t1.keynum, t9.sqs_statement From syslcktab t1,systabnames t2,systxptab t3,sysrstcb t4, sysscblst t5,sysrstcb t6,sysscblst t7,flags_text t8, syssqlstat t9 Where t1.owner=t3.address and t1.partnum=t2.partnum And t3.owner=t4.address and t1.wtlist=t6.address And t4.sid=t5.sid and t8.tabname='syslcktab' And t8.flags=t1.type and t6.sid=t7.sid and t5.sid=t9.sqs_sessionid |
运行情况 | database sessionid type tablename lock_sess l ock_user wait_sess row_id keynum demodb 145 IX test_lock 145 informix 146 1 1 |
Larger SQL
检查点 | 改进返回数据量大的SQL语句的性能 |
方法 | setenv FET_BUF_SIZE 32767 |
运行情况 | 对于返回大数据的应用,如报表,可以设置该环境变量,提高数据返回速度。 |
磁盘空间
检查点 | 磁盘空间- dbspace which exceed 90% |
方法 | select name dbspace, sum(chksize) allocated, sum(nfree) free, round(((sum(chksize) - sum(nfree))/sum(chksize))*100,2) pcused from sysmaster:sysdbspaces d, sysmaster:syschunks c where d.dbsnum = c.dbsnum group by name order by 4 desc,name; |
磁盘chunk状态
检查点 | Chunk状态 |
方法 | onstat -d |
临时表空间
检查点 | 临时表空间Temporary dbspace |
方法 | 查看onconfig参数DBSPACETEMP或环境变量DBSPACETEMP onstat -d |
临时表
检查点 | 临时表temp table |
方法 | dbaccess sysmaster select dbsname,tabname from sysptprof, sysdbspaces where dbsnum = trunc(partnum/1048576) and name like 'tmpdbs%' order by 1 |
运行情况 | dbsname demodb tabname tmp_1 name tmpdbs02 |
逻辑日志
检查点 | 逻辑日志 (Logical Logs) |
方法 | onstat -l |
物理日志
检查点 | 物理日志 (Physical logs) |
方法 | onconfig参数 onstat -l |
运行情况 | A. onconfig: B. onstat -l: Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 31 64 535 9 59.44 phybegin physize phypos phyused %used 2:53 999500 511064 543 0.05 |
备份与恢复
检查点 | Backup and Restore |
方法 | ontape,onbar |
运行情况 | 确认数据库最近一次0级备份的时间,是否可以用来恢复。确认1,2级备份的情况。在系统需要备份逻辑日志的情况下,备份的逻辑日志是否可用 使用onstat -g arc查看表空间最近一次备份的时间点 |
Update Statistics
检查点 | 表统计信息更新情况 |
方法 | 检查系统表与统计信息确定哪些表需要进行统计更新。 对比A、B的输出数据: Sqlfile.sql Select count(*) from manufact; Select count(*) from stock Select count(*) from customer; Select count(*) from cust_calls; A.dbaccess -e demodb sqlfile.sql B. select tabname,nrows from systables where tabid >99 |
oncheck
检查点 | 检查系统关键区信息 |
方法 | A. 验证系统目录表:oncheck -cc B. 验证保留页:oncheck -cr C. 打印系统保留页:oncheck -pr |
运行情况 | 检查输出结果中是否有错误和警告类信息 |
CPU相关
检查点 | CPU 利用率(idle) |
方法 | top,sar Solaris ps –aux |
检查点 | CPU VP 运行情况 |
方法 | onstat -g glo |
内存利用率
检查点 | 系统内存空间、空闲内存空间 |
方法 | Top |
数据库内存使用情况
检查点 | 数据库内存使用情况 |
方法 | onstat -g seg |
rootdbs
检查点 | 监控在rootdbs表空间上是否创建了业务数据库及表 |
方法 | dbaccess sysmaster select distinct t.dbsname database, d.name dbspace, t.tabname from sysdbstab d,syschunks c,sysextents t where t.chunk = c.chknum and c.dbsnum=d.dbsnum and t.dbsname not like 'sys%' and t.dbsname != 'onpload' and t.tabname not like 'sys%' and d.name = 'rootdbs' |
系统I/O
检查点 | 用iostat监视I/O子系统情况 |
方法 | iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ] 其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。 iostat 2 10 |
数据库写类型
检查点 | 数据库写操作类型 |
方法 | onstat -F |
网络连接数
检查点 | 网络连接数 |
方法 | onstat -g ntu |
网络连接失败情况
检查点 | 网络连接失败情况 |
方法 | onstat -g ntd |
NETTYPE参数
检查点 | NETTYPE参数设置 |
方法 | 查看onconfig参数文件 |
Error严重错误
检查点 | Error : 严重错误导致系统崩溃 |
方法 | 查看online.log grep Error online.log|wc -l grep Error online.log grep Thread online.log |
Warning
检查点 | Warning |
方法 | 查看online.log grep Warning online.log|wc -l grep Warning online.log |
informix数据库没有像oracle那样的AWK工具,来生成数据库性能报告。
informix主要通过onstat命令查看数据库性能:
CPU高:onstat -u|grep -E "PX|PR" |awk '{print "onstat -g ses "$3}'|sh
查看系统当前运行的SQL,重复率高的SQL要特别分析。很多时候由索引错误或全表扫描引起。
虚拟内存高:虚拟内存使用率高是V段分配过多,需要分析初始V段大小和每次分配的V段大小:onstat -g seg查看。V段的使用一般是session连接数过多,可以通过命令:onstat -g ses |sort -nrk 8 |more 查看消耗内存多的session。
CKPT:ckpt的时间一般在10s以内是正常的。如果ckpt过高,可以查看onstat -g ckp中 磁盘刷新页数/s(Dskflu)。dskflu平均为8千页每秒(和I/O有关),如果刷新太少,说明I/O有竞争。业务忙的时候,这个是最烦人的。
收起