当前位置:文档之家› 第 4 部分 性能调优

第 4 部分 性能调优

第 4 部分 性能调优
第 4 部分 性能调优

开始之前

关于本系列

您打算获得 IBM IDS 11 系统管理(考试 918)的认证吗?如果是这样,本系列正好适合您。这个分 8 部分的 IDS 认证准备系列教程覆盖了在参加考试之前需要了解的所有主题。即使您不打算马上参加认证考试,这个教程系列也可以帮助您了解 IDS 11 中的新特性。

关于本教程

IDS 是一种复杂的、可调的产品。本教程将帮助您从服务器获得最佳性能。

本教程还介绍 IDS 11 中的子系统,并展示如何查看它们。在本教程中,您将学习:

?检查点

?恢复

?物理日志记录

?逻辑日志记录

?异步 IO VP

?网络参数

?磁盘资源

?CPU VP 资源

?PDQ 和 Memory Grant Manager

?扫描线程

?索引创建

?统计信息维护

?调优 IDS 系统以提高性能

?理解操作系统资源方面的考虑

?检查点

?恢复

?物理日志记录

?逻辑日志记录

?异步 IO VP

?网络参数

?磁盘资源

?CPU VP 资源

?PDQ 和 Memory Grant Manager ?扫描线程

?索引创建

?统计信息维护

性能调优概述

?硬件资源

?操作系统配置

?网络配置和流量

?内存管理

当试图发现性能问题或者对系统作出调整时,必须考虑这些因素。

硬件资源

硬件主要由以下几个部分组成(但不止这些):

?CPU

?磁盘 i/o 子系统

?物理内存

操作系统配置

操作系统需要在内存中有一个页面,以便在那个页面上执行操作。如果操作系统需要分配内存供一个进程使用,它首先尝试提取它发现的内存中未被使用的页面。但是,如果没有空白页面呢?

这时内存管理系统必须选择其他进程正在使用的页面。引擎尽量确定看上去短时间内最不可能需要的页面,以便用新的页面置换它们。找到那些可以被置换的页面的过程就叫做页面扫描。页面扫描会增加对 CPU 的利用。

大多数内存管理系统使用最近最少使用算法以确定内存中哪些页面可以被置换。这些页面首先被复制到磁盘上。复制完毕后,内存便释放出来,供其他进程使用。当一个页面被写出到磁盘上时,它被写到一个称作交换空间的特定区域。这个空间通常是一个专用磁盘或磁盘分区。这个磁盘或磁盘分区称作交换空间或交换区,它们将存放这些交换出的页面。这个过程称作换页(paging)。换页过程需要利用 I/O 资源和 CPU 周期。

在某个时候,必须将换出的页面镜像换回到内存中,以便需要它们的进程可以使用它们。所以对于其他较旧的页面(最近没有被使用的页面),这个周期又开始了。如果非常频繁地这样来回交换,操作系统可能达到这样一种状态:内核几乎完全被用于页面的换进和换出。这种状态称作系统失效(thrashing),所有有用的工作都被终止。

为了防止系统失效,有些操作系统的内存管理算法大致地确定一个阈值。它不是寻找较旧的页面,而是换出用于某个特定进程的所有页面。这个过程称作交换(swapping)。

每个被换出的进程最终必须被换回到内存中。这大大增加了对交换设备的磁盘

I/O,也增加了进程间切换所需的时间,因为现在每次上下文切换还必须将与进程相关的所有页面换进内存。因此,性能受到将那些页面从交换磁盘传输到内存的速度的限制。正在进行交换的系统会严重超载,其吞吐量会降低。

很多操作系统在提供关于换页活动的信息方面有一些共同之处,这些信息包括执行的页面扫描次数、从内存送出(换出)的页面数量和送入(换进)内存的页面数量:

?换出是关键因素。当操作系统找不到已被释放的页面时,就进行换出。

?内存使用正成为瓶颈的一个早期的指示符是高页面扫描率。

?如果一个进程被终止,则内存中的所有页面被标记为 freed(已释放),并且可以被重用,因此换入活动对内存负载的影响可能难以估计。另一方

面,很多进程的开始会导致较高的换进率,但是对性能没有显著的影响。

可以使用下面的公式,根据给定的 CPU 使用情况和换页率计算预计的换页延时:

PD = (C/(1-U)) * R * T

表 1. 符号描述

符号描述

PD 换页延时

C 用于一个事务的 CPU 服务时间

U 十进制表示的 CPU 利用率

R 换出率

T 用于交换设备的服务时间

随着换页的增加,CPU 利用率也增加,因此它们之间存在联系。如果每秒 15 次的换页率导致 3% 的 CPU 利用率,那么将换页率增加到每秒 30 次将导致 CPU 利用率 3 个百分点。换页率越接近交换阈值,CPU 利用率增加得越快,直到发生交换。如果负载进一步增加,则系统将开始失效。

ONCONFIG

VPCLASS

IDS 是可伸缩的,因此对它进行调优,以容纳大型实例。

用于调优 VP 的主要参数是 VPCLASS 。

下面的参数已经被弃用,并被 VPCLASS 替代:

?NUMCPUVPS

?SINGLE_CPU_VP

?AFF_SPROC

?AFF_NPROCS

?NOAGE

?NUMAIOVPS

VPCLASS 语法

VPCLASS 参数中的第一项提供所描述的虚拟处理器类型的名称。VPCLASS 名称不是区分大小写的。

可以为用户定义例程或 DataBlade 模块定义新的虚拟处理器类型,或者为预定义的虚拟处理器类型设置值。

注意:下面的类型名称是预定义的:

清单 1. 预定义的 VPCLASSes

adm lio shm

adt msc soc

cpu ntk str

jvp opt tli

kio aio pio

encrypt

classname 变量是必需的。与大多数配置参数不同,VPCLASS 有一些选项字段,它们可以以任意顺序出现,之间用逗号隔开。字段中不能使用空格。VPCLASS 有以下空格:

清单 2. VPCLASS 的次要参数

num=num_VPs

max=max_VPs

aff=affinity

noage

noyield

要了解更多信息,请参阅文档。

多个 CPU 的配置

如前所述,IDS 是可伸缩的,可以对它进行配置,以容纳和使用多 CPU 的计算机。

CPU VP 的数量可以这样配置:

清单 3. 多个 CPU VP

VPCLASS cpu,num=3

Java VP

VPCLASS 配置参数的 JVP 选项设置 Java 虚拟处理器的数量。当使用 IBM Informix JDBC Driver 时,这个参数是必需的。在 UNIX 上,必须定义多个 Java 虚拟处理器以并行执行 Java 用户定义例程。

网络 VP

对于 VP 类型 tli、shm、str 和 soc,必须将 NETTYPE 配置参数的 VP_class 字段设置为 NET。

例如,如果 VPCLASS 参数被设置如下:

VPCLASS shm,num=1

VPCLASS tli,num=1

那么 NETTYPE 参数应该设置为:

NETTYPE ipcshm,1,100,NET

NETTYPE tlitcp,1,100,NET

EXTSHMADD 指定增加的扩展段(extension segment)的大小

SHMADD 指定当数据库服务器请求更多内存时内存的增量

