《inix常用知识》PPT课件.ppt_第1页
《inix常用知识》PPT课件.ppt_第2页
《inix常用知识》PPT课件.ppt_第3页
《inix常用知识》PPT课件.ppt_第4页
《inix常用知识》PPT课件.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

INFORMIX常用知识 软件中心软件开发二科 INFORMIX原理和结构环境变量连接类型和通信协议数据库状态及启停日常中常用的命令工具数据库物理存储关系怎么增加dbspace Extent分片监控优化复制 INFORMIX原理和结构 INFORMIX OnLine动态服务器是INFORMIX的强大的多线程数据库服务器 其设计目的在于发挥对称多处理器 SMP 和单处理器结构的能力 以实现在数据库可伸缩性 可管理性和性能等方面的突破 OnLine动态服务提供最有效的并行数据库结构 以在管理日益增大和复杂化的数据库的同时帮助改善整个系统的性能和可伸缩性 OnLine动态服务器提供高级事务处理 通过新的并行数据查询 PDQ 技术而达到最优的决策支持 高可用性 数据完整性 大型主机能力的系统管理 图形化的监控工具 以及多媒体的能力 所有这些都集成在一个器的核心技术基于INFORMIX的动态可伸缩结构 其目的在于客户 服务器就绪的软件包中 OnLine动态服务器支持INFORMIX所有基于SQL的应用开发工具以及许多第三方工具 并可以在许多基于UNIX的单机或网络环境下的计算机系统上运行 系统结构 INFORMIX动态服务器采用的是一种多线程体系结构动态服务器系统由三个主要组件构成 共享内存 进程和磁盘共享内存 缓存 内存池 会话 session 消息缓冲区进程 被称为虚处理器 VP VirtualProcessors 每一个VP隶属于某一虚处理器类 磁盘 由多个原始磁盘空间组成 称为chunk Chunk以页 page 为基本单位 多个chunk集合逻辑上构成了数据空间 dbspace 数据空间用于存储数据库 表 根以及物理日志和逻辑日志 一个数据空间至少包括一个chunk 环境变量 exportINFORMIXDIR informix 设置IBMInformix产品的安装目录exportINFORMIXSERVER online10 设置DBSERVERDBNAME或DBSERVERALIASES配置参数的值exportPATH INFORMIXDIR bin PATHexportONCONFIG onconfig 配置文件 在 INFORMIXDIR etc onconfig 连接类型和通信协议 Vi INFORMIXDIR etc sqlhostsdbservernamenettypehostnameservicenameonline10onipcshm220 220 220 296664online10ontlitcp220 220 220 296664online10onsoctcp220 220 220 296664Nettype说明on DynamicServerse StandardEngineipc IPCconnectiontli TLIconnectionsoc socketconnectionshm Sharedmemorystr Streampipestcp TCP IPprotocolspx IPX SPXprotocol 配置 数据库状态及启停 一 数据库状态查看onstat 启动状态 IBMInformixDynamicServerVersion11 50 FC6 On Line Up17days02 24 38 3700976Kbytes停用状态 sharedmemorynotinitializedforINFORMIXSERVER online10 二 启动数据库oninitoninit命令只用于启动实例oninit命令只能在实例处于停止 offline 状态时使用 如果实例处于任何其他状态 那么执行oninit命令完全没作用 三 停止数据库onmode kyonmode命令用于停止实例和其他许多工作onmode命令可以改变实例的状态 动态地修改onconfig文件中的一些参数 增加和释放内存 配置B tree扫描器 配置HDR和Mach11特性 实施检查点等 日常中常用的工具 一 数据的备份恢复 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文件数据库例子 dbexportcbsbg 做这个之前确保没有别的用户在使用数据库 dbimport用于将一ascii文件装入一个数据库例子 dbimport ddatadbscbsbg 做这个之前先要删除原来的库 注意带 ddatadbs 不然默认导入到rootdbs 二 dbschema获取表模式例子 dbschema dcbsbg taapf10 ssaapf10 sql三 导出和导入表数据SQL语句UNLOAD和LOAD例如 要从数据库db1的表t1导出数据 可用使用以下命令 unloadto my dat select fromt1 要将文件中的数据装载到数据库db1的表t1中 仅需在db1中运行以下命令 loadfrom my dat insertintot1 unloadto my dat delimiter select fromt1 loadfrom my dat delimiter insertintot1 数据库物理存储关系 dbspace 是一组chunk的逻辑集合chunk 一个单位的物理磁盘空间 一个chunk由path offset size三部分组成 因此我们在使用onspaces命令来加chunk的时候这三个参数是必不可少的 page 是一最基本的I O单位 一个page的大小是由OS来决定的 有2K 4K 8K 16Kextent 是磁盘上连续page的一组集合 onstat d 怎么增加dbspace 1 lsvgdatavg 查看PP大小2 smitlvm 增加lvm3 cd devchowninformix informix rdatadbs01 更改属组3 su informixcddataln s dev rdatadbs01datadbs01 链接dbs4 onmonitor进去增加或者执行命令onspaces c ddatadbs p informix data datadbs01 o0 s100000 extent extendsize指定的数据大小的大小为创建该表的初始空间的大小 单位为kbyte nextsize指定的数据大小的大小为当该表的初始空间使用完毕后数据库表需要向数据空间申请空间大小的初始值当创建表没有具体指定extendsize和nextsixe的值时 extendsize和nextsize的缺省值都为16kbyte 即初始空间和初始新增空间的大小为16k 申请空间的大小 初始新增空间的大小 2 申请空间的次数 16 createtable cbsbg aapf30 aa30dpnoachar 11 aa30dpnokchar 11 aa30acidinteger aa30datechar 8 aa30seqinteger aa30briefchar 3 aa30abstchar 52 aa30crdclschar 4 aa30crdnochar 20 aa30dcchar 1 aa30amtdecimal 16 2 aa30baldecimal 16 2 aa30acnochar 32 aa30dpnochar 11 aa30staninteger aa30trcodchar 4 aa30oprrchar 10 aa30oprcchar 10 aa30attrchar 5 aa30enseqinteger aa30pageinteger fragmentbyexpression MONTH aa30date 1 indatadbs01 MONTH aa30date 2 indatadbs02 MONTH aa30date 3 indatadbs03 MONTH aa30date 4 indatadbs04 MONTH aa30date 5 indatadbs05 MONTH aa30date 6 indatadbs06 MONTH aa30date 7 indatadbs07 MONTH aa30date 8 indatadbs08 MONTH aa30date 9 indatadbs09 MONTH aa30date 10 indatadbs10 MONTH aa30date 11 indatadbs11 MONTH aa30date 12 indatadbs12extentsize500000nextsize500000lockmoderow 分片 数据分片 允许在表一级对数据存储进行控制 表分片 是INFORMIX数据库的一个特征 用户可以对表中的记录或索引进行分组 并且存储在不同的位置 这样可以将数据存储到多个磁盘上 从而减少对磁盘I O的竞争 数据分片有两种基本类型 基于轮转分片 和 基于表达式分片 对于 基于轮转法分片 正如其名字一样 数据是根据轮转法方式存入表中的 基于表达式分片 则根据表中的一个或多个字段对分片的规则进行定义 一般在预知查询条件时采用这种方式 从而避免查询中对某些分片的扫描 轮转法 PR 所使用的分片规则CREATETABLExyzFRAGMENTBYROUNDROBININdbspace1 dbspace2 dbspaceN基于范围表达式分片方案CREATETABLExyz aainteger FRAGMENTBYEXPRESSIONaa 1000ANDaa 2000INdbspace2REMAINDERINdbspace3 createtable cbsbg aapf30 aa30dpnoachar 11 aa30dpnokchar 11 aa30acidinteger aa30datechar 8 aa30seqinteger aa30briefchar 3 aa30abstchar 52 aa30crdclschar 4 aa30crdnochar 20 aa30dcchar 1 aa30amtdecimal 16 2 aa30baldecimal 16 2 aa30acnochar 32 aa30dpnochar 11 aa30staninteger aa30trcodchar 4 aa30oprrchar 10 aa30oprcchar 10 aa30attrchar 5 aa30enseqinteger aa30pageinteger fragmentbyexpression MONTH aa30date 1 indatadbs01 MONTH aa30date 2 indatadbs02 MONTH aa30date 3 indatadbs03 MONTH aa30date 4 indatadbs04 MONTH aa30date 5 indatadbs05 MONTH aa30date 6 indatadbs06 MONTH aa30date 7 indatadbs07 MONTH aa30date 8 indatadbs08 MONTH aa30date 9 indatadbs09 MONTH aa30date 10 indatadbs10 MONTH aa30date 11 indatadbs11 MONTH aa30date 12 indatadbs12extentsize500000nextsize500000lockmoderow 核心系统目前有两个表是分片的aapf30abpf20恢复数据的时候需要删除分片的内容 测试环境无分片 监控 监控 onstat系统监控接口 SMI 库sysmaster onstat onstat g常用监控命令 onstat d onstat l 系统跟踪 1 打开系统跟踪Dbaccesssysadmin EXECUTEFUNCTIONtask setsqltracingon 10000 1 high global 2 跟踪执行时间长语句dbaccesssysmaster selectsql statementfromsyssqltracewheresql stmtname SELECT andsql totaltime 4 sql statement 监控到的语句sql stmtname 语句类型 如INSERT SELECT UPDATE DELETE等sql totaltime 语句执行时间3 关闭系统跟踪Dbaccesssysadmin EXECUTEFUNCTIONtask setsqltracingoff 注 虽然INFORMIX的数据库的全局监控对于整个系统的影响只有5 比其他数据库都要小的多 但是还是一定要记得 每次打开监控之后 务必进行关闭操作 表空间 dbaccesssysmaster selectnamedbspace sum chksize allocated sum nfree free round sum chksize sum nfree sum chksize 100 2 pcusedfromsysmaster sysdbspacesd sysmaster syschunkscwhered dbsnum c dbsnumgroupbynameorderby4desc name 找出超过90 的表空间 表占用空间情况 dbaccesssysmaster selectrpad tabname selectmax length tabname fromsystables npused 2 1024npusedfromsystableswheretabid 99andtabnamenotlike tmp orderby2desc 超过50extents的表 selectt tabnametabname count extent num max t nrows rowsfromsysmaster sysextentse systablestwheree tabname t tabnameandt tabnamenotlike sys groupby1havingcount 50orderby2desc 如果除了大型分段表以外 表的扩展块超过了50个 那么您应该考虑重新构建这些表以合并扩展块 通过指定表的extentsize和nextsize调整重建表来减少extent数量 同时我们还需要根据表的记录数来判断表的extent设置的问题 通过如下SQL获取每个表占用的extent数及空间大小 以便根据表数据量进一步判断extent是否合理 selectdbsname tabname count num of extents sum pe size total sizefromsysmaster systabnames sysmaster sysptnextwherepartnum pe partnumanddbsname demodb andtabnamenotlike sys groupby1 2 索引层超过4层的表 selectt tabname i idxname i levelsfromsysindexesi systablestwherei tabid t tabidandi levels 4orderby3desc超过4层的索引需要重建 如果索引超过4层 请分析表是否已经分片另外可以通过8k或者16Kpagesize来减少 顺序扫描的表及扫描次数 语句1selectp dbsname t tabname sum p seqscans seqscans max t nrows nrowsfromsysmaster sysptprofp systablestwherep tabname t tabnameandt nrows 100andp seqscans 0andp dbsnamenotlike sys andp tabnamenotlike sys groupby1 2orderby3desc从输出结果找出那些表的顺序扫描数很高 如果它是一个具有几千甚至几百万行的大表 那么您可能需要考虑向该表添加一些索引 或者考虑使用程序伪指令来强制内部查询优化器为访问该表中的数据选择索引而不是顺序扫描 语句2selectfirst5t tabname dbsname nrows rowsize p seqscanscosts p seqscans nrowsfromsysmaster sysptprofp systablest sysmaster sysprofileswherep tabname t tabnameandp seqscans s value 50ands name seqscans andnrows 2000orderby3desc DBSpaceI O selectd namedbspace fname 1 125 chunk name sum pagesread diskreads sum pageswritten diskwrites sum pagesread sum pageswritten disk rwesfromsysmaster syschkioc sysmaster syschunksk sysmaster sysdbspacesdwhered dbsnum k dbsnumandk chknum c chunknum c chknumgroupby1 2orderby5desc onstat Donstat giof我们的目标是要使所有的dbspace都有平衡的磁盘读写操作 在大多数情况下 这是不现实的 但上面的输出至少让您对dbspaceI O的分配方式有了一个概念 可以帮助您标识 最热门的 dbspace 那些磁盘读写最多的dbspace 如果有些dbspace的磁盘读写操作相当繁忙而另外一些的读写操作则相当空闲 那么您可能需要为Informix引擎调整甚至重新安排物理磁盘布局 我们可以使用onstat D和onstat gioq获得类似的信息 前者显示各个块的磁盘读和写 而后者显示磁盘I O等待队列信息 重启后从新计数 onstat giof打印异步I O块 chunk 或文件的统计数据 例如 我们可能会认为demodbchk得到了太多的活动 如果一个繁忙的数据库占用demodbchk块 我们应考虑迁移此数据库中某些表 分散部分表到其他的活动块 如果一个繁忙的表占用demodbchk块 我们应考虑分裂表 Fragmentation 和分散到其他的活动块 I O最多的表 selectdbsname tabname isreads pagreads diskreads iswrites pagwrites diskwrites isreads pagreads iswrites pagwrites disk rswsfromsysmaster sysptprofwheretabnamenotlike sys anddbsnamenotlike sys orderby5desc可以根据输出得出哪些表有较大的I O 也是我们需要重点优化的表 根据从这个查询获得的输出 您可能需要在dbspace间移动一些表以使磁盘I O平衡得更好 重启后从新计数 MostCPUSQL 捕获消耗CPU最多的SQL语句selectfirst10sqx estcost sqx estrows sqx sqlstatementfromsysmaster syssqexplainorderbysqx estcostdesc技巧 由于该方法只能捕获到当前活动SQL的CPU消耗情况 我们需要多次捕获不同时间段的SQL 查找表锁语句 selectdbsname tabname sum pf rqlock aslocks sum pf wtlock aslockwaits sum pf deadlk asdeadlocksfromsysactptnhdr systabnameswherepf wtlock 0andsystabnames partnum sysactptnhdr partnum anddbsname dbname groupbydbsname tabnameorderbylockwaitsdesc Informix数据库锁表处理 综合业务系统柜员在日终或平时出现锁表导致业务不能进行 比如表外处理时死锁 表名 blankvouchuse 则操作如下 1 以informix用户登陆服务器 dbaccess 选择数据库bias dbs Select fromsystableswheretabname 锁表的表名 记录下字段partnum的值 通过计算器 把该值从10进制变成16进制 2 退出dbaccess到 下 输入命令 onstat k 查找显示的tblsnum的值与partnum相符的记录 记下owner的值 3 onstat u 找到usethread与owner的值相符的记录 找到ssessid 4 onmode zssessid 杀掉死锁的进程 优化 性能规划 深入了解应用与数据库的交互特征 确立良好的设计 开发 测试迭代过程 上线前消除模型上的性能瓶颈 实例调优 建立性能基准 对比调节数据库 操作系统 存储 网络等的配置 主动监控 消除瓶颈 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明显超过平时值 观察数据库日志 发现数据库检查点持续时间 checkpointdurationtime 显著增加 平时在3秒以内就能完成 此时需要10秒甚至更长时间才能完成 处理步骤首先还是查看数据库日志和操作系统日志 排除数据库内部错误和操作系统IO错误 如果用的是阵列 RAID 最好再查看一下阵列的日志 出现这种情况最常见的原因是阵列出了问题 比如电池没电 cache没有打开等等 排除了操作系统和数据库内部错误 就需要了解一下是否有新的应用在进行大批量的数据操作 如INSERT DELETE UPDATE 是否能将这些操作放在系统相对空闲的时候进行 对于大批量的数据导入操作 在INFORMIX9 4中提供了RAW类型的表 由于不记录逻辑日志 插入速度会快很多 导入完成后 再将表修改为正常模式 对普通表应该先导入数据 再创建索引 注意主键 外键默认都会创建索引 应该在数据导入后在创建 不恰当的应用SQL也会导致IO量非常大 可以用案例1中的办法来找到问题SQL 根据实际情况进行处理 案例3 检查点持续时间逐渐缓慢增加问题特征数据库稳定运行一段时间后 性能开始下降 检查点持续时间 checkpointdurationtime 开始逐渐增加 系统CPU空闲降低 WIO有所增加 这些情况往往出现在新的应用上线后一段时间 由于在开发和测试环境中数据量小 性能问题不会暴露 当生产环境数据量增长到一定程度后 性能问题就会出现 针对这种情况 需要确认定期在对数据库 尤其是对数据库中的大表 在定期做收集统计数据的工作 updatestatistics 避免数据量的增大造成系统性能急剧下降 找到被顺序扫描多次的大表及其上的问题SQL 进行分析 采取相应办法尝试减少其上的顺序扫描 创建相应索引 修改应用SQL 及时删除表中不必要的数据 常见调优技巧 找到CPU占用最高的SQL1 在sysmaster库中执行selectsqx estcost sqx sqlstatementfromsyssqexplainorderbysqx estcostdesc注意 此时看到的仅仅是当前正在执行的SQL需要多看几次2 onstat命令onstat gact得到当前正在执行的SQLRunningthreads tidtcbrstcbprtystatusvp classname75a327318a14d6b42condwait sm read 1cpusqlexec76a327b40a14d2802yieldlockwait1cpusqlexec根据rstcb列 不要包括前面的C0000等 仅要后面部分 onstat u grepa14d6b4从第三列sessid得到sessionidonstat gsql即可得到当时正在执行的SQL一般多找几个threads后 就基本可以确定问题SQL 3 示例onstat gactThreads tidtcbrstcbprtystatusvp classname141904841765388030eab82running1cpusqlexeconstat u grep8030eab8Userthreadsaddressflagssessiduserttywaittoutlocksnreadsnwrites8030eab8Y P 131047informix 84022480011167114722onstat gsql131047SessSQLCurrentIsoLockSQLISAMF E IdStmttypeDatabaseLvlModeERRERRVers131047DELETE all testdbDRWait10009 03CurrentSQLstatement deletefrommy tabLastparsedSQLstatement deletefrommy tab得到SQL后 利用setexplainon分析其查询路径 看是否未利用索引 在对大表进行全表扫描根据需要创建相应索引 找到全表扫描较多的表及其SQL1 得到全表扫描较多的表catcheck sql 系统顺序扫描较多时 被多次顺序扫描的大表 如果有 应该考虑增加索引selectfirst5substr t tabname 0 20 tabname substr dbsname 0 10 dbname nrows rowsize p seqscanscosts substr p seqscans 0 8 seqscans substr nrows

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论