Informix 性能调优案例讲解

合集下载

Informix数据库利用索引提高查询效率

Informix数据库利用索引提高查询效率

Informix 数据库利用索引提高查询效率如果查询结果仅为一行或很少几行时(高选择性highselectivity) ,利用索引进行查询会大大提高效率。

相比之下,如果没有索引,查询则只能顺序扫描整个表。

在OLTF环境下,事务处理在很大程度上依赖于索引。

只有在表很小时,才会顺序扫描表。

系统会根据SQL语句中的WHER子句判断是否使用索引。

顺序扫描表会使系统性能受到严重影响。

sysmaster 中sysptntab 表中的pf_seqscnas 列显示了所进行的顺序扫描。

SETEXPLAIF命令同样可以提供关于SQL语句如何访问数据库中的重要信息。

DSS环境中的应用经常会查询出大量数据 (低选择性lowselecviity),甚至整张表。

顺序扫描对于这样的查询更为适合,因为此时顺序扫描可以利用lightscan 。

lightscan 缓冲区位于共享内存的虚拟段与驻留段无关。

关于lightscan ,以后章节中还将详述。

建立索引的代价虽然索引可以很大地提高高选择性查询的性能,但维护这些索引是需要付出代价的。

以INSERT语句为例,在进行插入时系统首先将读取被插入表的索引以定位新记录关键字的位置。

然后系统在将新记录写入数据页的同时还必须将新索引项写入索引节点。

如果导致索引节点分裂,系统则必须多次写索引页。

与INSERT语句相似,DELETED句也要求读入整个索引以定位索引节点位置,并置上删除标志。

在删除索引时还需要处理索引节点合并、整理等问题。

在执行UPDATE!句时,必须首先定位并且删除旧的关键字然后插入新的关键字。

所以在UPDATED句必须两次读取索引。

在实际系统中通常把索引的根节点和第一级节点读入共享内存中,但如果需要访问更低层次的索引节点则必须进行磁盘操作。

索引类型通常建立分离索引 ( detached) 或基于表达式的索引分片( expressionbasedfragmented )。

分离索引和分片索引可以使得索引的extent 内页连续,因而能提高性能。

数据库性能监控与调优的实际案例分析

数据库性能监控与调优的实际案例分析

数据库性能监控与调优的实际案例分析在现代信息化社会中,数据库成为了企业信息存储和管理的核心工具。

然而,随着数据量的不断增长和业务复杂度的提升,数据库性能问题变得日益突出。

因此,数据库性能监控与调优成为了企业不可或缺的工作。

本文将通过一个实际案例,介绍数据库性能监控与调优的实际操作过程,并分享相关经验与技巧。

案例背景:某电商企业的数据库在最近一段时间内出现了严重的性能问题,数据库响应时间长、查询效率低下,导致业务响应速度变慢,用户体验下降。

为了解决这一问题,该企业决定进行数据库性能监控与调优工作。

1. 数据库性能监控性能监控是数据库性能调优的首要任务。

通过对数据库的持续监控,可以及时发现和解决潜在的性能问题。

以下是该企业在性能监控方面采取的措施:1.1 监控工具的选择该企业选择了一款性能监控工具,能够实时监控数据库的各项指标,如CPU利用率、内存使用率、磁盘IO、锁的情况等。

监控工具能够生成图表和报表,以便评估数据库的性能状况。

1.2 设置监控指标的阈值为了及时发现异常,该企业设置了数据库性能监控指标的阈值。

一旦指标超过阈值,监控系统会自动发送警报通知运维团队,以便他们能够及时采取相应的措施。

1.3 日常性能分析该企业的运维团队定期进行日常性能分析,对数据库的性能指标进行监测和分析。

通过分析报表和趋势图,他们能够了解数据库的性能变化趋势,并及时发现潜在的性能问题。

2. 数据库性能调优除了监控数据库的性能指标外,数据库性能调优也是解决性能问题的关键步骤。

根据该企业的实际情况,下面是他们采取的一些调优措施:2.1 优化查询语句通过对数据库中频繁执行的查询语句进行优化,可以显著提升数据库的查询效率。

该企业使用了数据库性能分析工具,对慢查询进行识别和优化。

优化包括添加索引、重写查询语句、分解复杂查询等。

2.2 资源管理与配置调整通过对数据库的资源管理和配置进行调整,可以最大限度地提升数据库的性能表现。

该企业根据数据库的负载情况,调整了内存分配、磁盘IO配置等参数,以优化系统的整体性能。