SHMBASE 指定共享内存基址,与计算机有关。这个值取决于是什么平台,处理器是 32 位还是 64 位的。要了解关于使用哪个 SHMBASE 值的信息,请查看计算机说明

SHMTOTAL 指定允许数据库服务器使用的最大内存数

SHMVIRTSIZEL 指定数据库服务器使用的第一块内存的大小

回页首

管理网络参数以获得最佳通信性能

DBSERVERNAME 和 DBSERVERALIASES 参数对应于 sqlhosts 文件或注册表第一列中的条目。一个 NETTYPE 条目可以指定一个接口/协议组合。NETTYE 与DBSERVER 或 DBSERVERALIAS 条目不是匹配的,而是对应于 sqlhosts 文件中第二列中有相应协议的那一行。根据关于分配多少个 poll 线程的定义,数据库服务器将为每个惟一的 NETTYPE 条目运行一个或多个 poll 线程。

NETTYPE 配置参数还提供用于一个相应的接口/协议组合的附加配置信息。这使DBA 可以分配一个初始缓冲区以处理用户,并为一个接口/协议组合分配不止一个 poll 线程。 NETTYPE 还指定 poll 线程将在其上工作的虚拟处理器类型(CPU 或 NET)。

poll 线程可以在 CPU 虚拟处理器(VP)或网络 VP 上运行。对于单 CPU 机器,poll 线程通常在 CPU VP 上可以更高效地运行。但是,在具有大量远程客户机的多处理器计算机上,在 NET VP 上运行 poll 线程可以获得更好的吞吐率。

默认情况下,如果没有为一个接口/协议组合设置 NETTYPE,则数据库服务器将在内部运行 poll 线程。默认情况下,与 DBSERVERALIAS 匹配的、用于特定接口/协议组合的 poll 线程将在 CPU VP 上运行,因为数据库服务器假定这是任何用户的主接口。对于其他接口/协议组合,如果没有指定 VP 类型,则默认地在 NET VP 上运行那些 poll 线程。

如果 poll 线程在 NET VP 上运行,那么引擎将为每个 poll 线程启动一个 NET VP。这是因为每个 poll 线程都需要自己的虚拟处理器。

对于在内部运行(即在 CPU VP 上运行)的 poll 线程也是如此。如果指定 VP 类型为 CPU,那么每个 CPU VP 上只能运行一个 poll 线程。如果数据库服务器没有足够的 CPU VP,则数据库服务器将委派 NET VP 处理溢出。

对于较小的系统,每个网络接口/协议组合只需一个 poll 线程,即只需一个虚拟处理器。对于有 200 个以上并发网络用户的系统,增加更多的 poll 线程(随之增加网络虚拟处理器)可以取得更好的性能。由于用户负载较高,可能需要进行试验,以确定 poll 线程(不管是内部运行还是在 NET VP 上运行)和要启动的网络 VP 的数量(如果在网络虚拟处理器上运行的话)的配置。

如果对于给定的单个端口和相应侦听线程的接口/协议组合,数据库服务器不能令人满意地处理连接请求,那么可以通过以下方法提高连接吞吐率:

?分配更多的侦听线程

?增加一个网络接口卡

分配更多的侦听线程

一个侦听线程专用于它所在的端口。首先,使用 DBSERVERALIASES 参数为每个附加端口指定一个 dbservername。

引擎只能分配一个共享内存侦听线程。但是对于网络连接,每个 DBSERVERALIAS 将处理 NETTYPE 设置,并分配一组相同的 poll 线程和连接缓冲区。

对于 sqlhosts 文件或注册表中的每个 DBSERVERALIAS,必须指定一个接口/协议组合。

增加一个网络接口卡

有时候,用于主计算机的一个网络接口卡不能达到要求的连接吞吐率。或者,可能需要将数据库服务器连接到不止一个网络。在这种情况下,可以增加一个网络接口卡。

为支持多个网络接口卡,必须为每个卡赋予一个惟一的主机名或网络地址。

增加一个网卡后,就可以增加一个附加的侦听线程,这个侦听线程在新增的网卡上运行。数据库服务器将使用 sqlhosts 文件中的 hostname 条目以确定使用哪个网卡。

网络缓冲区

调整网络缓冲区的大小以容纳一个常见的请求,这样可以避免将一个请求拆分成多个报文,从而提高 CPU 利用率。但是,这样做时要小心,因为数据库服务器会为所有活动的连接动态地分配指定大小的网络缓冲区。如果缓冲区配置得太大,就会消耗大量的内存。

数据库服务器从全局内存池中为请求报文分配网络缓冲区。当数据库服务器服务完一个客户机请求之后,它将那些缓冲区返回给公共网络缓冲池。这个缓冲池在使用 SOCTCP、IPCSTR 或 TLITCP 网络连接的会话之间共享。

数据库管理员可以用以下方法控制自由缓冲区阈值和每个缓冲区的大小:?NETTYPE 配置参数

?IFX_NETBUF_PVTPOOL_SIZE 环境变量

?sqlhosts 文件或注册表中的 IFX_NETBUF_SIZE 环境变量和 b(客户机缓冲区大小)选项

NETTYPE 配置参数

数据库服务器维护自由网络缓冲区的一个阈值。这是为了防止从网络缓冲池中频繁地分配和回收共享内存。如果在 NETTYPE 参数中指定一个用户数量,则数据库服务器利用这个值,并维护阈值,以匹配共享内存的分配。

数据库服务器使用下面的公式计算网络缓冲池中自由缓冲区的阈值:

free network buffers threshold = 100 + (0.7 *

number_connections)

对于 TCPIP 连接(即 SOCTCP、TLITCP 或 IPCSTR),number_connections 的值与 NETTYPE 条目的第三个字段相关联。共享内存连接(IPCSHM)不使用这个公式以计算 connections_used。

如果没有指定,NETTYPE 参数第三个字段的默认值是 50 个用户。

IFX_NETBUF_PVTPOOL_SIZE 环境变量

数据库服务器提供了一种机制以支持使用 SOCTCP、IPCSTR 或 TLITCP 网络连接的每个会话的私有网络缓冲区。

当很多连接和会话经常活动时,这些私有网络缓冲区可以带来以下好处:?减少公共网络缓冲池的连接

?节省 CPU 资源,因为不需要为每个网络传输从公共网络缓冲池中分配网络缓冲区和为之回收网络缓冲区。这些缓冲区将静态可用。

用于每个会话的私有网络缓冲池的大小由 IFX_NETBUF_PVTPOOL_SIZE 环境变量指定。默认大小是一个缓冲区。

可以使用下面表中的 onstat 选项以监视网络缓冲区的使用:

表 3. 用 onstat 监视网络缓冲区

选项输出字段字段描述

onstat -g ntu q-pvt 私有缓冲池中用于该会话的自由缓冲区的当前数量和最高数量

onstat -g ntm q-exceeds 超过自由缓冲区阈值的次数

onstat -g ntu 选项按以下格式显示 q-pvt 输出字段:

current number / highest number

如果自由缓冲区的数量(q-pvt 字段中的值)始终为 0,那么可以采取以下几种行动之一:

