1、informix1通常情况下,你只要执行dbschema d 数据库名称 文件名,就可以卸出全部建库脚本了。 全部参数的使用说明如下: dbschema -d dbname -t tabname -s user -p user -r rolename -f procname -hd tabname -ss filename -d 指定要访问的数据库名称(必选参数) filename 存放卸出脚本的文件名称(必选参数。如果无此参数,执行结果会显示在屏幕上) -t 列出指定表的信息,或者用“all”参数来列出所有表 -s 列出指定用户的“synonyms”同义字,或者用“all”来列出所有用户情况
2、(不常用) -ss 包含服务器上的特殊字符(卸载全数据库脚本的时候,如果安装了中文环境或者包含存储过程的时候,最好加上这个选项,否则有些东西会卸载不出来) -p 列出指定用户的“grant”授权情况,或者用“all”来列出所有用户情况(不常用) -r 列出指定角色的创建和授权情况,或者用“all”来列出所有角色情况 (不常用。SE不支持) -f 列出指定的存储过程,或者用“all”来列出所有存储过程 -hd (没用过,不知道这个参数是做什么的) 如何使用dbschema 工具卸出数据库的结构 例如: 1)导出数据库中所有的表结构到文件db.sql $dbschema -d your_datab
3、ase -t all db.sql 2)导出数据库中所有的存储过程到文件db.sql $dbschema -d your_database -f all db.sql 3)导出数据库中的所有对象(包含表,存储过程,触发器)到文件db.sql $dbschema -d your_database db.sql 4)导出数据库中一个表的结构到文件db.sql $dbschema -d your_database_name -t your_table_name db.sql 5)导出一个存储过程定义到文件db.sql $dbschema -d your_database_name -f your_p
4、rocedure_name db.sql 6)如果导出更多的表的信息(EXTENT.) $dbschema -d your_database_name -ss db.sql 7)导出数据库中对用户或角色的授权信息 $dbschema -d your_database_name -p all $dbschema -d your_database_name -r all 8)导出数据库中的同义词 $dbschema -d your_database_name -s all1onstat工具1.1监控虚拟处理器和线程onstatgath显示有关线程和处理器类的信息onstatgglo显出当前每个处理
5、器的信息以及有关每个处理器类的累积的统计信息onstatgioq使用onstatgioq可以确定你是否要分配附加的AIO虚拟处理器。监视AIOvp的gdf队列的长度,队列一贯短时表示对磁盘设备的处理速度与发生请求的速度一样快。如果gdf队列持续很长,考虑增加AIOvp的数目。onstatgwai显示等待状态的线程onstatgact显示活动状态的现场onstatgrea监视就绪队列中的线程onstatgsle显示睡眠状态的线程1.2操作系统进程与数据库session的关系1)使用操作系统命令(例如topas)查看最繁忙的oninit进程,记录它的pid2)用onstatgglo查看vpclas
6、s,看相应进程里运行的是那个vp(用pid去匹配)。确定瓶颈是在那一类vp上(比如是在cpuvp上还是在aiovp上)。记录vp,class。3)用onstatgact(或onstatgath)查看相应vp里运行的是那个线程(用vpclass去匹配),记录它的tid,rstcb。4)用onstatgsesses_id检查session信息(用tid,rstcb去匹配)下面的shell用于获得所有session信息!/usr/bin/ksh#Module:ses_all.sh#Author:HenryCheung#Description:Getallsessionginformation#His
7、tory#DateNameDescription.#07/30/2004HenryCheungStartProgram#onstat-gses|grep-vIBM|grep-vsession|grep-vid|awkprint$1|whilereadSES_IDdoonstat-gses$SES_IDdone1.3监控共享内存onstato捕获共享内存的静态快照用于今后的分析和比较onstatgseg显示每个共享内存段的信息。一般用于检查有几个虚拟内存段。如果虚拟内存段过多,考虑调整SHMVIRSIZE,和SHMADD参数。onstats获取锁存器的信息onstatp显示数据库活动的统计信息。
8、比如cached的读写命中率。如果读写命中率较低,考虑调整BUFFERS参数。ovuserthread-用户尝试超过用户最大线程最大的次数,ovbuff数据库服务器无法找到共享内存缓冲区的次数,1.4监视磁盘使用onstat-d检查数据库dbspace、chunk使用情况。配合topas等系统命令,监控是否某个物理硬盘出现I/O瓶颈。onstatgiof显示每个块的读取、写入的次数1.5其他方法: onstat目的:检查数据库服务器运行了多长时间,总共占用了多少内存。方法: onstatc或oncheckpr目的:检查数据库服务器当前使用的配置文件方法: onstatgenv目的:检查数据库服
9、务器当前使用的环境变量onstat-l检查逻辑日志情况。onstatm或vionline.log检查数据库日志,包括检查点完成时间,是否有异常等。onstatgses(sessionid),onstatgsql检查session状况方法: onstatu目的:显示库用户活动信息方法: onstatx目的:显示数据库服务器上的事务信息2oncheck工具方法: oncheck-cr目的:检查保留页方法: oncheckce目的:检查统空间使用情况方法: oncheckccdatabase目的:检查应用数据库的系统表方法: oncheckci,oncheck-cI目的:检查数据库的索引情况,注意此
10、命令会影响生产系统且耗时较长,应在适当的时候检查。方法: oncheckcd,oncheckcD目的:检查数据库的数据情况,注意此命令会影响生产系统且耗时较长,应在适当的时候检查。3使用SMI3.1dbspace使用情况-FileName:dbspaces.sql-dbspace使用情况:输入dbspacename,allocated,free,percentofusedunloadtodbs.txtdelimiterSELECTname1,15dbspace,SUM(chksize)allocated,SUM(nfree)free,ROUND(SUM(chksize)-SUM(nfree)/
11、SUM(chksize)*100)pcusedFROMsysmaster:sysdbspacesd,sysmaster:syschunkscWHEREd.dbsnum=c.dbsnumGROUPBY1ORDERBY4DESC及时监控dbspace的使用情况,以便分配新的空间给数据库使用3.2dbspaceI/O-FileName:dbs_io.sql-dbspace、chunkI/O:dbspacename,path,diskreads,diskwritesUNLOADTOdbs_io.txtDELIMITERSELECTfirst10d.name,fnamepath_name,SUM(pag
12、esread)diskreads,SUM(pageswritten)diskwritesFROMsysmaster:syschkioc,sysmaster:syschunksk,sysmaster:sysdbspacesdWHEREd.dbsnum=k.dbsnumANDk.chknum=c.chunknumGROUPBY1,2ORDERBY3DESC监视是否存在某个dbspaceI/O较高的情况,如果有就要考虑更为合理的数据分布和硬盘划分。3.3统计数据库占用的空间-FileName:database_size.sql-统计数据库占用的空间:dbspace,database_name,siz
13、eSELECTdbsname1,15database_name,SUM(pe_size)sizeFROMsysmaster:sysptnext,OUTERsysmaster:systabnamesWHEREpe_partnum=partnumGROUPBY1ORDERBY2DESC3.4表扩展块情况-FileName:extents.sql-获取系统中extents最多的表的表名,所在的数据库名,extents的数量-sysextents表9.2版本和9.4版本的结构有不同,但不影响本sql执行UNLOADTOextents.txtDELIMITERSELECTFIRST20t.dbsname
14、,t.tabname,count(*)FROMsysmaster:systabnamest,sysmaster:sysextentseWHEREt.dbsname=e.dbsnameANDt.tabname=e.tabnameANDt.tabname1,3!=sysGROUPBY1,2ORDERBY3DESC如果发现表的extents数量过多,就要考虑调整extents的大小,并且重建表。3.5表I/O-FileName:tab_io.sql-tableI/P:dbsname,tabname,diskreads,diskwrites,diskiosumUNLOADTOtab_io.txtDEL
15、IMITERSELECTfirst5dbsname,tabname,(isreads+pagreads)diskreads,(iswrites+pagwrites)diskwrites,(isreads+pagreads+iswrites+pagwrites)disk_ioFROMsysmaster:sysptprofWHEREtabname1,3!=sysORDERBY5DESC监视是否存在某张表I/O较高的情况,如果有就要考虑更为合理的数据分布和硬盘划分。3.6表空间的使用情况-FileName:tab_space.sql-表空间的使用情况:tablename,dbspace,alloca
16、ted_space,used_space,free_space-针对每个应用库UNLOADTOtab_used.txtDELIMITERSELECTFIRST10t.tabname1,20table_name,Cast(dbinfo(DBSPACE,t.partnum)aschar(10)dbspace,p.nptotalallocated_space,p.npusedused_space,(p.nptotal-p.npused)free_space,ROUND(p.npused/p.nptotal)*100)percent_usedFROMsysmaster:systabnamest,APP
17、DB:systablesa,sysmaster:sysptnhdrpWHEREa.partnum=p.partnumANDa.partnum=t.partnumANDtabid99GROUPBY1,2,3,4,5ORDERBY3DESC如果表空间分配的较多而使用的较少,就要考虑重建表。3.7索引层数-FileName:idx_lvl.sql-索引层:tablename,indexname,levels-应用库SELECTFIRST5t.tabname,i.idxname,i.levelsFROMAPPDB:systablest,APPDB:sysindexesiWHEREt.tabid=i.t
18、abidANDt.tabname1,3!=sysORDERBY3DESC当索引层数超过4层就要考虑是否需要重建索引。3.8索引唯一性-FileName:idx_unq.sql-索引唯一性:tablename,indexname,tablerows,indexunique,percentofunique-应用库-i.nunique/t.nrows有可能会除零,UNLOADTOidx_unq.txtDELIMITERSELECTFIRST10t.tabname,i.idxname,t.nrows,i.nuniqueFROMAPPDB:systablest,APPDB:sysindexesiWHER
19、Et.tabid=i.tabidANDt.tabid99ORDERBY3DESCSELECTFIRST10t.tabname,i.idxname,t.nrows,i.nunique,(i.nunique/t.nrows)*100pcniqFROMAPPDB:systablest,APPDB:sysindexesiWHEREt.tabid=i.tabidANDt.tabid99ORDERBY3DESC,5DESC索引唯一性的百分率越高,索引的唯一性就越高,性能就越好。为了避免因索引重复程度很高而引起的性能瓶颈,您可以使用复合索引来替换原来的索引,复合索引结合了重复程度很高的列与唯一性比较高的列。
20、3.9顺序扫描-FileName:seq_scans.sql-顺序扫描:databasename,tablename,numberofrows,totalsequencescans-应用库UNLOADTOseq_scans.txtDELIMITERSELECTFIRST10p.dbsname,p.tabname,t.nrows,sum(p.seqscans)tot_seqscansFROMsysmaster:sysptprofp,systablestWHEREp.dbsnameNOTLIKEsys%ANDp.dbsname=APPDBANDp.tabname=t.tabnameANDt.tab
21、nameNOTLIKEsys%GROUPBY1,2,3ORDERBY3DESC,4DESC如果一个具有几千甚至几百万行大表的顺序扫描数很高,那么您可能需要考虑向该表添加一些索引,或者考虑使用程序伪指令来强制内部查询优化器为访问该表中的数据选择索引而不是顺序扫描。3.10获取session信息可以从syssespro(各用户操作计数),syssesions(对每个已连接用户的描述)表中获取sessions信息。-FileName:sessions.sql-sessions信息:sessionid,username,hostname,access,locks,sequencescans,total
22、sorts,disksorts,percentofmemorysortsSELECTs.sid,s.username,s.hostname,(isreads+iswrites+bufreads+bufwrites+pagreads+pagwrites)access,locksheld,seqscans,total_sorts,dsksorts,(total_sorts-dsksorts)/total_sorts)*100pct_memsortsFROMsysmaster:syssessionss,sysmaster:syssesproffWHEREs.sid=f.sidORDERBY4如果一个
23、session有过多的顺序扫描,或占用过多的锁资源,或使用了较多的disksorts就需要关注这个session。3.11sessions持有lock的情况-FileName:lock.sql-sessions持有lock的情况:sid,username,hostname,databasename,tablename,locktypeSELECTowner,username,hostname,dbsname,tabname,typeFROMsysmaster:syssessionss,sysmaster:syslockslWHEREsid=ownerANDtabnameNOTLIKEsys%如
24、果在锁使用方面存在某些冲突,例如某个用户需要对已被别的用户锁定的表进行专有访问,那么您可以方便地确定该锁的所有者,并根据用户的优先级发出onmode-zsid命令来杀死会话,然后释放该锁;sid这个编号是从上面输出中的owner字段中获取的;请注意,只有用户“Informix”可以执行该命令。3.12锁信息-锁信息:数据库名,表名,该表占有互斥锁的个数-FileName:lock_count.sql-锁信息:数据库名,表名,该表占有互斥锁的个数SELECTFIRST10dbsname,tabname,COUNT(*)FROMsyslocksWHEREtypeLIKE%X%GROUPBY1,2O
25、RDERBY34性能瓶颈时应急方法4.1收集系统运行信息收集全面的系统运行信息,以便今后分析问题所在。使用onstata,onstatgall,并保留输出信息到文件中。保留online.log。如果数据库宕机有core文件生成,请保留core文件。4.2数据库宕机重启数据库保证关键业务运行。保留online.log,core文件。查看online.log,core文件,初步判断宕机原因,并于IMB技术支持联系。如果重启失败,考虑切换到备份机。4.3系统运行突然变慢,系统资源被占用过多4.3.1检查系统资源首先用topas,nmon,sar,vmstat,iostat等命令检查CPU,内存、硬盘资源的使用情况。topasTopasMonitorforhost:S1_C_HZ_SHUJUKUEVENTS/QUEUESFILE/TTYTueJul2713:01:262004Interval:2Cswitch1907Readch2750Syscall7513Writech581Kernel2.2|#|Reads21Rawin0User62.0|#
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1