Linux高级存储性能调优使用SSD和NVMe

Linux高级存储性能调优使用SSD和NVMe

Linux高级存储性能调优使用SSD和NVMe 随着科技的不断进步,存储技术也在不断地发展和创新。

固态硬盘(Solid State Drive,简称SSD)和非易失性内存(Non-Volatile Memory Express,简称NVMe)作为高效的存储解决方案,已经逐渐被广泛应用于各种领域。

在Linux系统中,使用SSD和NVMe进行高级存储性能调优可以显著提升系统的响应速度和效率。

本文将介绍Linux下如何利用SSD和NVMe进行高级存储性能调优的方法和技巧。

一、使用I/O调度程序在Linux中,可以通过选择合适的I/O调度程序来优化存储性能。

传统的I/O调度程序如CFQ、Deadline和Noop已经无法适应SSD和NVMe的高性能需求。

为此,Linux内核引入了新的I/O调度程序BFQ (Budget Fair Queueing)和KYBER,这两者对于SSD和NVMe的性能优化效果更好。

BFQ是一种基于权重的I/O调度程序,它可以根据应用程序的优先级和权重来调度磁盘访问,以最大化整体系统性能。

KYBER则是一种基于队列的I/O调度程序,通过减小队列深度和引入最小延迟来减少I/O的等待时间。

二、启用TRIM和DiscardTRIM和Discard是SSD和NVMe存储中的常用技术,用于优化垃圾回收和擦除操作。

TRIM命令可以通知SSD和NVMe存储设备哪些数据已经被删除,从而加速垃圾回收和写入操作。

为了启用TRIM功能,我们需要在Linux系统中开启相关的支持。

首先,我们需要确认文件系统支持TRIM功能。

常见的文件系统如ext4、XFS和Btrfs都支持TRIM。

然后,使用以下命令查看SSD和NVMe设备是否支持TRIM:$ sudo hdparm -I /dev/sda如果输出中包含“TRIM supported”字样,则表示该设备支持TRIM 功能。

接下来,在/etc/fstab文件中添加以下行以启用TRIM:/dev/sda / ext4 discard,noatime 0 1最后,使用以下命令重新挂载文件系统:$ sudo mount -o remount /三、开启存储多队列和中断分配SSD和NVMe技术的出现,使得存储设备具备了更高的I/O处理能力。

informatica性能调优方法

informatica性能调优方法

一、Suorce调优1.文本文件:-调优Line Sequential Buffer Length(1024)2.关系型数据库:-在Source Qualify优化SQL-在源数据增加索引-增加Database Network Packet size-当DB与informatica在同一台机器上使用IPC协议二、Target调优1.目标为文本文件:-调优Line Sequential Buffer Length(1024)2.目标位关系型数据库-删除目标索引和约束-增加checkpoit interval-使用Bulk Loading和External loading-增加Database networkPacketsize三、Mapping调优>最少化转化组件>减少不必要的link>对Aggregator、Joiner、Rank、Lookup等组件,减少连接的input/output和output字段>Single Pass:读一次数据,多处使用>减少数据类型转换:数值的比较比字符串要快>减少转换错误:使用session tracing terse>组件调优:Lookup组件、Filter组件、Aggregator组件、Joiner组件调优、调优Sequence Generator>调优表达式>增加Partition>调优Session参数四、System调优>增加network speed:本地速度一般是网络的5-20倍;文件拷贝到本地>使用informatica Grid>当只处理7-bit ASCII或EBCDIC数据时,选用ASCII data movement mode :只是用一个字节存储数据。

>减少Paging(虚拟内存):在Unix系统下,使用processor binding将资源分配给informatica。

informatica性能调优

informatica性能调优

Infa性能调优大多我们运用的工具都会提到一个共同的问题------性能调优。

什么是性能调优,每个人都有自己的一个定义,我比较喜欢的一个定义就是:性能调优就是尽力去消除系统中存在的性能瓶颈。

这是一个循环往复的过程,首先找到性能瓶颈,然后采取各种方法尽力消除它,然后寻找下一个性能瓶颈,然后消除它,循环往复,直到性能达到预期目的为止。

比较喜欢这个定义在于它告诉我们,性能调优没有一个最终的答案,每一次优化只要达到我们的期待的结果即是优化完成。

大多我们运用的工具都会提到一个共同的问题------性能调优。

什么是性能调优,每个人都有自己的一个定义,我比较喜欢的一个定义就是:性能调优就是尽力去消除系统中存在的性能瓶颈。