?使用环境变量 IFX_NETBUF_PVTPOOL_SIZE 增加缓冲区的数量

?使用环境变量 IFX_NETBUF_SIZE 增加每个缓冲区的大小

q-exceeds 字段表明自由共享网络缓冲池的阈值被超过的次数。当超过这个阈值时,数据库服务器将未使用的网络缓冲区(超过这个阈值的部分)返回给全局内存池。最佳情况下,这个值应该总是为 0 或者一个很低的数字。这是服务器不在分配或回收网络缓冲区的一个指示符。

IFX_NETBUF_SIZE 环境变量

IFX_NETBUF_SIZE 环境变量指定公共网络缓冲池中每个网络缓冲区和私有网络缓冲池的大小。默认大小为 4KB。

使用 IFX_NETBUF_SIZE 配置一个较大的缓冲区可以减少接收每个分组所需的开销。

如果知道客户机会发送大于 4B 的分组,可以将 IFX_NETBUF_SIZE 配置为平均分组大小。客户机在以下几种情况下会发送大型分组:

?表装载

?行大小大于 4KB

?发送简单的大型对象

sqlhosts 的 b 选项对应于 IFX_NETBUF_SIZE 参数。sqlhosts 选项的值通常应该与 IFX_NETBUF_SIZE 的值匹配。

可以使用下面的 onstat 命令查看网络缓冲区大小:

回页首

自调优

IDS 11 在某些方面会自动调优。

自动检查点

数据库服务器会自动调整检查点频率,以避免事务阻塞。为此,服务器监视物理和逻辑日志的消耗情况以及关于过去检查点性能的信息。

然后,必要时服务器更频繁地触发检查点,以避免事务阻塞。为了保存关于最近检查点性能的信息,Informix Dynamic Servers 在 SYSMATER 数据库中增加了下面两个表:

表 4. 用于检查点的新的 Sysmaster 表

表描述

syscheckpoint 存放关于最近 20 个检查点的历史

sysckptinfo 跟踪检查点活动

由于数据库服务器在检查点处理期间不阻塞事务,LRU 刷新应该放缓。如果服务器不能在物理日志被消耗(这样会导致事务阻塞)之前完成检查点处理,并且不能增加物理日志的大小,那么可以配置服务器,使之更积极地进行 LRU 刷新。

增加 LRU 刷新会影响事务性能,但是可以减少事务阻塞。如果没有配置服务器使之更频繁地进行 LRU 刷新,那么只有当服务器找不到低优先级的缓冲区进行页面置换时,服务器才自动调整 LRU 刷新,使之变得更积极。

ONCONFIG 参数 AUTO_CKPTS 启用自动检查点,默认情况下,在配置文件中它是自动启用的。

可以通过将 onmode -wf AUTO_CKPTS 设为 0,或者将 AUTO_CKPTS 配置参数设为 0 以关闭自动检查点。

如果关闭了 AUTO_CKPTS,则 Informix Dynamic Server 只根据以下 4 个事件触发检查点:

?诸如归档、onmode -c、增加数据库空间、启动和关闭服务器之类的管理事件

?物理日志满了 75%。确保物理日志较大,以避免在达到 CKPTINTVL 之前发生检查点处理

?每个逻辑日志空间一个检查点:Informix Dynamic Server 不能覆盖包含当前检查点的逻辑日志,所以它必须在转移到那个逻辑日志之前触发检查点

?ONCONFIG 参数 CKPTINTVL

LRU 的自动调优

用于使用间歇性检查点刷新每个缓冲池的 LRU 设置对于检查点性能并不重要。只有当维护足够多干净的页面用于页面置换时,才需要进行 LRU 设置,以减缓LRU 刷新。

每当发生页面置换时,数据库服务器自动调优 LRU 刷新。

发生检查点之后,如果在之前的检查点间歇期间发生了页置换前台写操作,则数据库服务器将 LRU 设置增加 10%,并且在随后的每个检查点继续增加 LRU 刷新,直到页置换前台写操作停止,或者一个给定的缓冲池的 LRU_MAX 降低了10%。

例如,如果发生页置换前台写操作,并且一个缓冲池的 LRU 设置是 80 和 90,则数据库服务器将该设置调整为 76 和 85.5。

除了前台写操作之外,每当一个页错误替代了一个热页面(高优先级缓冲区),并且非高优先级缓冲区在修改的 LRU 队列上时,LRU 刷新也将被调整为更加积极。自动 LRU 调整只是使 LRU 刷新变得更积极,而不能减少 LRU 刷新。自动LRU 调整不是永久的,不会记录在 ONCONFIG 文件中。

LRU 刷新会被重新设置为数据库服务器启动时使用的 ONCONFIG 文件中包含的值。

自动 LRU 调优对所有缓冲池都有影响,并且会调整 BUFFERPOOL 配置参数中的LRU_MIN_DIRTY 和 LRU_MAX_DIRTY 值。

AUTO_LRU_TUNING 配置参数指定当服务器启动时是否启用自动 LRU 调优。

默认情况下,在配置文件中 AUTO_LRU_TUNING 已被启用。可以使用 onmode -wm 或 onmode -wf 动态地启用或禁用 LRU 调优。

自动 AIO VP 调优

从 IBM Informix Dynamic Server V11 开始,可以使用 AUTO_AIOVPS 配置参数使数据库服务器可以在服务器检测到 AIO VP 没有跟上 I/O 工作负载时自动调整 AIO VP 和刷新线程的数量。

?与每个文件系统访问相关的 I/O 请求的数量

?确定哪些行满足查询谓词所需的 CPU 工作

?对数据进行排序或分组所需的资源

?可用于查询的内存大小(由 DS_TOTAL_MEMORY 和 DS_MAX_QUERIES 参数指定)

为了计算每种可能的查询计划的成本,优化器:

?使用一组描述表数据和索引的性质和物理特征的统计信息

?检查查询过滤器

?检查计划中可以使用的索引

?分析转移数据以执行本地连接或用于分布式查询的远程连接的成本

它使用系统编目表 SYSDISTRIB 确定成本。

UPDATE STATISTICS 语句更新优化器用于确定最低成本的查询计划的系统编目中的统计信息。

下面的统计信息是由 CREATE INDEX 带或者不带 ONLINE 关键字自动生成的。

?索引级统计信息相当于 LOW 模式下 UPDATE STATISTICS 操作中收集到的统计信息,用于所有类型的索引,包括 B-树、Virtual Index Interface 和函数索引。

?列分布索引相当于 MEDIUM 模式下 UPDATE STATISTICS 操作中收集到的分布信息,用于普通 B-树索引的 non-opaque 引导索引列。

为确保优化器选择最能反映表的当前状态的查询计划,当没有自动生成动态表(即数据不断变化)的统计信息时,应定期运行 UPDATE STATISTICS。

下面的表 5 总结了何时运行不同的 UPDATE STATISTICS 语句。如果有很多表,那么可以编写一个脚本以生成这些 UPDATE STATISTICS 语句。ISA 可以为表生成很多 UPDATE STATISTICS 语句。

表 5. 运行 UPDATE STATISTICS 的指南

列描述

