RSS
热门关键字:  数据挖掘  数据仓库  商业智能  人工智能  搜索引擎

角斗士般的Oracle性能

来源: 作者:unkonwn 时间:2005-07-27 点击:
由 徐永久 发表于 2002年02月24日 21:17。 



"Damn the torpedoes! Full speed ahead." - Admiral David Farragut

Linux Journal 发表了一篇优化 Oracle 数据库的文章
感觉十分的有用。简要介绍其摘要和大家共同分享 Linux 在企业级数据库上应用。



原作者
Bert Scalzo





目前
HPCompaqDellIBM 以及 Oracle 都在加快速度拥抱 Linux 这个开放源码的操作系统。根据 eWeek 的统计去年 Linux 服务器的销售量大约占据了 Compaq 的 30%Dell 的 13.7%IBM 的 13.5%。而且 IBM 2001年度在 Linux 上的投入有 10 个亿。 Intel 最新的 64 位的 Itanium CPU 只支持四种操作系统Windows, Linux, AIX 和 HP-UX。我们也不要忘记 Oracle 的 9i 数据库 Linux 版本要比 Windows 版本早一个月。 数据挖掘实验室



尽管 Linux 能跑在从 IBM S
/390 到 Sun SPARC 结构的服务器但是对于大多数人来说Intel 还是 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



Database Block Size 2K

SGA Buffer Cache 64M

SGA Shared Pool 64M

SGA Redo Cache 4M

Redo Log Files 4M

Tablespaces Dictionary





TPC Results Load Time
(Seconds) 49.41 数据挖掘研究院

Transactions
/ Second 8.152





显然需要加大 SGA 大小
我们来看 DB2 的结果



DB2: Cache & Pool



Database Block Size 2K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 4M

Redo Log Files 4M

Tablespaces Dictionary





TPC Results Load Time
(Seconds) 48.57

Transactions
/ Second 9.147


数据挖掘实验室


增大 SGA 已经缓冲看来对于性能的提升并不显著
加载时间只提升了 1.73%。下面我们增加 SGA 重做日志的大小



DB3: Log Buffer



Database Block Size 2K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 16M

Redo Log Files 16M

Tablespaces Dictionary





TPC Results Load Time
(Seconds) 41.39

Transactions
/ Second 10.088





我们可以看到加载时间提升了 17
.35%TPS 也提升了 9.33%。因为加载和同时插入更新删除需要比 8M 大的空间但是看起来增加内存性能并没有显著提升我们加大块大小 数据挖掘研究院



DB4: 4K Block



Database Block Size 4K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 16M

Redo Log Files 16M

Tablespaces Dictionary





TPC Results Load Time
(Seconds) 17.35

Transactions
/ Second 10.179





我们看到加载时间提升了 138
%而对 TPS 值没有很大的影响。下面一个简单的念头是表空间的管理从目录切换为本地



DB5: Local Tablespaces



Database Block Size 4K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 16M

Redo Log Files 16M

Tablespaces Local



TPC Results Load Time
(Seconds) 15.07

Transactions
/ Second 10.425



下面我们把数据库块加大到 8K 来看结果




DB6: 8K Block



Database Block Size 8K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 16M

Redo Log Files 16M

Tablespaces Local



TPC Results Load Time
(Seconds) 11.42

Transactions
/ Second 10.683



看来结果并不坏
我们没有理由继续增加块大小了我们还没有根据 CPU 个数调整相应的参数这次我们设置 I/O 的进程数来继续调整



DB7: I/O Slaves



Database Block Size 8K

SGA Buffer Cache 128M

SGA Shared Pool 128M

SGA Redo Cache 16M

Redo Log Files 16M

Tablespaces Local

dbwr_io_slaves 4

lgwr_io_slaves
(derived) 4 数据挖掘研究院



TPC Results



Load Time
(Seconds) 10.48

Transactions
/ Second 10.717





我们的测试是基于 Red Hat 6
.2 进行的内核版本为 2.2.14-5smp。对于 Linux 的内核而言有将近几百个参数可以调整包括对 CPU 类型SMP 支持APIC 支持DMA 支持IDE DMA 缺省参数的使用以磁盘限额支持。根据 Oracle 的文档我们要做的主要调整是共享内存和信号量的大小SHMMAX 最少配置 0x13000000SEMMNI, SEMMSL 和 SEMOPN 分别至少设置 100, 512, 100。这些参数的设置可以通过下面的命令实现 数据挖掘实验室



# echo 0x13000000 >/proc/sys/kernel/shmmax

#
echo 512 32000 100 100 >/proc/sys/kernel/sem





OS1
: 单内核和 IPC



TPC Results

Load Time
(Seconds) 9.54

Transactions
/ Second 11.511





我们有理由相信采用新的内核版本
2.2.16-3smp也应该有性能的提升



OS2
: Newer minor version kernel TPC Results

Load Time
(Seconds) 9.40

Transactions
/ Second 11.522





目前已经有 2
.4 版本的内核和 2.2 相比性能上有了很大的提升我们采用 2.4.1smp



OS3
: Newer major version kernel TPC Results

Load Time
(Seconds) 8.32

Transactions
/ Second 12.815





Linux 缺省读操作时更新最后一次读的时间
但是这个对我们来说并不重要因此我们关闭这个选项通过设置 noatime 的文件属性来实现。对于 Win NT 和 2000 有相似的设置

数据挖掘实验室





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



chattr
+A file_name





对整个目录的实施办法
chattr -R +A directory_name



最好的办法是修改
/etc/fstab 针对每个文件系统入口添加 noatime 关键字。



OS4
: noatime file attribute



TPC Results

Load Time
(Seconds) 5.58

数据挖掘研究院



Transactions
/ Second 13.884





另外一个调整 Linux I
/O 的办法是虚拟内存子系统的调整修改 /ect/sysctl.cong 文件增加下面一行



vm
.bdflush = 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 脏缓冲时将唤醒 bdflush。



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

数据挖掘实验室





age_buffer 50
*HZ, age_super 参数 5*HZ控制 Linux 把脏缓冲写到磁盘的最多等待时间。数值用时钟滴答数jiffies表示每秒为 100 个 jiffies 。



OS5
: bdflush settings TPC Results

Load Time
(Seconds) 4.43

Transactions
/ Second 14.988





经过以上一系列调整后
我们得到的最终加载时间减少了 1015.35%TPS 增加了 45.61%
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?