2024年9月informix查看执行计划(informix SQL时快时慢)

 更新时间:2024-09-21 07:29:57

  ⑴informix查看执行计划(informixSQL时快时慢

  ⑵informixSQL时快时慢

  ⑶dbaess运行SQL语句前,先执行一下setexplainon;再执行SQL,查询计划会输出到运行dbaess当前目录下的sqexplain.out文件中根据sqexplain.out文件查看执行计划是否正常,然后根据结果进行优化,比如增加索引、做统计分析更新(updatestatistics。。。另外执行时的锁状态、是否正在Checkpoint、其它SQL的执行(比如高优先级PDQPRIORITY语句等都会影响SQL的执行速度

  ⑷Informix存储过程题(谁能解决,小弟万分感谢

  ⑸其实写逻辑的话并不难,主要是对新的语言和开发环境的陌生不如看看下边的informix存储过程的语法,学写逻辑的话就是程序员的基本功了,掌握了语法,只要思路清晰,无论是什么语言什么环境都不会太难======================================================================存储过程基本语法:创建存储过程createprocedureproc_name()returningout_para_list/out_result_set;删除存储过程dropprocedureproc_name;存储过程存放存储过程信息放在sysprocedures系统目录表中,权限存放再sysprocauth表中。sysprocbody表存放每个存储过程的文本、编译伪代码、等信息。sysprocplan表存放查询执行计划和存储过程中引用的表格之间的相关性清单。执行存储过程。是标准SQL语言,通过数据库访问语言直接运行:executeprocedureproc_name(in_para_list)returningout_para_list/out_result_set;。在存储过程中调用;callproc_name(in_para_list)returningout_para_list/out_result_set;或letlocal_variable=my_spl(“argumeny_);调用不同数据库的存储过程:executeproceduredatabase:my_sp();调用远程数据库不同网络节点:executeproceduredatabasesitename:my_sp();、其他常用语句分支if...then...elif...then...else...endif循环(三种)。forfori=to...endfor(没有分号)。whilewhile......endwhile(没有分号)。foreachforeachselectcol,..intoval,...fromtabnamewhere.......endforeach(没有分号)循环控制语句:。continue:条过余下的循环体,启动下一轮循环;。EXIT:终止循环;。RETURN:完成退出存储过程;。RAISEEXCEPTION:退出,在循环外捕获错误;例子:foreachselectcol,..intoval,...fromtabnamewhere.......if...thencontinueforeach;endif;...fori=to...if...thenexitfor;endif;endfor;while...if...thenreturn...;endif;endwhile;endforeach(没有分号)分块:BEGIN和END必须成对出现...BEGINonexcewption....endexceptionbegin....end;END;四、SELECT语句、WHERE子句的关键字:BETWEEN:指定数值范围;IN:指定数值表;LIKE:指定通配符文本查询;MATCHES:指定通配符文本查询;ISNULL:查询NULL值;NOT:否定查询结果;、WHERE子句的操作符=;!=不等于《》不等于》大于》=大于或等于;《:小于;《=:小于或等于;eg:select*fromtablenamewherecolbetweenvalandval;eg:select*fromtablenamewherecol;、字符值搜索子串:字符列名后用;注:选择不是从第一个字符开始的子串时,不能使用该列的索引;并且消耗资源多;第一个数字代表开始位置;第二个数字代表终止位置,该数字不能大于列长度;LIKE:。%:代表个或多个字符;。下画线(_)代表一个字符;可以连续使用多个下画线代表多个字符;。搜索原字符(%,_),需使用转意符(;例如:select*fromtablenamewherecollike“%%%“:查询带%的内容;注:。LIKE关键字是ANSI标准,方便移植;MATCHES功能有扩展;。大小写有区别;MATCHES:根据通配符搜索字符列。通配符与LIKE不同.(注:该命令大小写有区别)。*:代表个或多个字符;。?:代表一个字符;。能对一个字符位指定字符范围和字符表,利用实现。(该功能LIKE没有;若要指定字符范围,可以使用连字符(-分开两个字符;例如:查询从A到L字母开始的内容:select*fromtablenamewherecolmatches“*“;。可以在前面加上插入符(^否定一个范围的结果,例如:查询排除A到L字母开头的内容:select*fromtablenamewherecolmatches“*“;。可以省略连字符,用中,例如:查询以A、B、C开头的信息;select*fromtablenamewherecolmatches“*“;。前面加上插入符(^)可以否定查询结果,例如:上例取反:select*fromtablenamewherecolmatches“*“;。根据字母组合选择值:例如查询COL中任何地方带‘ABC或abc’的信息:select*fromtabnamewherecolmatches“**“说明:由于区分大小写,所以要对每一位指定大小写;select*fromtabnamewherecolmatches“*“查询COL中以A-L和s开头的信息;。若要使用元字符(*和?,则需要使用转意符(),例如:查询COL中有*的信息:select*fromtabnamewherecolmatches“***“、NULL处理列的值未知时,使用NULL值标识。NULL值不同于或空格,使用ISNULL查询未知值或NULL值;、歧义列名指定多个表中都存在的列名,需要加上表名限制,例如:selectcol,col,colfromt,twheret.col=t.col--错误,因COL没限制selecta.col,a.col,b.colfromta,tbwherea.col=b.col;、外连接返回主表的全部满足条件的记录(不管从表是否有匹配和从表的匹配记录(相交记录;考虑点:。一个表是主表,一个是从表;。取得主表的所有记录,不管从表是否有匹配;。从表名放在OUTER关键字后面;。若从表没有符合连接条件的记录,则从表中的列未NULL值;。若指定外连接,则连接条件放在WHERE子句中;例子:selecta.col,a.col,b.colfromta,outertbwherea.col=b.col;、用括号嵌套简单连接(简单连接例子:selecta.col,col,b.col,col,colfromta,OUTER(tb,tc)wherea.col=b.colandb.col=c.colandcol=’abc’;(COL在T表中例子中首先将T连接到T,查询COL=‘ABC’的内容;然后将结果于表T连接,取得最后结果;(是外连接OUTER关键字用于外连接T和T表的连接结果;、用括号嵌套外连接例子:selecta.col,col,b.col,col,colfromta,OUTER(tb,OUTERtc)wherea.col=b.colandb.col=c.colandcol=’abc’;(COL在T表中注:T与T是外连接,T与(T和T的外连接结果是外连接;、GROUPBY子句和HAVING子句例:selecttabnameHAVING子句对一组采用过滤条件,通常与GROUPBY子句一起使用,指定每个组的过滤条件;selecttabname,count(*)astfromsystablesgroupbytabnamehavingcount(*)》、ORDERBY子句指定返回结果顺序;该子句中列出一个或多个列;优先级依次降低;ASC指定升序,DESC执行降序;、INTOTEMP子句生成临时表,在对话期间存在;可以用DROPTABLE显示删除;下列条件来临时表自动删除:、退出程序时、关闭当前数据库时、切断当前数据库连接时。五、日期时间操作、数据类型:date,datetime;、当前日期时间:current;、当前日期:today;、相关函数:参见附件“常用函数”、例子:当前日期时间:letcur_dtime_var=current;--datetime当前日期:letcur_date_var=today;--date日期加减:。lettmp_date=today+UNITSday--当前时间加三天。lettmp_date=today+interval()daytoday--当前时间加上天日期/时间转换成字符串:defineschar();defineydatetimeyeartosecond;lety=current;lets=year(y)||month(y)||day(y)||hour(y)||extend(y,minutetominute)||extend(y,secondtosecond);字符串转换成日期/时间:definedtdatetimeyeartosecond;letdt=EXTEND(DATETIME(--::)YEARTOsecond,YEARTOsecond);六、游标操作、定义foreachcur_nameforselect....into....from....where.........endforeach;、例子definevinteger;definevdatetimeyeartosecond;definevvarchar();definevvarchar();FOREACHselectcol,col,col,colintov,v,v,vfromtRETURNv,v,v,vWITHRESUME;ENDFOREACH;七、事务、语法:beginwork;.....mitwork/rollbackwork;、说明:必须在日志数据库中,才能使用事务,否则提示错误;事务中的操作不能过多,否则可能造成长事务被取消或造成死锁;八、异常处理方法方法:在每次操作后进行判断。缺点:该方法操作烦琐,效率低下;优点:能准确定位问题出处;方法:使用数据库提供的异常保护功能:onexception....;endexception;缺点:不能准确定位问题的出处;优点:操作简单、高效;使用建议:根据实际情况选择,往往两者灵活结合使用效果最好;九、存储过程跟踪方法方法、将跟踪内容写入表中,过程执行完成后查询;方法、在过程中直接返回跟踪对象的内容;方法、使用trace功能,详细使用参见后面的例子;十、存储过程加载方法一:使用dbaess工具。使用NEW菜单项中直接输入或拷贝存储过程语句,再使用RUN功能运行;缺点:由于BUFFER大小有限,存储过程语句不能过多,超过部份自动截断;方法二:使用dbaess工具,使用choose功能直接选择好的SQL文件,再使用RUN功能运行。方法三:使用工具dbaess,直接加载SQL脚本:dbaessdb_namefile_name.sql十一、例子、用存储过程中返回一个或多个值createprocedureproc_test()returningint,datetimeyeartosecond,varchar();definevinteger;definevdatetimeyeartosecond;definevvarchar();letv=;letv=current;letv=“test“;returnv,v,v;endprocedure;、用存储过程中返回一条记录预设条件:表T,字段colint,coldatetimeyeartoday,colchar();createprocedureproc_test()returningint,datetimeyeartosecond,varchar();definevinteger;definevdatetimeyeartosecond;definevvarchar();selectcol,col,colintov,v,vfromtwherecol=;--col为关键字,满足该条件的记录只有一条;returnv,v,v;endprocedure;、用存储过程中返回多条记录(游标--cursor预设条件:表T,字段colint,coldatetimeyeartoday,colchar();createprocedureproc_test()returningint,datetimeyeartosecond,varchar();definevinteger;definevdatetimeyeartosecond;definevvarchar();foreachselectcol,col,colintov,v,vfromt;returnv,v,vwithresume;endforeach;endprocedure;======================================================================

  ⑹如何在客户端查看Informix的执行计划

  ⑺可以用onstat-gsql查看全部的SQL对某个sql查看其查询计划setexplainonavoid_execute;select的sqlsetexplainoff;这样在当前执行的目录下就会产生一个.out文件

  ⑻Informix常用命令

  ⑼常用命令oninit将系统从off-line模式变为on-line模式oninit-iy(初始化数据库,删除所有dbspace和chunkoninit-s(脱机--》静态onmode-kyofflineonmode-sgracefulshutdown--》quiescent(联机到静态,让用户处理完成onmode-uimmediateshutdown--》quiescent(联机到静态,所有用户立即终止onmode-mquiescent---》onlineonmode-zsid删除某sessiononmode-l将当前正在使用的逻辑日志下移onmode-c强制执行检查点操作即onmonitor-》forceckptonstat-查看服务器状态onstat-d查看dbspace和chunk情况onstat-l查看逻辑日志onstat-F查看写入磁盘的页刷新和类型情况,从共享内存缓冲区向磁盘写入页面有三种方式(fg:前台写LRU:队列写chunk:块写onstat-R打印LRU队列onstat-p显示系统的基本I/O与性能配置文件onstat-c查看onconfig文件onstat-m查看消息日志onstat-f查看受DATASKIP影响的dbspaceonstat-x查看事务onstat-k显示所有活动的锁onstat-gsub_option运行多线索选项onstat-gses/sqlonstat-r《value》每隔《value》秒后重复选项onstat-gact显示系统中所有的活动线索onstat-gath-r每隔两秒显示系统中所有的活动的线索onstat-i交互方式》sql》sqlsidipcs查看共享内存情况ipcrm删除某个共享内存ipcrm-midipcrm-sidOntape命令:零级(一级或二级)备份$》ontape-s$》ontape-s-L$》ontape-s-L$》ontape-s-L自动备份逻辑日志文件$》ontape-a)连续逻辑日志备份(日志文件写满一个,online系统自动备份一个,你可以插盘磁带到磁带机上,让IDS自动备份。要占用磁带机$》ontape-c)备份恢复(对应零级备份或一级备份或二级备份$》ontape-r(详细过程见ontape恢复文挡备份恢复几个DBSPACE(一定要存在逻辑日志备份,否则物理恢复完后,还是不能用$》ontape-r-Ddbsdbs。。。配置HDR时使用的物理恢复$》ontape-p)修改数据库日志模式$》ontape-s-Bdb_name修改为buffer_log即缓冲日志模式$》ontape-s-Udb_name修改为unbuffer_log即非缓冲日志模式$》ontape-s-Ndb_name修改为无日志模式数据库不含日志,即不支持事务,对数据库的任何修改都不会记录到逻辑日志中去$》ontape-s-Adb_name修改为ansilogging模式,从个模式无法改到其它模式,因此一般不要用该项。oncheck命令oncheck-peextendoncheck-ceoncheck-crreservedpagesoncheck-cdTBLspacedatarowsincludingbitmaponcheck-citableindexesdatabases对逻辑日志的操作:以informix用户登录,$onmode-uy(由Online切换到Quiescent状态,所有用户立即中止)onmode-m(切换到Online)$onparams-a-dlogdbs-s其中logdbs为dbspaces名,-s表示增加了M空间。再连续执行遍上述命令,这样新的逻辑日志空间总共为M,可以用onstat-l查看逻辑日志情况,接下来就要删除前面个旧逻辑日志,删除前做一个级备份#ontape-s-L执行该命令做级备份,建议:如果允许可以每天在业务系统结束工作后做一次级备份,做完备份后管理好备份磁带,做好标记。$onparams-d-llogidlogid为逻辑日志id号,可以用onstat-l查看,然后就可根据id号删除个旧逻辑日志。将当前正在使用的逻辑日志下移$onmode-l三、DBSPACE及数据库导入导出.增加一个新的dbspace:(datadbs,M,偏移为onspaces-c-ddatadbs-p/home/informix/datadbs-o-s.在datadbs这一个dbspace中增加一个chunk:(datadbs_chunk)onspaces-adatadbs-p/home/informix/datadbs_chunk-o-s.将上述chunk删除onspaces-ddatadbs-p/home/informix/datadbs_chunk-o.删除dbspace(仅当要删除的dbspace空间没有数据时才可删除onspace-ddatadbs导出数据库:用dbexport工具将数据卸成文本,并装载到其它服务器上。(卸载文本的步骤如下:用informix用户注册dbexportcleardb-oWORKDIR-ss当系统提示dbexportpleted!数据卸载完毕。其中:-ss确保数据库的建库信息或建表信息被保留如日志模式、初始extent尺寸、lockmode、表所在dbspace等。-o指定存放卸载数据的目录数据存放在目录cleardb.exp目录下,其中包含cleardb.sql和形如*.unl的文件,提示信息存放在dbexport.out文件中。(装载文本的步骤如下:用informix用户注册确保数据库处于On_Line状态,服务器上没有同名数据库。dbimportcleardb-iWORKDIR当系统dbimportpleted!提示数据装载完毕。其中:-i指定从何处装载。如何在不破坏库本身信息情况下(如行级锁等将数据库卸载到磁带设备,并装载在其它服务器上?p;卸载的步骤如下:用DBA用户注册将存放数据的磁带插入磁带机,确认磁带及磁带机完好可用。dbexportcleardb-t/dev/rmt/m-bk-sk-ss当系统提示dbexportpleted!数据卸载完毕。其中:-ss确保数据库的建库信息或建表信息被保留如日志模式,初始extent尺寸,lockmode,表所在dbspace-t磁带设备/dev/rmt/m-s磁带容量G-b块大小KB提示信息存放在dbexport.out文件中装载的步骤如下:用DBA用户注册将存放卸载数据的磁带放在磁带机上,确认磁带机正常,确认数据库系统处于On_Line状态,服务器上没有同名数据库。$dbimportcleardb-t/dev/rmt/m-bk-sk当系统dbimportpleted提示数据装载完毕!提示信息存放在dbimport.out文件中。重建表格:dbschema-ddbname-ttabname-sstabname.sql/*将表格结构放进tabname.sql*/此文件并在createtable语句末尾增加新的区域长度暂时将生成表格索引的tabname.sql部分标为说明语句,即在索引句前后加上“{}”,例如:{createindexxloncustomer(last_name);createindexxoncustomer(cust_nbr);}最好在后面生成索引,因为这样表格能快速装入,索引能在连续磁盘空间生成,使其更加有效。锁定表格locktabletabnameinexclusivemode;用SQLUNLOAD将表格卸载到磁盘或磁带中unloadtofile_or_tape_pathselect*fromtabnameunloadto“/usr/data/unload/customer.unl“select*fromcustomer;检查表中的行数(用SQL中的Table/Info命令,验证卸载是否成功。比较这个数与装入完成后SQL显示的消息。用此验证file_or_tape_path中的行数:wc-lfile_or_tape_path删除表格用dbacess生产表格并运行tabname.sql。这时不要生成索引用SQL的LOADFROM或用dbload重新装入表格loadfromfile_or_tape_pathinsertintotabname;loadform“/usr/data/unload/customer.unl“insertintocustomer;对于日志数据库,上面的装入语句可能产生长事务或“tomanylock”错误。这时建议用dbload之类的实用程序将数据插入表中。dbload的-n选项强制在插入一定行后进行mitwork(建议选行。检查表中的行数(用SQL中的Table/Info命令,验证装入是否成功。如要生产索引,运行第一步中标为说明语句的tabname.sql部分。更新表格统计信息updatestatisticsontabname;语法oninitoninit将系统从off-line模式变为on-line模式oninit-s将系统从off-line模式变为quiescent模式oninit-i初始化系统oninit-p在共享内存初始化时,不搜索,删除临时表oninit-y对提示自动回答yesoninit-v加入这个选项显示oninit处理过程oninit--键入此命令可以获得使用帮助oninit命令用来改变系统的运行模式。其中-i选项用于初始化系统的rootdbspace。注意,root-dbspace一旦被初始化,则等于整个数据库系统被初始化。如果用户希望在计算机启动时自动自动启动动态服务器系统,请在系统初启文件(在许多UNIX系统中为/etc/rc中加入oninit命令(不加任何选项。onmode命令语法:onmodeonmode-k执行立即shutdown,将系统变为off-line模式onmode-m将系统从quiescent模式变为on-line模式onmode-s执行gracefulshutdownonmode-u执行immediateshutdwononmode-y对提示自动回答yesonmode命令同样用于改变动态服务器的运行模式。除了上述选项外,onmode还有很多与改变系统运行模式无关的选项。利用onspaces命令创建数据空间语法:onspaces-c-c创建blobspace或dbspace-bblobspaceblobspace名-ddbspacedbspace名-gpagesizeblobpages大小-mmirror镜像设备设的全路径名和偏移量(KB)-ooffset偏移量(KB)-ppathnamechunk设备的全路径名-ssizedbspace大小(KB)-t创建临时dbspaceonspaces命令用于创建数据空间、临时空间和存储blob数据的空间(blobspace)。键入onspaces--可以获得该命令的联机帮助。利用onstat-D或onstat-d可以看到系统中的关于数据空间的重要信息。包括:chunk的状态、空闲、每一chunk读写的次数。系统中可能包括的多个系统空间,特别当进行数据分片后,我们建议用户最好能利用命令行来创建数据空间。可以利用如下命令创建数据空间:onspaces-c-ddatadbs-o-p/dev/rrvol-s可以用如下的方式创建临时数据空间:onspaces-c-dtempdbs-t-o-p/dev/rrvol-s在系统中,临时数据空间非常重要,通常情况下,应将多个临时数据空间分布在独立的物理设备上。利用onspaces命令删除数据空间增加或删除chunks语法:onspaces-a-d-aspacename为dbspace新增chunk-mpathname镜像设备的全路径名和偏移量(KB-ooffset主设备的偏移量(KB)P》-ppathnamechunk设备的全路径名-ssizechunk大小-dspacename删除chunk-ooffsetchunk设备的偏移量(KB)onspaces不仅能创建数据空间还能删除数据空间、临时数据空间或存储blob数据的空间。在删除数据空间时,必须首先保证它是无用的,即该数据空间上无数据库或表。如需删除数据空间,请键入如下命令:onspaces-ddbspace_name/blobspace_name数据空间最初由一个chunk(firstchunk构成,一旦其空间用尽,用户必须追加chunk为了提高系统性能,用户在为数据空间分配chunk时需要计算以保证它的大小能适应未来的需要,否则在追加chunk的时候,它与先前的chunk在物理上不一定相邻,导致增加读取数据的时间。关于如何计算空间需求将在以后章节中阐述。利用onspaces命令可以对数据空间增加或者删除chunk,除此之外,利用该命令还可以完成如下任务:启动镜像、中止镜像或改变chunk的状态。例如可以用如下命令为数据空间增加chunk:onspaces-a-ddatadbs--p/dev/rrvol-s再如可以用如下方式从数据空间中删除chunk:onspaces-ddatadbs-o-p/dev/rrvol-sonparams命令语法:onparams-a-d-p-a新增逻辑日志-ddbspace指定日志存放的dbspace-ssize新增逻辑日志的大小(KB-d删除逻辑日志-llogid指定删除一个逻辑日志-p改变物理日志-ddbspace新物理日志存放的dbspace名-ssize物理日志大小(KB)系统在初始化时自动地在rootdbspace中创建逻辑日志和物理日志。在DBMS系统中,尤其在OLTP环境下,数据库的操作非常频繁,日志中必须记录大量的信息,所以用户最好能将多个日志文件分布在不同的设备上。有一种非常简单的方法:即按所需大小创建逻辑日志,同时创建一个较小的物理日志,系统初始化完毕后,再将物理日志移至其它设备。关于如何确定所需的物理日志的大小,将在以后的章节详述。利用onstat-l命令可以看出系统中所有新增的逻辑日志被标识为A。这些逻辑日志只有在系统进行归档后才会真正被使用。为了激活这些逻辑日志有一种简单的方法:执行一次“伪“归档。具体步骤如下:将参数TAPEDEV设置为/dev/null然后运行一次ontape-s。也可以执行onbar-F命令。由于伪归档并不真正归档系统信息,所以千万要适时地对系统进行真正的归档操作。只有在逻辑日志真正无用时才能将其删除。利用onstat-l可以看出所有的空闲日志被标记为F。如果逻辑日志中包含事务回滚或快速恢复所需的信息,该逻辑日志是不能被删除的。利用onstat-l命令可以看出接受当前事务的日志被标记为C。如果逻辑日志包括最后一个检查点记录,它也是不能被删除的,只有当检查点记录被写入下一个日志忠并且上一个日志被备份后,该日志才能被删除。利用onstat-l命令可以看出包含最后一个检查点记录的日志被标记为L。用户可以利用onmode-c命令强制写检查点记录直至最后一个检查点记录被写入所要求的日志为止。onstat工具显示动态服务器共享内存中的信息涉及少量磁盘I/O操作将对系统性能的影响极小提供关于系统有价值得信息命令行交互式监控系统在本章中将讲解onstat的各种重要选项,请熟悉它们的使用onstat命令是一种非常有用的系统实时监控工具。该命令直接从共享内存的数据结构中读取信息,报告当时的系统状况。通常onstat命令不会进行磁盘I/O操作,也不会对系统资源加锁,所以它对系统性能的影响减少到最小。简言之,onstat是informix提供的一种交互式的系统监控工具。onstat的一些常用选项:onstat--列出所有选项onstat-i设置进入交互模式onstat-显示运行模式和数据库引擎状态onstat-gsub_option运行多线索选项onstat-r每隔秒后重复选项onstat-gact显示系统中所有的活动线索onstat-gath-r每隔两秒显示系统中所有的活动的线索系统监控界面sysmaster数据库在系统初始化时自动创建数据库中包括指向系统共享内存结构数据字典信息提供瞬时的系统性能和状态信息提供SQL界面了解数据字典信息允许管理员将系统管理工作自动化用于执行重复性的监控任务系统监控界面(systemMonitoringInterface--SMI)是一种基于SQL的系统工具,用户通过SMI可以非常方便地获取系统信息。系统在初始化时,自动地在rootdbapace创建sysmaster系统数据库。每一系统包括一个sysmaster数据库,该数据库中的大部分表为虚表,是指向共享内存中数据结构的指针。利用SMI可以自动监控系统,特别是在执行重复任务时。sysmaster数据库是只读的,即不允许对其进行INSERTUPDATE,或DELETE操作。所有用户都拥有对该数据库的查询权限。在系统初始化后,用户一定要注意检查sysmaster数据库是否建立成功。创建sysmaster数据库的信息都保存在消息日志文件中(online.log)请注意由于所有的DDL语句都将被记录在日志中,所以一定要在日志文件中留出足够的空间以保证创建sysmaster所需。sysmaster数据库模式记录在$INFORMIXDIR/etc/sysmaster.sql文件中。oncheck命令检查动态服务器磁盘上的数据结构定位并修补损坏的索引和数据有磁盘I/O操作一些操作在处理时将在表上加锁oncheck命令用于修复磁盘上损坏的索引和数据页,该命令也可用于检查并打印系统的数据结构。在使用oncheck时一定要当心,因为改命令的某些选项会对表加共享锁,例如:oncheck-pt》为防止对系统的损坏,系统会对所有共享内存中的数据进行一次一致性检查。一旦发现数据页出现一致性错误或发现索引错误,系统将把问题和可能的解决方案(利用oncheck)写入消息日志文件,并返回isam错误代码。如果发现一致性错误信息,用户应该立即关闭系统并按消息日志文件中的提示运行oncheck。如果oncheck运行失败,则应尝试卸出表再重新装入;如果是索引得问题,则应先删除索引再重建之。如果所有这些步骤都失败了,只有根据原有的系统归档备份来恢复系统。下面的命令可以提供extend信息:oncheck-pe在onstat–l中,flag位表示了逻辑日志的状态,A表示新加了还不能使用的日志F表示空闲的可以使用的日志,一般是在级备份之后才有这样的状态U表示已经使用的逻辑日志L表示当前的日志文件包含一个检查点C表示正在使用当前的日志文件B表示已经备份的日志文件

  ⑽如何通过命令,查看INFORMIX数据库已经建立好的SEQUENCE

  ⑾VisualStudio已经集成了跨平台开发,VisualStudio是一套基于组件的软件开发工具和其他技术,可用于构建功能强大、性能出众的应用程序。目前Blend已经更新为强制安装内容,勾选VisualStudiocore(至少选择一项继续安装。勾选好后,点击底部右下角的“安装”按钮(英文为install。点击安装后,等待VisualStudio装好了并且重启设备。重启设备后出现如图界面,现在安装移动平台的开发工具,并且注意这个步骤需要联网操作。按照如图所示进行勾选操作,完成勾选后点击进入下一项操作(英文next,安装完成后便大功告成了!

  ⑿怎么查看informix中的表结构

  ⒀informix查询表结构方法有多种,可以通过系统信息表查询,也可以通过系统功能查询查询系统表存储信息步骤:登录数据库dbaessxxxdb;执行查询语句SELECTc.colname,c.coltype,c.collengthFROMsyscolumnsc,systablestWHEREc.tabid=t.tabidANDt.tabname=’xxxTable’;通过系统提供的命令功能查询:dbaess-info查询表信息dbschema命令导出表结构

  ⒁数据量太大,分页查询变慢,有什么优化查询的方法吗

  ⒂下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。●在频繁进行排序或分组(即进行groupby或orderby操作的列上建立索引。●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。●如果待排序的列有多个,可以在这些列上建立复合索引(poundindex。●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。.避免或简化排序应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:●索引中不包括一个或几个待排序的列;●groupby或orderby子句中列的次序与索引的次序不一样;●排序的列来自不同的表。为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。.消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套层的查询,如果每层都查询行,那么这个查询就要查询亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……和选课表(学号、课程号、成绩。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作:SELECT*FROMordersWHERE(customer_num=ANDorder_num》)ORorder_num=虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:SELECT*FROMordersWHEREcustomer_num=ANDorder_num》UNIONSELECT*FROMordersWHEREorder_num=这样就能利用索引路径处理查询。.避免相关子查询一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。.避免困难的正规表达式MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT*FROMcustomerWHEREzipcodeLIKE“___”即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT*FROMcustomerWHEREzipcode》“”,在执行查询时就会利用索引来查询,显然会大大提高速度。另外,还要避免非开始的子串。例如语句:SELECT*FROMcustomerWHEREzipcode》“”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。.使用临时表加速查询把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:SELECTcust.name,rcvbles.balance,……othercolumnsFROMcust,rcvblesWHEREcust.customer_id=rcvlbes.customer_idANDrcvblls.balance》ANDcust.postcode》“”ORDERBYcust.name如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:SELECTcust.name,rcvbles.balance,……othercolumnsFROMcust,rcvblesWHEREcust.customer_id=rcvlbes.customer_idANDrcvblls.balance》ORDERBYcust.nameINTOTEMPcust_with_balance然后以下面的方式在临时表中查询:SELECT*FROMcust_with_balanceWHEREpostcode》“”临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。.用排序来取代非顺序存取非顺序磁盘存取是最慢的操作,表现在磁盘存取臂的来回移动。SQL语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。

  ⒃如何使用onstat工具查看INFORMIX长事务

  ⒄onstat-能看到LONGTX说明是长事务状态onstat-xflag字段第三个标志位为R,说明正在rollback,说明这个事务是长事务通过显示的userthread查找sessionidonstat-|grepxxxxx最后查找会话信息,找出引起长事务的SQL语句onstat-gsessessionid

  ⒅informixSQL查询咨询

  ⒆现在还有人在用informix吗?systables:描述数据库中的每张表;syscolumns:描述数据库中表的列;sysindexes:描述数据库中列的索引;sysfragments:存储了分段索引的片段信息;sysfragauth:表识别列级权限;sysviews:描述了数据库中定义的每个视图;sysdpend:描述了视图是如何依赖其他视图和表的;syssyntable:定义每一个同义词及其所代表的对象;sysconstraints:记录了加载在数据库表列上的约束;sysreferences:列出了放置在数据库上的参照约束,它为数据库的每个参照约束建立一行syscoldepend:记录了涉及检查约束的所有列,包括在约束中每列都会在syscoldepend表中创建一行;sysprocedures:存放数据库中每个过程的特征;sysprocplan:装载了过程执行所需的两项内容(执行计划或查询计划、附属列表;sysprocauth:描述授予存储过程的权限;systriggers:装载了关于触发器的信息;sysblobs:确定BLOB列的存储位置;sysroleauth:描述授予用户的角色;sysobjstate:存储了关于数据库对象的状态信息;sysvlolations:违例或诊断表;

  ⒇如何查看informix数据库online日志

  ⒈可以用命令:onstat-l来查看日志。PhysicalLogging是物理日志,LogicalLogging是逻辑日志。比如:C:Informix》onstat-lIBMInformixDynamicServerVersion..TCE--Quiescent--Up::--KbytesPhysicalLoggingBufferbufusedbufsizenumpagesnumwritspages/ioP-.phybeginphysizephyposphyused?br/>:.LogicalLoggingBufferbufusedbufsizenumrecsnumpagesnumwritsrecs/pagespages/ioL-..SubsystemnumrecsLogSpaceusedOLDRSAMaddressnumberflagsuniqidbeginsizeused?br/>CBCAU-B----:.CBCEU-B----:.CBDU-B----:.CBDU-B----:.CBDAU-B----:.CBDEU---C-L:.CEDBA------:.CEDBA------:.CEDBA------:.CEDADA------:.CEDAA------:.CEDAA------:.active,total

您可能感兴趣的文章:

相关文章