UPDATE STATISTICS LOW DROP DISTRIBUTIONS ?行数已经有了大的变动

?从之前版本的数据库服务器迁移过来之后

UPDATE STATISTICS LOW ?用于不是任何索引的引导列的所有列

?(多列索引中的所有类)对于在连接列或过滤列上定义了多列索引的查询

UPDATE STATISTICS MEDIUM

DISTRIBUTIONS ONLY

?有未索引的连接列或过滤列的查询

UPDATE STATISTICS HIGH ?(表或者索引中的引导列)用于有被索引的连接列或过滤列的查询

?(多列索引中的第一个区分列)用于在连接列或过滤列上定义了多列索引的查询?有很多小型表的查询(放在一个盘区)

?Dynamic Server 现在自动收集索引统计信息,这些统计信息相当于在non-opaque 列上创建新索引时,在 LOW 模式下 UPDATE STATISTICS 收集的统计信息。

?当创建一个 B-树索引时,Dynamic Server 也收集列统计信息,这相当于HIGH 模式下,对少于一百万行的表使用 1% 的抽样率,对更大的表使用

0.5% 的抽样率的情况下,UPDATE STATISTICS 收集的信息。

?用户不需要运行 UPDATE STATISTICS,查询优化器就可以使用该特性自动收集的索引和列统计信息。也可以在 SET EXPLAIN 输出中新的查询统计信息部分查看关于完成的查询的统计信息。

?在 MEDIUM 模式下的显式 UPDATE STATISTICS 操作中,resolution 子句中新的 SAMPLING SIZE 选项可以指定用于列分布抽样的最小行数。

?指定的值

?满足每个 bin 中的行的百分比,同时满足置信度所需的行数

每个 bin 中的行的默认百分比为 2.5%,最小置信度为 .80。

例如,清单 4中的语句计算 customer 表中三个列的统计信息。至少有 300 行被抽样,但是实际抽样可能多于 300 行。然而,如果需要更多的行以满足默认的 0.80 的置信度,那么对于一个使用 60 个同等类别的示例分布,将抽样更多的行。每个 bin 中被抽样的值的平均百分比将为 3%。

清单 4. SAMPLING SIZE 的使用示例

UPDATE STATISTICS MEDIUM FOR TABLE customer

(address1, city, state)

SAMPLING SIZE 300 RESOLUTION 3 DISTRIBUTIONS

ONLY;

当 UPDATE STATISTICS MEDIUM 运行时,Dynamic Server 总是在系统编目中记录实际抽样大小(表中总行数的百分比)。

使用索引

CREATE INDEX ONLINE 和 DROP INDEX ONLINE

现在可以以非独占的方式创建和删除索引。可以使用 CREATE INDEX ONLINE 和DROP INDEX ONLINE 语法在联机或者动态环境中创建和删除索引。数据库和它的相关表不会被独占地锁住,所以可以被更新或读取。

在索引创建期间,如果索引创建时带 ONLINE 关键字,则不需要在表上放置独占锁。可以在表上进行读取和更新。索引的创建不必等到可以在表上放置独占锁。

如果索引是带 ONLINE 关键字创建的,则数据库服务器用一个特定的标志记录操作。现在,恢复操作将检查那个标志,并且可以重新创建索引。

使用 CREATE INDEX ONLINE 语句创建索引的优点有:

?可以立即创建索引,不必在表上放置锁。

?在创建索引的同时可以对表进行更新。

?优化器可以更新未被锁的表中的统计信息,从而可以获得更佳的查询计划。

可以使用 CREATE INDEX ONLINE 语法创建附属索引,但是 ONLINE 语法只在事务隔离级别为脏读(dirty read)时才适用。索引创建时在表上放置一个独占锁,并等待所有其他扫描表的、使用索引分区的并发进程结束,然后才创建附属索引。如果这个表正在被读取或更新,则 CREATE INDEX ONLINE 语句等待独占锁。

如果 LOCK MODE 没有被设为 WAIT,则附属索引的创建可能失败,因为它不会等待其他用户完成。

注意:在索引创建之后,当引擎更新系统编目信息时,它会短时间地放置一个锁。

下面的清单 5 提供了带 ONLINE 关键字使用 CREATE INDEX 的语法:

清单 5. 带 ONLINE 关键字的 CREATE INDEX 示例

CREATE INDEX i1 ON tab1(c1) ONLINE

ONLIDX_MAXMEM

ONLIDX_MAXMEM 配置参数用于限制分配给原像日志池或更新日志池的内存大小。这些池是用 ONLINE 关键字创建索引时在共享内存中创建的。如果您计划在被索引(使用 ONLINE 语法)的表列上完成其他操作,那儿这可能有用。

ONLIDX_MAXMEM 的取值范围是 16KB 到 4294967295。在 onconfig.std 中的默认大小是 5120。

这个配置参数可以用 onmode -wf 动态地修改或者用 onmode -wm 命令取代。

DROP INDEX ONLINE

DROP INDEX ONLINE 允许删除索引,而不需要独占锁。即使在事务隔离级别为脏读时也可以删除索引(利用 ONLINE 关键字)。

使用 DROP INDEX ONLINE 语句删除索引的优点有:

?可以直接删除低效的索引,而不会干扰正在运行的查询,即使有查询在使用那个索引也仍然可以删除它。

?查询优化器将被通知不要将那个索引用于表上的新的 SELECT 操作。

DROP INDEX ONLINE 在表更新完成之后才执行。发出 DROP INDEX ONLINE 语句之后,新的操作不能引用该索引,但是当前的操作可以使用该索引,直到操作完成。数据库服务器等到所有当前用户访问完索引之后才删除索引。

清单 6 包含带 ONLINE 语法使用 DROP INDEX 的例子:

清单 6. 带 ONLINE 语法使用 DROP INDEX 的示例

?查询涉及引导键,或者索引的最重要的列(通常是第一个列)有很多重复?用一个引导键检查的成本或行数大于检查非引导键列返回的行数的成本

理解其中的工作原理的方法是考虑查询被拆分成有很多子查询的联结(union)。每个子查询是非限制性引导键列的结果集。然后,优化器可以考虑那些列,并使用它们发现更有限制性的非引导键列。

创建索引自连接

如果需要自连接,则方法是使用别名,以便在 from 子句中可以两次列出同一个表。

清单 7. 生成自连接的示例语法

SELECT a1.customer_num

FROM customer a1, customer b1

WHERE a1.customer_num = b1.customer_num AND

... Additional logic here

注意两个别名都引用同一个表。

自连接查询计划和 sqexplain 输出

在查询计划中可以很简单地确定自连接:

清单 8. 显示自连接的解释输出的示例片段

5

Index Self Join Keys (customer_num lname )

Lower bound: informix.a.customer_num >= 00702

AND

(informix.a.lname >= 'Aaron ' )

Upper bound: informix.a.customre_num <= 12345

AND

(informix.a.lname <= 'Croyle' )

注意,索引自连接中涉及的列中的键将被显示。

自连接优化器指令

有两个优化器指令可用于指示优化器使用自连接功能:

?INDEX_SJ 指令强制索引自连接路径使用指定的索引,或者从索引列表中选择成本最低的索引,即使没有关于引导索引键列的数据分布统计信息也是如此。