这是一个循环往复的过程,首先找到性能瓶颈,然后采取各种方法尽力消除它,然后寻找下一个性能瓶颈,然后消除它,循环往复,直到性能达到预期目的为止。

比较喜欢这个定义在于它告诉我们,性能调优没有一个最终的答案,每一次优化只要达到我们的期待的结果即是优化完成。

性能优化应该从整个系统上去规划,使系统能有一个理想的性能平衡。

换句话说就是使系统中的各个部分:应用软件、数据库、硬件资源共同达到一个性能的最优化,让各部分资源能用自己最擅长的一面最大程度的提升系统性能,最终达到一个系统级的性能平衡。

在此我们将对Informatica性能优化做一个系统的介绍,而其中也在一定程度上运用系统性能平衡的规则进行调优指导。

在此我们将按调优的一个通用的顺序进行介绍,或者说是一个调优Guideline, 即首先定位性能瓶颈,其次进行性能调优,最后介绍一些调优经验。

一、性能瓶颈性能调优时,首要的任务即是确定性能的瓶颈所在。

在对Informatica进行瓶颈确定时,我们应首先排除是否特殊情况,即从当时网络、数据库、服务器是否运行正常、是否忙等情况排除,当确认是普通情况后,我们便可以按以下步骤进行性能瓶颈确定。

1.Target确定瓶颈是否发生在ETL中的L上。

数据库系统的性能调优经验总结与实用案例分析

数据库系统的性能调优经验总结与实用案例分析

数据库系统的性能调优经验总结与实用案例分析数据库系统是现代软件系统中不可或缺的关键组成部分。

随着数据量不断增长,数据库系统的性能优化变得尤为重要。

在这篇文章中,我们将总结一些数据库系统的性能调优经验,并通过实用案例分析来展示这些经验的实际应用。

一、数据库性能调优的重要性一个高效的数据库系统可以帮助组织提高业务处理能力,减少响应时间,提升用户体验。

在大部分的生产环境中,数据库系统常常面临来自多个方面的性能压力,例如高并发访问,复杂查询和大数据量处理等。

二、提高数据库性能的思路和方法1. 优化数据库结构在性能调优的过程中,数据库结构的设计是至关重要的一步。

使用合适的数据类型和合理的索引设计可以极大地提高查询效率。

同时,避免过度的冗余数据和不必要的字段也能提升性能。

2. 确定性能瓶颈在进行性能调优时,首先需要明确系统的性能瓶颈是什么。

通过监控和分析数据库系统的各项指标,如CPU利用率、内存使用率、磁盘IO等,可以准确地找出系统的瓶颈所在,并采取有针对性的优化措施。

3. 优化查询语句优化查询语句是提升数据库性能的重要手段。

通过合理设计查询语句、使用合适的索引、避免全表扫描等优化策略,可以显著减少查询时间。

4. 设置适当的缓存和缓冲区将频繁访问的数据或查询结果缓存到内存中可以减少磁盘IO操作,提升数据访问的速度。

同时,调整数据库的缓冲区大小也能对性能有所提升。

5. 分区和分片当数据库中的数据量变得非常大时,可以考虑采用数据分区和数据分片的方式来提高性能。

通过将数据分散存储在多个物理设备上,可以增加并发访问能力和减轻单台服务器的压力。

三、实用案例分析下面通过两个实用案例分析来展示数据库系统性能调优的应用。

案例一:病例管理系统的性能优化病例管理系统是医院管理工作的重要组成部分,但在面对大量同时访问的情况下,性能出现了明显的问题。

在优化过程中,经过仔细分析和优化查询语句、添加必要的索引、增加服务器内存缓冲区等措施,系统的响应时间减少了50%以上,用户的满意度也得到显著提升。

Informatica PowerCenter 性能调优简述

Informatica PowerCenter V7.X性能调优简述杨晓东姜炜2006年04月目录数据流程生命周期 (3)流程调优最重要 (5)单项作业调优简述 (6)调优综述 (8)Performance Tuning Overview (8)Identifying the Performance Bottleneck (8)Optimizing the Target Database (9)Optimizing the Source Database (10)Optimizing the Mapping (10)Optimizing the Session (11)Optimizing the System (14)Pipeline Partitioning (14)数据流程生命周期图表: 数据轨迹图示1)原则:定义性能标准(合理的期望值),在标准内要最大化利用硬件资源,进行作业调优。

2)从逻辑上划分,上图均为独立服务器,物理上可以位于同一台机器上。

