Informix数据库日常维护脚本

检查各个dbspaces的空间使用状况: select name dbspace,sum(chksize) allocated,sum(nfree) free,round(((sum(chksize)-sum(nfree))/sum(chksize))*100)||"%" pcused form sysdbspaces d,syschunks c where d.dbsnum=c.dbsnum group by name order by 4 desc 剩余空间肯定是越大越好了 显示各个dbspaces的I/O状况: select d.name,fname path_name,sum(pagesread) diskreads,sum(pageswritten) diskwrites from syschkio c,syschunks k,sysdbspaces d where d.dbsnum=k.dbsnum and k.chknum=c.chunknum group by 1,2 order by 3 desc 根据各个dbspaces的I/O来调整表的布局,使整个系统I/O均衡 检查哪个表具有最多的磁盘I/0: select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites from sysptprof order by 3 desc,4 desc 同上。 检查表的extent的分布状况: select t.tabname, count(*) num_ext from sysextents e, npmdb:systables t where e.tabname=t.tabname and dbsname = "npmdb" and t.tabname not like "sys%" group by 1 having count(*) > 1 order by 2 desc 表的extent建议最大不超过30个,如果太大,就需要重建表修改extent size的大小从而修改extent的数量 检查表中索引的层数(越少越好): select idxname, levels from sysindexes order by 2 desc 检查命中率不高的索引(nrows和unique越接近越好): select tabname, idxname, nrows, nunique from systables t, sysindexes I where t.tabid =i.tabid and t.tabid > 99 and nrows > 0 and nunique > 0 当索引的效率不高的时候,需要根据实际情况修改 看数据库里面那些表的碎片比较多(碎片小比较好) select dbsname , tabname ,count(*), sum(size) from sysextents group by 1,2 order by 3 desc; 表和索引的读写情况,(考查那个数据库实体读写比较多) select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites from sysptprof order by 3 desc, 4 desc 那些表的锁竞争比较厉害(越小越好) select a.tabname,nrows,lockwts,deadlks from sysmaster:sysptprof a,systables b where a.tabname=b.tabname and lockwts>0 and a.dbsname = name and b.tabid >= 100 order by tabname; 表的顺序扫描数(OLTP系统的话,大表的顺序扫描数越小越好) select a.tabname,nrows,seqscans from sysmaster:sysptprof a,systables b where a.tabname=b.tabname and seqscans>0 and a.dbsname = '库名' and b.tabid>=100 order by tabname; 查看informix数据库表占用空间大小情况: 在sysmaster数据库中查询表systabnames,sysptnext。其中systabnames.partnum=sysptnext.pe_partnum.执行以下sql: select tabname,sum(pe_size) from systabnames,sysptnext where partnum=pe_partnum and tabname='table_name'--(table_name为要查询的表名) group by tabname (注:查询结果中pe_size的值,单位IBM是4k,HP-UX是2k) 用onstat查是那个线程在干的,然后再分析。 我是用onstat -u查看到锁数的。 用onstat -g ses 找出session id 再用onstat -g sql session id查看它在做什么。 update statistics for table temp_user;

你可能感兴趣的:(日常积累)