?AVOID_INDEX_SJ 指令防止自连接使用指定的索引或索引列表。

系统性能优化方案

系统性能优化方案 (第一章) 系统在用户使用一段时间后(1年以上),均存在系统性能(操作、查询、分析)逐渐下降趋势,有些用户的系统性能下降的速度非常快。同时随着目前我们对数据库分库技术的不断探讨,在实际用户的生产环境,现有系统在性能上的不断下降已经非常严重的影响了实际的用户使用,对我公司在行业用户内也带来了不利的影响。 通过对现有系统的跟踪分析与调整,我们对现有系统的性能主要总结了以下几个瓶颈: 1、数据库连接方式问题 古典C/S连接方式对数据库连接资源的争夺对DBServer带来了极大的压力。现代B/S连接方式虽然不同程度上缓解了连接资源的压力,但是由于没有进行数据库连接池的管理,在某种程度上,随着应用服务器的不断扩大和用户数量增加,连接的数量也会不断上升而无截止。 此问题在所有系统中存在。 2、系统应用方式(架构)问题(应用程序设计的优化) 在业务系统中,随着业务流程的不断增加,业务控制不断深入,分析统计、决策支持的需求不断提高,我们现有的业务流程处理没有针对现有的应用特点进行合理的应用结构设计,例如在‘订单、提油单’、‘单据、日报、帐务的处理’关系上,单纯的数据关系已经难以承载多元的业务应用需求。 3、数据库设计问题(指定类型SQL语句的优化)

目前在系统开发过程中,数据库设计由开发人员承担,由于缺乏专业的数据库设计角色、单个功能在整个系统中的定位模糊等原因,未对系统的数据库进行整体的分析与性能设计,仅仅实现了简单的数据存储与展示,随着用户数据量的不断增加,系统性能逐渐下降。 4、数据库管理与研究问题(数据存储、物理存储和逻辑存储的优化) 随着系统的不断增大,数据库管理员(DBA)的角色未建立,整个系统的数据库开发存在非常大的随意性,而且在数据库自身技术的研究、硬件配置的研究等方面未开展,导致系统硬件、系统软件两方面在数据库管理维护、研究上无充分认可、成熟的技术支持。 5、网络通信因素的问题 随着VPN应用技术的不断推广,在远程数据库应用技术上,我们在实际设计、开发上未充分的考虑网络因素,在数据传输量上的不断加大,传统的开发技术和设计方法已经无法承载新的业务应用需求。 针对以上问题,我们进行了以下几个方面的尝试: 1、修改应用技术模式 2、建立历史数据库 3、利用数据库索引技术 4、利用数据库分区技术 通过尝试效果明显,仅供参考!

LINUX性能调优方法总结

LINUX性能调优方法总结 大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数。可以修改这些参数来分配更多的内存,从而改进网络 性能。设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值。幸运的是,sysctl 可以读取 /etc/sysctl.conf 中的值并根据需要填充 /proc,这样就能够更轻松地管理这些参数。清单 2 展示在互联网服务器上应用于 Internet 服务器的一些比较激进的网络设置。 # Use TCP syncookies when needed net.ipv4.tcp_syncookies = 1 # Enable TCP window scaling net.ipv4.tcp_window_scaling: = 1 # Increase TCP max buffer size net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # Increase Linux autotuning TCP buffer limits net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # Increase number of ports available net.ipv4.ip_local_port_range = 1024 65000 将这些设置添加到 /etc/sysctl.conf 的现有内容中。第一个设置启用TCP SYN cookie。当从客户机发来新的 TCP 连接时,数据包设置了 SYN 位,服务 器就为这个半开的连接创建一个条目,并用一个 SYN-ACK 数据包进行响应。在正常操作中,远程客户机用一个 ACK 数据包进行响应,这会使半开的连接 转换为全开的。有一种称为 SYN 泛滥(SYN flood)的网络攻击,它使 ACK 数据包无法返回,导致服务器用光内存空间,无法处理到来的连接。SYN cookie 特性可以识别出这种情况,并使用一种优雅的方法保留队列中的空间(细节参见参考资料一节)。大多数系统都默认启用这个特性,但是确保配 置这个特性更可靠。 启用 TCP 窗口伸缩使客户机能够以更高的速度下载数据。TCP 允许在未从远程端收到确认的情况下发送多个数据包,默认设置是最多 64 KB,在与延迟比 较大的远程客户机进行通信时这个设置可能不够。窗口伸缩会在头中启用更多的位,从而增加窗口大小。 后面四个配置项增加 TCP 发送和接收缓冲区。这使应用程序可以更快地丢掉它的数据,从而为另一个请求服务。还可以强化远程客户机在服务器繁忙时发

安卓性能优化方案

