informix常用知识

上传人:伴*** 文档编号:243097910 上传时间:2024-09-15 格式:PPT 页数:55 大小:837.50KB
返回 下载 相关 举报
informix常用知识_第1页
第1页 / 共55页
informix常用知识_第2页
第2页 / 共55页
informix常用知识_第3页
第3页 / 共55页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,INFORMIX,常用知识,软件中心软件开发二科,INFORMIX,原理和结构,环境变量,连接类型和通信协议,数据库状态及启停,日常中常用的命令工具,数据库物理存储关系,怎么增加,dbspace?,Extent,分片,监控,优化,复制,INFORMIX,原理和结构,INFORMIX-OnLine,动态服务器是,INFORMIX,的强大的多线程数据库服务器,其设计目的在于发挥对称多处理器(,SMP,)和单处理器结构的能力,以实现在数据库可伸缩性、可管理性和性能等方面的突破。,OnLine,动态服务提供最有效的并行数据库结构,以在管理日益增大和复杂化的数据库的同时帮助改善整个系统的性能和可伸缩性。,OnLine,动态服务器提供高级事务处理,通过新的并行数据查询(,PDQ,)技术而达到最优的决策支持、高可用性、数据完整性、大型主机能力的系统管理、图形化的监控工具、以及多媒体的能力,所有这些都集成在一个器的核心技术基于,INFORMIX,的动态可伸缩结构,其目的在于客户,/,服务器就绪的软件包中。,OnLine,动态服务器支持,INFORMIX,所有基于,SQL,的应用开发工具以及许多第三方工具,并可以在许多基于,UNIX,的单机或网络环境下的计算机系统上运行。,系统结构,INFORMIX,动态服务器采用的是一种多线程体系结构,动态服务器系统由三个主要组件构成:共享内存、进程和磁盘,共享内存:缓存、内存池、会话(,session,)、消息缓冲区,进程:被称为虚处理器,(VP,,,Virtual Processors),每一个,VP,隶属于某一虚处理器类。,磁盘:由多个原始磁盘空间组成,称为,chunk,。,Chunk,以页(,page,)为基本单位。多个,chunk,集合逻辑上构成了数据空间(,dbspace,)。数据空间用于存储数据库、表、根以及物理日志和逻辑日志。一个数据空间至少包括一个,chunk,。,环境变量,export,INFORMIXDIR=/informix #,设置,IBM Informix,产品的安装目录,export,INFORMIXSERVER=online10 #,设置,DBSERVERDBNAME,或,DBSERVERALIASES,配置参数的值,export PATH=$INFORMIXDIR/bin:$PATH,export,ONCONFIG=onconfig #,配置文件,在,$INFORMIXDIR/etc/onconfig,连接类型和通信协议,Vi $INFORMIXDIR/etc/sqlhosts,dbservername nettype hostname servicename,online10 onipcshm 220.220.220.29 6664,online10 ontlitcp 220.220.220.29 6664,online10 onsoctcp 220.220.220.29 6664,Nettype,说明,on - Dynamic Server,se - Standard Engine,ipc - IPC connection,tli - TLI connection,soc - socket connection,shm - Shared memory,str - Stream pipes,tcp - TCP/IP protocol,spx - IPX/SPX protocol,配置,数据库状态及启停,一、数据库状态查看,onstat -,启动状态,: IBM Informix Dynamic Server Version 11.50.FC6 -,On-Line,- Up 17 days 02:24:38 - 3700976 Kbytes,停用状态,: shared memory not initialized for INFORMIXSERVER online10,状态,说明,Offline,实例停止;软件没有在运行,Fast-Recovery,实例正在启动,正在从停止状态进入一个一致的状态,Quiescent,实例已经启动,但是用户不能连接;不能运行,SQL,Administrative,实例已经启动;只有,Admin,用户可以连接并运行,SQL,。也称为,single-user,模式,On-Line,正常运行状态;所有用户都可以连接并运行,SQL,Shutting-down,实例正在停止;用户不能连接;不能运行,SQL,二、启动数据库,oninit,oninit,命令只用于启动实例,oninit,命令只能在实例处于停止(,offline,)状态时使用。如果实例处于任何其他状态,那么执行,oninit,命令完全没作用。,选项,说明,-i,初始化磁盘空间。这有点像硬盘格式化,只应该在第一次启动实例时使用,-y,对所有问题自动地回答 “,yes”,-j,以,Administrative,模式启动实例。也称为,single-user,模式,-v,“详细” 模式;在启动时向,stdout,输出更多消息,-s,以,quiescent,模式启动实例,三、停止数据库,onmode -ky,onmode,命令用于停止实例和其他许多工作,onmode,命令可以改变实例的状态、动态地修改,onconfig,文件中的一些参数、增加和释放内存、配置,B-tree,扫描器、配置,HDR,和,Mach11,特性、实施检查点等。,选项,说明,-m,让实例从,single-user,或,quiescent,状态转到,on-line,状态,-s,执行平稳 关机,让实例从,single-user,或,on-line,状态转到,quiescent,状态,-j,只对非管理员用户执行立即 关机,让实例从,quiescent,或,on-line,状态转到,single-user,状态,-u,执行立即 关机,让实例从,single-user,或,on-line,状态转到,quiescent,状态,-k,执行立即 关机,让实例从任何其他状态转到,off-line,状态,-y,对所有问题自动地回答 “,yes”,日常中常用的工具,一、数据的备份恢复(,ontape,、,dbexport,、,dbimport,),这两种方法的区别是,1). ontape,产生的是二进制流的数据,只能用于本系统的恢复或是二进制兼容的系统上的恢复;,dbexport,产生的是,ASCII,数据,可以用于非二进制兼容的系统上的恢复 ;,2).ontape,含有,IDS,的系统信息,而,dbexport,不含有,IDS,的系统信息,只含有数据库,表及数据信息,;,3).,在数据量较大的情况下,,ontape,比,dbimport,恢复较快;,4).dbexport,出来的文件的大小受到,OS,文件的大小的限制,ontape -s :,对数据的备份,按提示输入本次备份的级数,(0,级,,1,级,,2,级,),0,级备份是整个,ONLINE,的备份,1,级备份是在,0,级基础上所有修改部分的内容的备份,2,级备份是在,0,级或,1,级的基础上所有修改部分的内容的备份,ontape -a :,对逻辑日志的备份,(,自动方式,),ontape -c :,对逻辑日志的备份,(,连续方式,),ontape -r :,对备份的恢复,按提示依次恢复数据备份,(0,级,,1,级,,2,级,),和逻辑日志备份,Dbexport,卸载出,ascii,文件数据库,例子,:,dbexport cbsbg,(,做这个之前确保没有别的用户在使用数据库。,),dbimport,用于将一,ascii,文件装入一个数据库,例子,:,dbimport d datadbs cbsbg,(,做这个之前先要删除原来的库。,),注意带,d datadbs,,不然默认导入到,rootdbs,二、,dbschema,获取表模式,例子,: dbschema d cbsbg t aapf10 ss aapf10.sql,三 、导出和导入表数据,SQL,语句,UNLOAD,和,LOAD,例如,要从数据库,db1,的表,t1,导出数据,可用使用以下命令:,unload to my.dat select * from t1;,要将文件中的数据装载到数据库,db1,的表,t1,中,仅需在,db1,中运行以下命令:,load from my.dat insert into t1;,unload to my.dat delimiter $ select * from t1;,load from my.dat delimiter $ insert into t1;,数据库物理存储关系,dbspace:,是一组,chunk,的逻辑集合,chunk:,一个单位的物理磁盘空间。一个,chunk,由,path,offset,size,三部分组成。因此我们在使用,onspaces,命令来加,chunk,的时候这三个参数是必不可少的。,page:,是一最基本的,I/O,单位。一个,page,的大小是由,OS,来决定的,有,2K/4K/8K/16K,extent:,是磁盘上连续,page,的一组 集合,onstat -d,怎么增加,dbspace?,1,、,lsvg datavg #,查看,PP,大小,2,、,smit lvm #,增加,lvm,3,、,cd /dev,chown informix:informix *rdatadbs01* #,更改属组,3,、,su informix,cd data,ln s /dev/rdatadbs01 datadbs01 #,链接,dbs,4,、,onmonitor,进去增加或者执行命令,onspaces-c-d datadbs,-p/informix/data/datadbs01,-o0,-s100000,extent,extendsize,指定的数据大小的大小为创建该表的初始空间的大小(单位为,kbyte)nextsize,指定的数据大小的大小为当该表的初始空间使用完毕后数据库表需要向数据空间申请空间大小的初始值,当创建表没有具体指定,extend size,和,next sixe,的值时,,extend size,和,next size,的缺省值都为,16kbyte,,,即初始空间和初始新增空间的大小为,16k,。,申请空间的大小,=,初始新增空间的大小*,2,(申请空间的次数,/ 16,),create table cbsbg.aapf30,(,aa30dpnoa char(11),aa30dpnok char(11),aa30acid integer,aa30date char(8),aa30seq integer,aa30brief char(3),aa30abst char(52),aa30crdcls char(4),aa30crdno char(20),aa30dc char(1),aa30amt decimal(16,2),aa30bal decimal(16,2),aa30acno char(32),aa30dpno char(11),aa30stan integer,aa30trcod char(4),aa30oprr char(10),aa30oprc char(10),aa30attr char(5),aa30enseq integer,aa30page integer,),fragment by expression,(MONTH (aa30date ) = 1 ) in datadbs01, (MONTH (aa30date ) = 2 ) in datadbs02, (MONTH (aa30date ) = 3 ) in datadbs03, (MONTH (aa30date ) = 4 ) in datadbs04, (MONTH (aa30date ) = 5 ) in datadbs05, (MONTH (aa30date ) = 6 ) in datadbs06, (MONTH (aa30date ) = 7 ) in datadbs07, (MONTH (aa30date ) = 8 ) in datadbs08, (MONTH (aa30date ) = 9 ) in datadbs09, (MONTH (aa30date ) = 10 ) in datadbs10, (MONTH (aa30date ) = 11 ) in datadbs11, (MONTH (aa30date ) = 12 ) in datadbs12,extent size 500000 next size 500000 lock mode row;,分片,“数据分片”允许在表一级对数据存储进行控制。“表分片”是,INFORMIX,数据库的一个特征。用户可以对表中的记录或索引进行分组,并且存储在不同的位置,这样可以将数据存储到多个磁盘上,从而减少对磁盘,I/O,的竞争。,数据分片有两种基本类型:基于轮转分片“和 ”基于表达式分片”,对于“基于轮转法分片”,正如其名字一样,数据是根据轮转法方式存入表中的。“基于表达式分片”则根据表中的一个或多个字段对分片的规则进行定义。一般在预知查询条件时采用这种方式,从而避免查询中对某些分片的扫描。,轮转法(,PR),所使用的分片规则,CREATE TABLE xyz FRAGMENT BY ROUND ROBIN,IN dbspace1,dbspace2.dbspaceN,基于范围表达式分片方案,CREATE TABLE xyz (aa integer.),FRAGMENT BY EXPRESSION,aa;1000 AND aa4;,sql_statement:,监控到的语句,sql_stmtname:,语句类型,如,INSERT/SELECT/UPDATE/DELETE,等,sql_totaltime:,语句执行时间,3.,关闭系统跟踪,Dbaccess sysadmin -,EXECUTE FUNCTION task(set sql tracing off);,注:虽然,INFORMIX,的数据库的全局监控对于整个系统的影响只有,5%,,比其他数据库都要小的多,但是还是一定要记得,每次打开监控之后,务必进行关闭操作。,表空间,dbaccess sysmaster;,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;,找出超过,90%,的表空间,表占用空间情况,dbaccess sysmaster;,select rpad(tabname, (select max(length(tabname),from systables), ),npused * 2/1024 npused,from systables,where tabid 99 and tabname not like tmp%,order by 2 desc,超过,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;,如果除了大型分段表以外,表的扩展块超过了,50,个,那么您应该考,虑重新构建这些表以合并扩展块。通过指定表的,extent size,和,next,size,调整重建表来减少,extent,数量。同时我们还需要根据表的记录数,来判断表的,extent,设置的问题。,通过如下,SQL,获取每个表占用的,extent,数及空间大小,以便根据表,数据量进一步判断,extent,是否合理:,select dbsname, tabname, count(*) num_of_extents, sum( pe_size ) total_size,from sysmaster:systabnames, sysmaster:sysptnext,where partnum = pe_partnum,and dbsname=demodb,and tabname not like sys%,group by 1, 2,索引层超过,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,超过,4,层的索引需要重建,如果索引超过,4,层,请分析表是否已经分片,另外可以通过,8k,或者,16K pagesize,来减少,顺序扫描的表及扫描次数,语句,1,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.seqscans0,and p.dbsname not like sys% and p.tabname not like sys%,group by 1,2,order by 3 desc,从输出结果找出那些表的顺序扫描数很高。如果它是一个具有几千甚,至几百万行的大表,那么您可能需要考虑向该表添加一些索引,或者,考虑使用程序伪指令来强制内部查询优化器为访问该表中的数据选,择索引而不是顺序扫描。,语句,2,select first 5 t.tabname,dbsname,nrows*rowsize*p.seqscans costs,p.seqscans,nrows,from sysmaster:sysptprof p,systables t,sysmaster:sysprofile s,where p.tabname=t.tabname,and p.seqscanss.value/50,and s.name=seqscans,and nrows2000,order by 3 desc,DBSpace I/O,select d.name dbspace, fname1,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,我们的目标是要使所有的,dbspace,都有平衡的磁盘读写操作。在大多数情况下,这是不现实的,但上面的输出至少让您对,dbspace I/O,的分配方式有了一个概念,可以帮助您标识“最热门的”,dbspace ,那些磁盘读写最多的,dbspace,。如果有些,dbspace,的磁盘读写操作,相当繁忙而另外一些的读写操作则相当空闲,那么您可能需要为,Informix,引擎调整甚至重新安排物理磁盘布局。我们可以使用,onstat,-D,和,onstat -g ioq,获得类似的信息,前者显示各个块的磁盘读和写,而后者显示磁盘,I/O,等待队列信息。(重启后从新计数),onstat -g iof,打印异步,I/O,块,(chunk),或文件的统计数据。例如,我们可能会认为,demodbchk,得到了太多的活动。,如果一个繁忙的数据库占用,demodbchk,块,我们应考虑迁移此数据库中某些表,分散部分表到其他的活动块。,如果一个繁忙的表占用,demodbchk,块,我们应考虑分裂表,(Fragmentation),和分散到其他的活动块,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,可以根据输出得出哪些表有较大的,I/O,,也是我们需要重点优化的表。,根据从这个查询获得的输出,您可能需要在,dbspace,间移动一些表,以使磁盘,I/O,平衡得更好。(重启后从新计数),Most CPU SQL,捕获消耗,CPU,最多的,SQL,语句,select first 10 sqx_estcost,sqx_estrows,sqx_sqlstatement,from sysmaster:syssqexplain,order by sqx_estcost desc,技巧:,由于该方法只能捕获到当前活动,SQL,的,CPU,消耗情况。我们需要多次捕获不同,时间段的,SQL,。,查找表锁语句,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;,Informix,数据库锁表处理,综合业务系统柜员在日终或平时出现锁表导致业务不能进行,,(,比如表外处理时死锁,表名,:blankvouchuse),则操作如下:,1,以,informix,用户登陆服务器,,dbaccess,选择数据库,bias_dbs,Select * from systables where tabname =,锁表的表名,记录下字段,partnum,的值,通过计算器,把该值从,10,进制变成,16,进制。,2.,退出,dbaccess,到,$,下,输入命令:,onstat k,查找显示的,tblsnum,的值与,partnum,相符的记录,记下,owner,的值。,3.onstat u ,找到,usethread,与,owner,的值相符的记录,找到,ssessid.,4.onmode z ssessid,,杀掉死锁的进程。,优化,性能规划:深入了解应用与数据库的交互特征,确立良好的设计、开发、测试迭代过程,上线前消除模型上的性能瓶颈。,实例调优:建立性能基准,对比调节数据库、操作系统、存储、网络等的配置,主动监控、消除瓶颈。,SQL,调优:书写高效,SQL,,优化相关数据库对象,充分借助优化器,确定最佳执行计划。,性能优化流程,首先执行下面的初始检查:,获取直接用户的使用反馈,确定性能目标和范围。,获取性能表现好与坏时的操作系统、数据库、应用统计信息。,对数据库做一次全面健康检查。,根据收集的信息,以及对应用特性的了解,构建性能概念模型,明确性能瓶颈所在,以及导致性能的根本原因。,首先应该排除操作系统、硬件资源造成的瓶颈。,然后针对数据库系统性能进行分析,必要时,还需要检查应用日志,因为系统性能问题也可能由于应用非,SQL,部分造成瓶颈。,提出一系列针对的优化措施,并根据它们对性能改善的重要程度排序,然后逐一加以实施。不要一次执行所有的优化措施,必须逐条尝试,逐步对比。,通过获取直接用户的反馈验证调节是否已经产生预期的效果,否则,需要重新提炼性能概念模型,直到对应用特性了解进一步准确。,重复上述,直到性能达到目标或由于客观约束无法进一步优化。,典型性能问题案例,案例,1,:数据库应用突然变慢,问题特征,数据库应用突然变慢,查看系统信息,发现,CPU,空闲突然很低,,IO,性能没有明显恶化。,处理步骤,首先,需要排除操作系统上其他应用程序的问题。通过,top(HP)/topas(AIX/Linux),命令可以看到当前占用,CPU,资源最多的进程,确认是,oninit,进程。,Solaris,上默认没有,top,命令,可以通过,/usr/ucb/ps aux | more,的方式来查看,该输出是根据,CPU,占用情况来排序的。,数据库进程占用了大量,CPU,资源时,往往是在对大表在做全表扫描。通过,4.1,中的办法初步确认问题,SQL,后,如果是条件查询,SQL,,如带,WHERE,条件的,SELECT /UPDATE /DELETE,,还可以通过得到具体的,SQL,查询计划来确认是在进行全表扫描。此时需要对比,dbschema,得到的建表脚本,看是否建立了相应的索引,如果没有合适的索引,应该创建;如果应用没有合理应用已有索引,应该考虑修改应用,SQL,。如果表上有合适的索引,应用,SQL,也没有问题,那么就有可能是由于表中数据已经变化较大而长时间未对表收集统计信息,造成数据库引擎选择了错误的查询计划。此时应该对该表收集统计信息后,通常可以收到良好的效果。,有时候问题,SQL,还会是,INSERT,语句,此时通常需要查看表的建表脚本,看看表上是否有过多的索引,是否该表上有不适当的外键指向另一个大表,也可以通过适当删除表中的记录来实现优化。,案例,2,:检查点持续时间突然显著增加,问题特征,数据库应用突然变慢,查看系统信息,发现,CPU,空闲突然很低,,IO,性能明显恶化。和问题,1,的显著不同在于,此时,IO,恶化现象非常明显。,Vmstat,显示,b(block),很大,有很多等待,IO,的进程,,sar,显示,wio,明显超过平时值。观察数据库日志,发现数据库检查点持续时间,(checkpoint duration time),显著增加,平时在,3,秒以内就能完成,此时需要,10,秒甚至更长时间才能完成。,处理步骤,首先还是查看数据库日志和操作系统日志,排除数据库内部错误和操作系统,IO,错误。如果用的是阵列,(RAID),,最好再查看一下阵列的日志,出现这种情况最常见的原因是阵列出了问题,比如电池没电,,cache,没有打开等等。,排除了操作系统和数据库内部错误,就需要了解一下是否有新的应用在进行大批量的数据操作,如,INSERT/DELETE/UPDATE,,是否能将这些操作放在系统相对空闲的时候进行。对于大批量的数据导入操作,在,INFORMIX9.4,中提供了,RAW,类型的表,由于不记录逻辑日志,插入速度会快很多,导入完成后,再将表修改为正常模式;对普通表应该先导入数据,再创建索引,注意主键、外键默认都会创建索引,应该在数据导入后在创建。,不恰当的应用,SQL,也会导致,IO,量非常大,可以用案例,1,中的办法来找到问题,SQL,,根据实际情况进行处理。,案例,3,:检查点持续时间逐渐缓慢增加,问题特征,数据库稳定运行一段时间后,性能开始下降,检查点持续时间,(checkpoint duration time),开始逐渐增加,系统,CPU,空闲降低,,WIO,有所增加。这些情况往往出现在新的应用上线后一段时间,由于在开发和测试环境中数据量小,性能问题不会暴露,当生产环境数据量增长到一定程度后,性能问题就会出现。,针对这种情况,需要确认定期在对数据库,尤其是对数据库中的大表,在定期做收集统计数据的工作,(update statistics),,避免数据量的增大造成系统性能急剧下降。,找到被顺序扫描多次的大表及其上的问题,SQL,,进行分析,采取相应办法尝试减少其上的顺序扫描:,创建相应索引;,修改应用,SQL,;,及时删除表中不必要的数据。,常见调优技巧,找到,CPU,占用最高的,SQL,1.,在,sysmaster,库中执行,select sqx_estcost,sqx_sqlstatement,from syssqexplain,order by sqx_estcost desc,注意:此时看到的仅仅是当前正在执行的,SQL,需要多看几次,2. onstat,命令,onstat -g act,得到当前正在执行的,SQL,Running threads:,tid tcb rstcb prty status vp-class name,75 a327318 a14d6b4 2 cond wait(sm_read) 1cpu sqlexec,76 a327b40 a14d280 2 yield lockwait 1cpu sqlexec,根据,rstcb,列(不要包括前面的,C0000,等,仅要后面部分),onstat -u | grep a14d6b4,从第三列,sessid,得到,session id,onstat -g sql ,即可得到当时正在执行的,SQL,一般多找几个,threads,后,就基本可以确定问题,SQL,3.,示例,onstat g act,Threads:,tid tcb rstcb prty status vp-class name,141904 84176538 8030eab8 2 running 1cpu sqlexec,onstat u | grep 8030eab8,Userthreads,address flags sessid user tty wait tout locks nreads nwrites,8030eab8 Y-P- 131047 informix - 84022480 0 1 11671 14722,onstat g sql 131047,Sess SQL Current Iso Lock SQL ISAM F.E.,Id Stmt type Database Lvl Mode ERR ERR Vers,131047 DELETE (all) testdb DR Wait 10 0 0 9.03,Current SQL statement :,delete from my_tab,Last parsed SQL statement :,delete from my_tab,得到,SQL,后,利用,set explain on,分析其查询路径,,看是否未利用索引,在对大表进行全表扫描,根据需要创建相应索引,找到全表扫描较多的表及其,SQL,1.,得到全表扫描较多的表,cat check.sql,-,系统顺序扫描较多时,被多次顺序扫描的大表,如果有,应该考虑增加索引,select first 5 substr(t.tabname,0,20) tabname,substr(dbsname,0,10) dbname,nrows*rowsize*p.seqscans costs,substr(p.seqscans,0,8) seqscans,substr(nrows,0,8) nrows,from sysmaster:sysptprof p , systables t,sysmaster:sysprofile s,where p.tabname = t.tabname,and p.seqscans s.value/50,and s.name = seqscans,-and s.value 2000000,and nrows 2000,order by 3 desc,!,dbaccess sysmaster !,unload to /tmp/db delimiter ;,select dbaccess |trim(name)| check.sql from sysdatabases,where name not like sys%,!,ksh /tmp/db,2.,利用,onstat g ses 0 r 5/ onstat g stm,的输出信息,根据表名,找到可能的,SQL,语句。由于以上获取,SQL,的办法是有局限的,如果无法获取,建议通过查看应用日志或联系开发人员查看源代码的方式来找到。,3.,利用,set explain on,分析其查询路径,确认是在对表进行全表扫描,根据需要创建相应索引。,UPDATE STATISTICS,有以下三种级别:,1,、,LOW,:,缺省为,LOW,,此时搜集了关于,column,的最少量信息。只有,systables,、,syscolumns,、,sysindexes,内的内容改变,不影响,sysdistrib,。为了提高效率,一般对非索引字段执行,LOW,操作,2,、,HIGH,:,此时构建的分布信息是准确的,而不是统计意义上的。,因为耗费时间和占用,CPU,资源,可以只对表或字段执行,HIGH,操作。对于非常大的表,数据库服务器将扫描一次每个字段的所有数据。可以配置,DBUPSPACE,环境变量来决定可以利用的最大的系统磁盘空间,3,、,MEDIUM,:,抽样选取数据分布信息,故所需时间比,HIGH,要少,什么时候应该执行,update ststistics,?,建议在以下情况,执行,update statistics,操作:,对数据做了大量修改,大量是针对数据的分布而言,若数据分布没有明显的改变则可以不做,改变的数据库表有与之相关的存储过程,避免在运行时存储过程重新优化,数据库升级之后完成对索引的转变,update ststistics,的方法,考虑到速度性能因素,执行,update statistics,的推荐方法:,对表执行:,update statistics medium for table # distributions only,对每个索引的首字段执行:,update statistics high,对复合索引执行:,update statistics low,必要时对非索引字段但在条件中使用到的字段执行,Update statistics high,操作,核心现有,UPDATE STATISTICS,(,1,) 用户,informix,登陆主机后台,,cd xql,到,/usr/Informix/xql,目录。,(,2,) 按顺序执行以下操作:,执行,sh updtscript2.sql,命令,文件自动生成,medist.sh ,medium.sh,和,high.sh;,a.,执行,sh medium.sh,使用,onstatg sql,查看是否更新完毕;,b.,当,a,步操作完成后,执行,sh medist.sh,,使用,onstatg sql,查看是否更新完毕;,c.,当,b,步操作完成后,执行,sh high.sh,使用,onstatg sql,查看是否更新完毕;,复制,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!