但各环节点,有关性能的影响要综合考虑。

3)综合性能调优,要统计以下各环节在某一时间段内的几项平均指标:数据源数据库/服务器: 统计ETL作业执行时间段内CPU、内存、Swap、I/O、进程指标值,以便于分析A和C 之间的网络:主要观察A和C服务器的I/O资源,但B:网络的带宽会影响读速度和传输效率。

数据集成服务器:统计ETL作业执行时间段内CPU、内存、Swap、I/O、进程指标值,以便于分析C和E之间的网络:主要观察C和E服务器的I/O资源,但D:网络的带宽会影响传输效率及写入速度。

数据目标DB/服务器:统计ETL作业执行时间段内CPU、内存、Swap、I/O、进程指标值,以便于分析可将ETL过程视为一个组成:主要是前端应用,要考虑对E服务器的访问所造成的CPU、内存、I/O的消耗。

一般此节点,应该尽量避免与ETL作业执行时间发生冲突。

注:一般系统CPU和内存资源消耗80% 以上,整体性能会下降。

数据库优化与性能调优案例分析

数据库优化与性能调优案例分析在现代的信息时代,数据库作为存储组织和管理数据的重要工具,对企业的运行和决策起着至关重要的作用。

然而,随着数据量的不断增加和业务需求的提高,数据库的性能问题也变得越来越突出。

本文将通过分析一个数据库优化与性能调优的案例,介绍一些常见的数据库问题与解决方案。

案例背景:某公司是一家电子商务企业,拥有海量的用户信息和订单数据。

随着业务的快速发展,他们的数据库开始出现性能瓶颈,并且有时候会出现意外的数据库崩溃,给企业的日常运营带来了很大的困扰。

为了解决这些问题,他们决定进行数据库优化与性能调优。

问题分析与解决方案:1. 查询优化针对数据库查询的慢问题,通常的解决思路是优化查询语句和创建合适的索引。

在这个案例中,通过对数据库的查询进行分析,发现了一些可以优化的地方。

首先,对于经常使用的查询,可以将其转化为存储过程以提高效率。

其次,通过优化查询语句的条件和JOIN操作,可以减少数据库的查询时间。

最后,对于频繁访问的表,可以创建合适的索引来加速查询操作。

2. 表结构优化数据库中的表结构对于数据库的性能有很大的影响。

针对这个案例中的问题,可以考虑对表结构进行优化。

首先,可以通过分析数据的关联性和重要性,对表进行合理地拆分和归并。

其次,可以对表的字段进行合理地设计和选择,减少不必要的冗余和保存空间。

此外,还可以通过使用数据库的分区功能来提高查询效率。

3. 服务器调优在数据库优化与性能调优中,服务器的配置是一个重要的环节。

针对这个案例中的问题,可以通过合理地调整服务器的资源分配和配置来提高数据库的性能。

首先,可以增加服务器的内存容量,以提高数据库的缓存效果。

其次,可以调整数据库的并发连接数来适应当前的业务需求。

此外,还可以通过合理地调整服务器的磁盘IO性能和网络带宽来提高数据库的读写效率。

4. 数据库备份与恢复在日常运营中,数据库的备份与恢复是至关重要的。

针对这个案例中的问题,可以通过合理地设置数据库的备份策略和恢复机制来提高数据库的可靠性和可用性。

数据库性能优化案例分析和优化数据库性能的实际案例

数据库性能优化案例分析和优化数据库性能的实际案例数据库作为管理和存储数据的重要工具,在现代信息系统中扮演着至关重要的角色。

然而,随着数据量的不断增长和业务的复杂化,数据库性能问题也随之而来。

为了解决这些问题,数据库性能优化成为了关注的焦点。

本文将通过分析实际案例,探讨数据库性能优化的方法和实践。

一、案例一:查询性能优化在一个电商平台的数据库中,查询操作占据了绝大部分的数据库负载。

客户在平台上进行商品搜索等操作时,查询的速度变慢,影响了用户体验和交易效率。

经过分析,我们发现以下几个问题:1. 没有适当的索引:索引是加速数据库查询的关键因素。

在该案例中,我们发现很多查询语句没有合适的索引,导致数据库需要进行全表扫描,严重影响了查询的速度。

解决方案:根据实际查询需求和数据表的特点,合理地创建索引,以提高查询效率。

但是需要注意的是,过多或者过少的索引都会对性能产生负面影响,需要做好平衡。

2. 查询语句优化:检查并优化查询语句,避免使用过于复杂的 SQL 语句,例如多重嵌套查询、不必要的关联等。