随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序。以上理由,足以需要开发人员更加专心去实现和优化你的代码了。选择合适的算法和数据结构永远是开发人员最先应该考虑的事情。同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优化文档和网上的诸多技术大牛给出的意见,整理出这份文档。 1. 内存优化 Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus o ne 对每个软件的内存限制是24M),同时Java语言本身比较消耗内存,d alvik虚拟机也要占用一定的内存空间,所以合理使用内存,彰显出一个程序员的素质和技能。 1) 了解JIT 即时编译(Just-in-time Compilation,JIT),又称动态转译(Dynamic Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。Android原来Dalvik虚拟机是作为一种解释器实现,新版

(Android2.2+)将换成JIT编译器实现。性能测试显示,在多项测试中新版本比旧版本提升了大约6倍。 详细请参考https://www.doczj.com/doc/e710084776.html,/cool_parkour/blog/item/2802b01586e22cd8a6ef3f6b. html 2) 避免创建不必要的对象 就像世界上没有免费的午餐,世界上也没有免费的对象。虽然gc为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。所以,除非必要,应尽量避免尽力对象的实例。下面的例子将帮助你理解这条原则: 当你从用户输入的数据中截取一段字符串时,尽量使用substring函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝。这样你就有一个新的String对象,它与原始数据共享一个char数组。如果你有一个函数返回一个String对象,而你确切的知道这个字符串会被附加到一个Stri ngBuffer,那么,请改变这个函数的参数和实现方式,直接把结果附加到StringBuffer中,而不要再建立一个短命的临时对象。 一个更极端的例子是,把多维数组分成多个一维数组: int数组比Integer数组好,这也概括了一个基本事实,两个平行的int数组比(int,int)对象数组性能要好很多。同理,这试用于所有基本类型的组合。如果你想用一种容器存储(Foo,Bar)元组,尝试使用两个单独的Foo[]

Linux操作系统性能调优的方法

按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能。下边将分四部分介绍在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系统下,如何用以下几种技巧进行性能的优化: QUOTE: 1、Disabling daemons (关闭 daemons) 2、Shutting down the GUI (关闭GUI) 3、Changing kernel parameters (改变内核参数) 4、Kernel parameters (内核参数) 5、Tuning the processor subsystem(处理器子系统调优) 6、Tuning the memory subsystem (内存子系统调优) 7、Tuning the file system(文件系统子系统调优) 8、Tuning the network subsystem(网络子系统调优) 1 关闭daemons 有些运行在服务器中的daemons (后台服务),并不是完全必要的。关闭这些daemons可释放更多的内存、减少启动时间并减少CPU处理的进程数。减少daemons数量的同时也增强了服务器的安全性。缺省情况下,多数服务器都可以安全地停掉几个daemons。 Table 10-1列出了Red Hat Enterprise Linux AS下的可调整进程. Table 10-2列出了SUSE LINUX Enterprise Server下的可调整进程.

注意:关闭xfs daemon将导致不能启动X,因此只有在不需要启动GUI图形的时候才可以关闭xfs daemon。使用startx命令前,开启xfs daemon,恢复正常启动X。 可以根据需要停止某个进程,如要停止sendmail 进程,输入如下命令: Red Hat: /sbin/service sendmail stop SUSE LINUX: /etc/init.d/sendmail stop

SDE性能调优方案

ArcSDE 9.1性能调优方案 编写:李国勇 日期: 2006-11-27 版本: 1.0 密级:内部公开 北京恒华伟业科技有限公司

第一章概述 影响ArcSDE运行性能的因素比较多,对其性能的优化需要根据具体情况而定。总体上说,对ArcSDE性能影响较大的因素是:服务器硬件配置、Oracle参数配置、ArcSDE 参数配置和图层管理模式。 服务器硬件配置包括:CPU主频、物理内存大小、系统总线速度、硬盘数量、磁盘寻道时间等,硬件配置参数不是本文的重点讨论内容。 Oracle参数配置包括表空间的组织和缓冲参数配置;ArcSDE参数配置包括存储参数配置和缓冲参数配置。 本调整方案主要针对输配电GIS系统,不一定适合其它行业。 本优方案所有参数基于ArcSDE 9.1、Oracle 9.2。 1.1 总论 一.性能调优的重点在Oracle,而不在ArcSDE,一般情况下,调整ArcSDE各种参数对性能提升作用不大,ArcSDE使用安装时的默认参数即可; 二.小数据量(图层数据总量小于1G存储空间)下,优化SDE的存储的优化对性能的提升不大,ArcSDE的四个频繁访问的系统表没有必要分开存储; 三.小数据量(图层数据总量小于1G存储空间)下,用户数据存储于SDE用户下对性能的影响也不大,但是出于数据库管理的考虑,建议尽可能将这两类数据分开 存储; 四.对于输配电GIS系统,数据库db_block_size设置为8KB完全满足使用要求,没有必要调整到16KB; 五.如果图层中单个图形元素覆盖范围差异不大,没有必要建立多级Grid Index,而且一般情况下默认Grid Index设置即可满足多数情况下的性能需求; 六.如果注册了版本,建议定期对数据库进行Compress和Analyse,同时要确保undo 表空间有足够可用空间(如1G); 七.定期对磁盘做碎片整理,以提升磁盘I/0性能。 1.2 参考文献 1.ArcSDE 9.1 Configuration and Tuning Guide for Oracle? -- ESRI 2005; 2.Managing ArcSDE 9.1 Application Servers -- ESRI 2005; 3.Cost Control: Inside the Oracle Optimizer -- Oracle Donald K. Burleson。 https://www.doczj.com/doc/e710084776.html,/oramag/webcolumns/2003/techarticles/burleson_cbo_pt1.html

性能测试测试方案

性能测试详细测试方案 、八、- 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“冲击”,系统能稳定在什么样的性能水平,面临行业公司业务增加时,系统能否经受住“考验”,这些问题需要通过一个完整的性能测试来给出答案。 1第一章XXX系统性能测试概述 1.1 被测系统定义 XXX系统作为本次测试的被测系统(注:以下所有针对被测系统地描述均为针对XXX系统进行的),XXX系统是由平台开发的一款物流应用软件,后台应用了Oraclellg数据库, 该系统包括主要功能有:XXX 等。在该系统中都存在多用户操作,大数据量操作以及日报、周报、年报的统计,在本次测试中,将针对这些多用户操作,大数据量的查询、统计功能进行如预期性能、用户并发、大数据量、疲劳强度和负载等方面的性能测试,检查并评估在模拟环境中,系统对负载的承受能力,在不同的用户连接情况下,系统的吞吐能力和响应能力,以及在预计的数据容量中,系统能够容忍的最大用户数。1.1.1 功能简介 主要功能上面已提到,由于本文档主要专注于性能在这里功能不再作为重点讲述。 1.1.2 性能测试指标 本次测试是针对XXX系统进行的全面性能测试,主要需要获得如下的测试指标。 1、应用系统的负载能力:即系统所能容忍的最大用户数量,也就是在正常的响应时间中,系统能够支持的最多的客户端的数量。

2、应用系统的吞吐量:即在一次事务中网络内完成的数据量的总和,吞吐量指标反映的是服务器承受的压力。事务是用户某一步或几步操作的集合。 3、应用系统的吞吐率:即应用系统在单位时间内完成的数据量,也就是在单位时间内,应用系统针对不同的负载压力,所能完成的数据量。 4、T PS每秒钟系统能够处理事务或交易的数量,它是衡量系统处理能力的重要指标。 5、点击率:每秒钟用户向服务器提交的HTTP青求数。 5、系统的响应能力:即在各种负载压力情况下,系统的响应时间,也就是从客户端请求发起,到服务器端应答返回所需要的时间,包括网络传输时间和服务器处理时间。 6、应用系统的可靠性:即在连续工作时间状态下,系统能够正常运行的时间,即在连续工作时间段内没有出错信息。 1.2系统结构及流程 XXX系统在实际生产中的体系结构跟本次性能测试所采用的体系结构是一样的,交易流 程也完全一致的。不过,由于硬件条件的限制,本次性能测试的硬件平台跟实际生产环境略有不同。 1.2.1系统总体结构 描述本系统的总体结构,包括:硬件组织体系结构、网络组织体系结构、软件组织体系结构和功能模块的组织体系结构。 1.2.2功能模块 本次性能测试中各类操作都是由若干功能模块组成的,每个功能都根据其执行特点分成 了若干操作步骤,每个步骤就是一个功能点(即功能模块),本次性能测试主要涉及的功能 模块以及所属操作如下表

TUXEDO性能调优的基本方法

TUXEDO性能调优的基本方法 一. 通过配置MSSQ服务器组提高性能 在ATMI环境中(TUXEDO-CORBA服务器环境不支持MSSQ机制)可以通过配置MSSQ(多服务器单队列)机制来达到队列级负载均衡的目的。同一组MSSQ服务器在同一时间将共用一个请求队列,当消息出队时,将被送到第一个空闲的服务器去处理。 如果服务器A属于某个MSSQ的一部分,那么必须为它配置响应队列,即设置REPLYQ=Y,这样当A调用了B服务时,B对A的响应将被回送到发出原始请求的服务器A,而不是MSSQ服务器组中的其它服务器。 MSSQ机制可以配置成动态形式,这样TUXEDO系统会根据负载状况动态地产生和消除MSSQ中的服务器。在下列情况下,可以考虑配置MSSQ: 应该配置MSSQ 不应该配置MSSQ 服务器数量在2到12个之间 如果有多个服务器,折衷的办法是使用 多个MSSQ 请求缓冲区不是很大,没有大到将一个队列占满的情况 一个请求缓冲区可能会占满整个服务器队列空间。 所有的服务器都提供一组相同的服务 每个服务都提供不同的服务 需要配置多个服务器进程才能满足客 户机对服务器的实时性的要求。每个 MSSQ的服务器数量一般不要超过10个, 如果超过10个,建议配置多个MSSQ。 在下面两种情况下,使用MSSQ将达到调优的效果: A.银行业务中,多个TELLER执行相同的服务来为客户提供服务,下一个空闲的TELLER将为下一个等候的客户服务。在这种情况下,每个TELLER必须能够执行所有的客户服务。在同一个MSSQ中的服务器必须在任何时候都提供相同的服务。MSSQ的优点在于,它在队列级提供了第二种形式有的负载均衡。 B.在超市收款业务中,不同的CASHIERS接收不同形式的客户支付(如信用卡,现金等),在这种情况下,不推荐使用MSSQ。 例如: simpserv SRVGRP=GROUP1 SRVID=10 MIN=3 MAX=5 RQADDR=simpserv REPLYQ=Y 这个配置将启动3个simpserv进程,SVRID依次为10,11,12。它们共享同一个请求队列simpserv。在MSSQ配置中,建议设置MIN=MAX=N,这样在TUXEDO系统启动时,将一次性启动N个服务器,这就使得TUXEDO不必对MSSQ服务器的数量作动态管理。N的设置要根据数据库服务器目前的压力情况来决定,而不是越大越好。 为了测试simpserv对请求的受理情况,在TOUPPER服务代码中加入一条延时语句sleep(1),启动25个并发用户,分别执行12个TOUPPER服务请求,使用tmadmin/psr命令打印MSSQ服务器组,得如下结果:

22提供性能优化方案---Google-Code

Linux系统性能测试与分析 1、前言 通过对系统中和性能相关的各个环节的介绍,使大家知道出现性能问题时可以从那些方面入手去查,而分析典型应用对系统资源使用的特点,让大家对应用和系统资源的依赖有了更直观的认识。大多数的硬件性能问题主要和CPU、磁盘、内存相关,还没有遇到因为开发语言的运行效率对整个应用的性能造成影响,而应用程序设计的缺陷和数据库查询的滥用反倒是最最常见的性能问题。需要注意的是,大多数情况下,虽然性能瓶颈的起因是程序性能差或者是内存不足或者是磁盘瓶颈等各种原因,但最终表现出的结果就是CPU耗尽,系统负载极高,响应迟缓,甚至暂时失去响应,因此我们观察服务器状况时,最先看的就是系统负载和CPU空闲度。当你阅读完了这遍文档以后就会有一个对系统分析的思路。 2、性能分析的目的 2.1找出系统性能瓶颈 1.硬件瓶颈 2.软件瓶颈 2.2提供性能优化方案 1.升级硬件 2.改进系统结构 达到合理的硬件和软件配置,使系统资源使用达到平衡。但遗憾的是解决一个性能瓶颈,往往又会出现另外的瓶颈或者其他问题,所以性能优化更加切实的目标是做到在一定范围内使系统的各项资源使用趋向合理和保持一定的平衡。系统运行良好的时候恰恰也是各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待 CPU资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加(用于进程切换、缺页处理的CPU开销) 3、性能相关的各个环节 3.1 硬件资源 3.1.1、CPU ⒈ 是否使用SMP。 ⒉ 单颗CPU的性能对依赖CPU的某些应用的影响很严重,比如数据库的查询处理。 3.1.2、内存

软件开发系统性能测试报告

订单系统二期_Order接口 性能测试报告

目录 1.术语 (3) 2.测试环境 (3) 2.1服务器&客户端环境信息 (3) 3.测试场景 (4) 4.测试目的&策略 (5) 5.结果分析 (5) 5.1基本数据统计分析&对比 (5) 5.1.1.测试场景PT1 (5) 5.1.2.测试场景PT2 (5) 5.1.3.测试场景PT3 (6) 5.2.详细数据分析 (6) 5.2.1.测试场景PT1(getOrderList Interface) (6) 5.2.2.测试场景PT2(getOrderRow Interface) (9) 5.2.3.测试场景PT3(getOrderGoodsList) (14) 6.测试结论 (17)

1.术语 2.测试环境 2.1服务器&客户端环境信息 服务端配置: 10.19.141.57 应用服务器: CPU: Intel(R) Xeon(R) CPUE5620 @ 2.40GHz 8个逻辑CPU 内存:15GB 网卡: 1000M 操作系统: CentOS release 5.8 (Final) 辅助软件: nmon 10.19.141.58 数据库服务器: CPU: Intel(R) Xeon(R) CPUE5620 @ 2.40GHz 8个逻辑CPU 内存:8GB 网卡: 1000M 操作系统: CentOS release 5.8 (Final) 辅助软件: nmon 客户端配置:(2台) CPU:4核8线程Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 内存:8.00GB 网卡: 1000M 操作系统: Windows2008 浏览器/版本号: IE9.0 测试工具: LoadRunner11.0、nmon

MySQL数据库性能(SQL)优化方案-期末论文

高级数据库技术——期末论文 基于SQL查询的MySQL数据库性能优化研究 :XX 学号:2014XXXXX 学院:计算机学院

摘要: 查询是数据库系统中最基本也是最常用的一种操作,是否具有较快的执行速度,已成为数据库用户和设计者极其关心的问题。在研究开源数据库管理系统MySQL 查询优化技术的基础上,主要结合传统SQL操作优化、深度分析 MySQL 源代码、现代数据库发展几方面进行诸如参数调优,MySQL关联查询,重写相关规则等容展开优化分析研究。 关键词:查询优化,查询重用,查询重写,计划优化

一、传统SQL查询优化操作 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2.使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,

性能调优总结

深圳割接性能调优总结 BSS测试部:邹家勇

HSC从一开始对订购关系与三户资料同步接口进行压测时,不能满足性要求到最后性能压测结果达到要求的10倍性能以上,经过了以下几个关键的优化步骤。 调优过程: 在压测时首先要排除的是高消耗SQL(经过AWR报告分析后HSC没有出现高消耗SQL) 本次SZ割接压测经过以下几个关键点的调优: 1)脚本参数调优(数据已存在,字段值太长错误较多调节脚本参数模式及参数长度) 2)JDBC配置调优(JDBC使用率100%,连接数调成100后,极限测试时使用在80个连接 左右) 3)WAS配置调优(主要是webcontainer调成200,极限测试时使用达到200,但主机 CPU资源消耗在50%以上,且TPS也超过指标10来倍,不再增加配置) 4)IHS配置调优(主要是http.conf文件参数调整) 5)linux系统调优(主要是网络参数调整,及open file调整) 6)Systemout日志中不打印应用日志(减少不必要的磁盘IO消耗)。 下面逐一分解每个关键调优时出现的问题及定位 脚本参数调优举例 说明:在测试过程中,通过查看WAS日志,报大量的主键冲突,经查明后,发现是发送的报文中写表的主键字段值重复导致,经过对主键字段的重新参数化后,不再出现主键冲突,大量主键冲突也不符合平台业务交易场景!(原来红色部分值采用一段随机值或序列发现还有重复的值出现(测试工具本身问题)) 订购关系脚本 Action() { lr_think_time(3); lr_start_transaction("订购关系同步_SubProductSyn_request"); soap_request("StepName=SOAP Request", "URL=http://{IP}:{port}/Nodehsc/services/HscService?wsdl", "SOAPEnvelope=" "" "" "" "" "" "195{servnumber}" "{region}" "SubProductSyn" "1.0"

MySQL5.1性能优化方案

MySQL5.1性能优化方案 1.平台数据库 1.1.操作系统 Red Hat Enterprise Linux Server release 5.4 (Tikanga) ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped 32位Linux服务器,单独作为MySQL服务器使用。 1.2.M ySQL 系统使用的是MySQL5.1,最新的MySQL5.5较之老版本有了大幅改进。主要体现在以下几个方面: 1)默认存储引擎更改为InnoDB InnoDB作为成熟、高效的事务引擎,目前已经广泛使用,但MySQL5.1之前的版本默认引擎均为MyISAM,此次MySQL5.5终于将默认数据库存储引擎改为InnoDB,并且引进了Innodb plugin 1.0.7。此次更新对数据库的好处是显而易见的:InnoDB的数据恢复时间从过去的一个甚至几个小时,缩短到几分钟(InnoDB plugin 1.0.7,InnoDB plugin 1.1,恢复时采用红-黑树)。InnoDB Plugin 支持数据压缩存储,节约存储,提高内存命中率,并且支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈。 Multi Rollback Segments:原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。 2)多核性能提升

