oracle性能调整与优化,oracle 性能调优

oracle性能调整与优化,oracle 性能调优,Oracle性能究极优化(Oracle 性能优化)

Linux Journal发表了一篇优化Oracle数据库的文章,感觉很有用。简单介绍其摘要,分享Linux在企业数据库中的应用。

作者:伯特斯卡尔佐

目前惠普、康柏、戴尔、IBM、甲骨文都在拥抱开源操作系统Linux。根据eWeek的统计,去年Linux服务器的销量占康柏的30%左右,戴尔的13.7%,IBM的13.5%。而且IBM在Linux IBM 2001上投资了10亿。英特尔最新的64位安腾CPU仅支持四种操作系统:Windows、Linux、AIX和惠普-UX。我们不要忘记,Oracle的9i数据库的Linux版本比Windows版本早一个月。

虽然Linux可以在从IBM S/390到Sun SPARC的服务器上运行,但对大多数人来说,英特尔是Linux运行最多的平台。本文讲的是如何通过简单的性能调整,将Oracle的性能提升1000%。

本文中使用的测试环境是一个Compaq 4 CPU,512 MB,8台服务器,带有7200 rpm SCSI磁盘,然后在几乎相同的单CPU Athlon系统上进行测试,该系统具有相同的内存,但只有一个7200 rpm Ultra 100 IDE磁盘。尽管最终结果与获得的百分比不同,但观察到的性能改善是一致的。

为简单起见,我们的测试环境采用TPC基准测试,这种测试广泛用于OLTP负载测试。Quest公司有一个叫Benchmark Factory的工具,让测试工作变得像发邮件一样简单。

接下来我们就分别通过DB和OS的调整来看测试结果。

DB1的初始化参数通常是不常见的。为了说明这个问题,我们使用这些参数作为基准。

DB1: Initial Database

数据库块大小2K

SGA缓冲区缓存64M

SGA共享池64M

SGA重做缓存4M

重做日志文件4M

表空间字典

TPC结果加载时间(秒)49.41

交易/秒8.152

显然,SGA的尺寸需要增加。让我们看看DB2的结果:

DB2: Cache Pool

数据库块大小2K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存4M

重做日志文件4M

表空间字典

TPC结果加载时间(秒)48.57

交易/秒9.147

增加SGA缓冲区似乎不会显著提高性能,加载时间仅增加1.73%。下面让我们增加SGA重做日志的大小:

DB3: Log Buffer

数据库块大小2K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存16M

重做日志文件16M

表空间字典

TPC结果加载时间(秒)41.39

事务/秒10.088我们可以看到加载时间增加了17.35%,TPS也增加了9.33%。因为加载和插入、更新和删除同时进行需要的空间超过8M,但是增加内存性能似乎并没有明显的提升,所以我们增加了块的大小:

DB4: 4K Block

数据库块大小4K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存16M

重做日志文件16M

表空间字典

TPC结果加载时间(秒)17.35

交易/秒10.179

我们看到加载时间增加了138%!并且对TPS值没有大的影响。下面的简单想法是将表空间的管理从目录切换到本地:

DB5: Local Tablespaces

数据库块大小4K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存16M

重做日志文件16M

本地表空间

TPC结果加载时间(秒)15.07

交易/秒10.425

让我们将数据库块增加到8K来看看结果:

DB6: 8K Block

数据库块大小为8K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存16M

重做日志文件16M

本地表空间

TPC结果加载时间(秒)11.42

交易/秒10.683

看来结果还不错。我们没有理由继续增加块的大小。我们还没有根据CPU的数量调整相应的参数。这一次,我们设置I/O进程的数量来继续调整:

DB7: I/O Slaves

数据库块大小为8K

SGA缓冲区缓存128M

SGA共享池1.28亿平方米

SGA重做缓存16M

重做日志文件16M

本地表空间

dbwr_io_slaves 4

lgwr_io_slaves(派生)4

TPC结果

加载时间(秒)10.48

交易/秒10.717

我们的测试是基于红帽6.2,内核版本是2.2.14-5smp。对于Linux内核,可以调整的参数有近百个,包括CPU类型、SMP支持、APIC支持、DMA支持、磁盘配额支持的IDE DMA默认参数等。根据Oracle的文档,我们要做的主要调整是共享内存和信号量的大小。SHMMAX最低配置为0x13000000,SEMMNI、SEMMSL、SEMOPN最低设置分别为100、512、100。这些参数可以通过以下命令设置:

# echo0x 13000000/proc/sys/kernel/shmmax

# echo 512 32000 100 100/proc/sys/kernel/SEM

OS1: 单内核和 IPC

TPC结果