通过优化查询语句,减少数据库的负载,提高查询速度。

3. 数据库服务器性能不足:在高峰期,数据库服务器的性能出现瓶颈,无法满足用户的查询需求。

这可能是由于硬件配置不足或者数据库参数设置不合理等原因。

解决方案:可以考虑升级硬件设备,并对数据库参数进行调整,以提高数据库服务器的性能。

二、案例二:写入性能优化在一个订单管理系统的数据库中,写入操作频繁而且耗时较长,导致订单处理效率低下。

在分析问题原因后,发现以下几个关键问题:1. 锁冲突:在高并发情况下,多个写入操作会引发锁竞争,导致大量的阻塞和等待,进而降低数据库的写入性能。

解决方案:通过合理的事务隔离级别和锁调整,减少锁的粒度,降低锁冲突的可能性。

可以使用乐观锁或者行级锁来解决并发写入问题。

2. 数据库日志写入性能不足:数据库的写入操作通常需要将数据写入到日志中,以确保数据的持久性。

informix常用知识


-u
执行立即 关机,让实例从 single-user 或 on-line 状态转到 quiescent 状态
-k -y
执行立即 关机,让实例从任何其他状态转到 off-line 状态 对所有问题自动地回答 “yes”
日常中常用的工具
• 一、数据的备份恢复( ontape 、 dbexport 、 dbimport )
状态
Offline Fast-Recovery Quiescent Administrative
说明
实例停止;软件没有在运行 实例正在启动,正在从停止状态进入一个一致的状态 实例已经启动,但是用户不能连接;不能运行 SQL 实例已经启动;只有 Admin 用户可以连接并运行 SQL。也称为 single-user 模式 正常运行状态;所有用户都可以连接并运行 SQL 实例正在停止;用户不能连接;不能运行 SQL
• 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
• 这两种方法的区别是 • 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级)和逻辑日志备份
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Informix 性能调优案例讲解2008 年 10 月 21 日

在实际的生产运行环境中,笔者在国内很多客户现场都看到开发人员和系统管理人员遇到很多有关于 Informix 数据库引起的性能问题,进而被多次问起如何进行 Informix 数据库性能调优,笔者根据自己在工作中对 Informix 数据库的使用经验积累写下这篇文章。

概述

在实际的生产运行环境中,笔者在国内很多客户现场都看到开发人员和系统管理人员遇到很多有关于 Informix 数据库引起的性能问题,进而被多次问起如何进行 Informix 数据库性能调优,笔者根据自己在工作中对 Informix 数据库的使用经验积累写下这篇文章。

性能优化原则 包括:  性能规划:深入了解应用与数据库的交互特征,确立良好的设计、开发、测试迭代过程,上线前

消除模型上的性能瓶颈。  实例调优:建立性能基准,对比调节数据库、操作系统、存储、网络等的配置,主动监控、消除

瓶颈。  SQL 调优:书写高效 SQL,优化相关数据库对象,充分借助优化器,确定最佳执行计划。

性能优化流程 1. 首先执行下面的初始检查:

回页首 回页首o 获取直接用户的使用反馈,确定性能目标和范围。

o 获取性能表现好与坏时的操作系统、数据库、应用统计信息。

o 对数据库做一次全面健康检查。

2. 根据收集的信息,以及对应用特性的了解,构建性能概念模型,明确性能瓶颈所在,以及导致性能的根本原因。 o 首先应该排除操作系统、硬件资源造成的瓶颈。

o 然后针对数据库系统性能进行分析

o 必要时,还需要检查应用日志,因为系统性能问题也可能由于应用非 SQL 部分造成瓶

颈。 3. 提出一系列针对的优化措施,并根据它们对性能改善的重要程度排序,然后逐一加以实施。不要一次执行所有的优化措施,必须逐条尝试,逐步对比。 4. 通过获取直接用户的反馈验证调节是否已经产生预期的效果,否则,需要重新提炼性能概念模型,直到对应用特性了解进一步准确。 5. 重复上述,直到性能达到目标或由于客观约束无法进一步优化。

当从操作系统层面判断系统存在瓶颈并且是数据库引起的,那么可以从下面的流程图来解决 图 1. 性能诊断优化流程

(点击查看大图) 典型性能问题案例 案例 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),避免数据量的增大造成系统性能急剧下降。 利用 4.2 中描述的办法找到被顺序扫描多次的大表及其上的问题 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

相关文档
最新文档