网络优化测试报告

网络优化测试报告文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

测 试 业 务 区 路测数据分析报告 () 目录 第一章网络概况.............................................................................................................................. 网络基本情况 ............................................................................................................................... 站点分布图 ................................................................................................................................... 测试方法介绍 ............................................................................................................................... 第二章测试结果及分析.................................................................................................................. RX P OWER ..................................................................................................................................... S TRONGEST E C/I O.......................................................................................................................... A GGREGATE E C/I O ......................................................................................................................... T X P OWER....................................................................................................................................... F-FCH FER .................................................................................................................................... TX A DJ........................................................................................................................................... 第三章网络性能统计.................................................................................................................... C ALL S ETUP R ATE.......................................................................................................................... C ALL D ROP R AT E ........................................................................................................................... H ANDOFF S TATISTICS R ESULT........................................................................................................ A IR I NTERFACE S ETUP D ELAY........................................................................................................ 第四章测试结论..............................................................................................................................

Linux 性能调优的几种方法

Linux 性能调优的几种方法 按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能。下边将分四部分介绍在Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server系统下,如何用以下几种技巧进行性能的优化: 1、Disabling daemons (关闭daemons) 2、Shutting down the GUI (关闭GUI) 3、Changing kernel parameters (改变内核参数) 4、Kernel parameters (内核参数) 5、Tuning the processor subsystem(处理器子系统调优) 6、Tuning the memory subsystem (内存子系统调优) 7、Tuning the file system(文件系统子系统调优) 8、Tuning the network subsystem(网络子系统调优) 1 关闭daemons 有些运行在服务器中的daemons (后台服务),并不是完全必要的。关闭这些daemons可释放更多的内存、减少启动时间并减少CPU处理的进程数。减少daemons数量的同时也增强了服务器的安全性。缺省情况下,多数服务器都可以安全地停掉几个daemons。 Table 10-1列出了Red Hat Enterprise Linux AS下的可调整进程. Table 10-2列出了SUSE LINUX Enterprise Server下的可调整进程