加载时间(秒)9.54

交易/秒11.511

我们有理由相信新内核版本(2.2.16-3smp)的性能也应该得到提高:

OS2: Newer minor version kernel TPC Results

加载时间(秒)9.40

交易/秒11.522

目前有2.4版本的内核。相比2.2,性能有了很大的提升。我们采用2.4.1smp:

OS3: Newer major version kernel TPC Results

加载时间(秒)8.32

交易/秒12.815

默认情况下,Linux在读取时会更新上次读取时间,但这对我们来说并不重要,所以我们关闭这个选项,设置noatime的file属性。(Win NT和2000也有类似的设置)

如果只是相对于Oracle的数据文件进行设置,我们的命令是

输入文件名

整个目录的实现方法:chattr -R A directory_name

最好的方法是修改/etc/fstab,并为每个文件系统条目添加noatime关键字。

OS4: noatime file attribute

TPC结果

加载时间(秒)5.58

交易/秒13.884

调整Linux I/O的另一种方法是调整虚拟内存子系统,修改/ect/sysctl.cong文件并添加以下行:

VM . BD flush=100 1200 128 512 15 5000 500 1884 2

根据/usr/src/Linux/documentation/sysctl/VM . txt:

第一个参数是100%:控制缓冲区中的最大脏缓冲区数据。增加这个值意味着Linux可以延迟磁盘写入。

第二个参数1200 ndirty:给出bdflush一次可以写入磁盘的最大脏缓冲区。

第三个参数,128 nrefill:调用refill_freelist()时,bdflush添加到空闲缓冲区的最大缓冲区数。

Refill_freelist() 512:当这个数超过nref_dirt dirty缓冲区时,bdflush就会被唤醒。

第五个15和最后两个参数,1884和2,系统不使用,我们不修改。

Age_buffer 50*HZ,age_super参数5*HZ:控制Linux将脏缓冲区写入磁盘的最大等待时间。它用时钟的滴答数(jiffies)来表示,即每秒100个jiffies。

OS5: bdflush设置TPC结果

加载时间(秒)4.43

交易/秒14.988

经过上述一系列调整后,最终加载时间减少了1015.35%,TPS增加了。

下面是其他网友的补充

浅谈Oracle 性能优化

基于大型Oracle数据库的应用开发已经有六年的历史,经历了从最初的零数据到目前上亿数据存储的演变。在这次体验中,我遇到了各种性能问题和各种性能优化。

在这里,我主要分享一些数据库性能优化的方法和观点。

1、服务器要求及配置

服务器的性能至关重要。CPU主频要高,内存要大,IO读写速度块。

如何验证一个服务器的IO读写效率,可以用IOPS来衡量。普及一下IOPS的定义:IOPS(每秒输入输出操作数),即每秒的读写(I/O)操作次数。它主要用于数据库等场合来衡量随机访问的性能。目前SSD硬盘的IOPS基本都是一万。但是相对成本也比较高。

在Oracle数据使用场景中,可以实现以下语句来查看当前服务器的IOPS:

声明

max _ iops _ out pls _ integer

max _ mbps _ out pls _ integer

actual _ latency _ out pls _整数;

开始

dbms _资源_管理器. calibrate_io(

max_iops=max_iops_out,

max_mbps=max_mbps_out,

实际_延迟=实际_延迟_输出);

DBMS _ output . put _ line( max _ IOPs= | | max _ IOPs _ out

|| ,max_mbps= || max_mbps_out

|| ,actual _ latency= | | actual _ latency _ out);

结束;

2、Oracle系统级的优化

这主要是针对ORACLE core的优化,包括ORACLE内存、文件大小、日志文件大小、回滚日志以及各种系统级参数的设置。

那么你如何发现当前的设置是否合理,

A.在Oracle中提供性能分析报告AWR和ASH报告。您可以通过命令获得此报告。涉及到各种指标值:内存设置是否合理,影响ORACLE慢的几个因素,数据文件读写速度等。

B.ORALCE-EM中的性能模块还可以用来检测ORALCE在各个时间节点的运行情况,从中捕获那些消耗资源的SQL语句,从而对其进行优化。

3、Oracle SQL语句的优化

在一百万的数据库级别,遇到的任何性能问题都可以通过SQL语句进行优化。有两个级别的优化:

1.通过索引,这种优化是最快的,效果也很明显。这里就不描述索引的合理使用了。网上有很多。

2.通过改变SQL语句的查询逻辑和算法。有一个有效的原则:先过滤小结果集,再通过这个小结果集与其他表关联。

在这里,希望大家提出一些其他的看法或者不同的看法。

oracle性能调整与优化,oracle 性能调优