注意:关闭xfs daemon将导致不能启动X,因此只有在不需要启动GUI图形的时候才可以关闭xfs daemon。使用startx命令前,开启xfs daemon,恢复正常启动X。

Java程序性能优化方案

Java程序性能优化方案 StringTokenizer比String.split()方法效率高 更优化的方式 Java代码 while(true){ String splitStr=null; int j=temp.indexOf(';'); if(j<0)break; SplitStr=tmp.substring(0,j); tmp=tmp.substring(j+1); } while(true){ String splitStr=null; int j=temp.indexOf(';'); if(j<0)break; SplitStr=tmp.substring(0,j); tmp=tmp.substring(j+1); } 比String.startsWith和endsWith性能更优的方式:Java代码 int len=orgStr.length(); if(orgStr.charAt(0)=='a' &&orgStr.charAt(1)=='b' &&orgStr.charAt(2)=='b'); if(orgStr.charAt(len-1)=='a' &&orgStr.charAt(len-2)=='b' &&orgStr.charAt(len-3)=='c');

int len=orgStr.length(); if(orgStr.charAt(0)=='a' &&orgStr.charAt(1)=='b' &&orgStr.charAt(2)=='b'); if(orgStr.charAt(len-1)=='a' &&orgStr.charAt(len-2)=='b' &&orgStr.charAt(len-3)=='c'); StringBuffer(int capacity)指定初始容量可以减少扩容的操作

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

系统调优性能测试报告

XXXXX项目 压力测试报告 2015-10-16 XXXXXX技术有限公司文档信息

批复信息 版本记录

1简介 1.1 文档目的 本测试报告为性能对比测试报告,目的在于总结测试的工作进展情况并分析测试结果,描述本阶段测试是否达到调优预期目标,符合需要要求。 1.2 面向人员 本文档主要面向XX系统用户、测试人员、开发人员、项目管理人员和需要阅读本报告的相关领导。 1.3 参考文档 1.4 术语 1. 每秒事务数(TPS):是指每秒钟完成的事务数,事务是事先在脚本中定义的统计单元; 2. 事务平均响应时间(ART):响应时间一般反映了在并发情况下,客户端从提交请求到接受到应答所经历的时间; 3. 资源利用率:是指在不影响系统正常运行的情况下各服务器的CPU、内存等硬件资源的占用情况; 4. 最大并发用户数:系统所能承受的最大并发用户数;

5. 思考时间(Thinktime):用于模拟实际用户在不同操作之间等待的时间。例如,当用户收到来自服务器的数据时,可能要等待几秒钟查看数据,然后做出响应,这种延时就称为“思考时间”。 2第一轮测试目标 根据项目情况,本次测试的目的主要是解决XX系统个人系统登录和理财交易的处理能力达到客户正常使用要求,根据测试结果评估系统性能,为生产运行提供参考。 1)分析目前系统登录与理财的处理能力; 2)提高登录和理财交易处理能力,达到客户流畅使用的目的; 3第二轮测试安排 1、对整体系统运行环境、系统自身交易功能进行全面分析。通过 压力测试手段优化系统,提高运行效率,并给出未来三到五年 资源配置计划,制定后续保障机制。 2、计划从十月十九日开始方案讨论。

Oracle SQL性能优化方法研究

Oracle SQL性能优化方法探讨 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访问Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访问数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访问 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14计算记录条数 (9) 15用Where子句替换HAVING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11)

18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存经验,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用问题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建

相关主题
文本预览
相关文档 最新文档