|
|
|
|
| 搜索 首页 |
"Damn the torpedoes! Full speed ahead." - Admiral David Farragut Linux Journal 发表了一篇优化 Oracle 数据库的文章,感觉十分的有用。简要介绍其摘要和大家共同分享 Linux 在企业级数据库上应用。 原作者:Bert Scalzo
尽管 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
TPC Results Load Time (Seconds) 49.41 显然需要加大 SGA 大小,我们来看 DB2 的结果: DB2: Cache & Pool
Database Block Size 2K
TPC Results Load Time (Seconds) 48.57 增大 SGA 已经缓冲看来对于性能的提升并不显著,加载时间只提升了 1.73%。下面我们增加 SGA 重做日志的大小: DB3: Log Buffer
Database Block Size 2K
TPC Results Load Time (Seconds) 41.39 我们可以看到加载时间提升了 17.35%,TPS 也提升了 9.33%。因为加载和同时插入,更新,删除需要比 8M 大的空间,但是看起来增加内存性能并没有显著提升,我们加大块大小: DB4: 4K Block
Database Block Size 4K
TPC Results Load Time (Seconds) 17.35 我们看到加载时间提升了 138%!而对 TPS 值没有很大的影响。下面一个简单的念头是表空间的管理从目录切换为本地: DB5: Local Tablespaces
Database Block Size 4K
TPC Results Load Time (Seconds) 15.07 下面我们把数据库块加大到 8K 来看结果: DB6: 8K Block
Database Block Size 8K
TPC Results Load Time (Seconds) 11.42 DB7: I/O Slaves
Database Block Size 8K TPC Results
Load Time (Seconds) 10.48 我们的测试是基于 Red Hat 6.2 进行的,内核版本为 2.2.14-5smp。 对于 Linux 的内核而言,有将近几百个参数可以调整,包括对 CPU 类型,SMP 支持,APIC 支持,DMA 支持,IDE DMA 缺省参数的使用以磁盘限额支持。根据 Oracle 的文档,我们要做的主要调整是共享内存和信号量的大小,SHMMAX 最少配置 0x13000000,SEMMNI, SEMMSL 和 SEMOPN 分别至少设置 100, 512, 100。这些参数的设置可以通过下面的命令实现:
# echo 0x13000000 >/proc/sys/kernel/shmmax OS1: 单内核和 IPC
TPC Results 我们有理由相信采用新的内核版本(2.2.16-3smp)也应该有性能的提升:
OS2: Newer minor version kernel TPC Results 目前已经有 2.4 版本的内核,和 2.2 相比,性能上有了很大的提升,我们采用 2.4.1smp:
OS3: Newer major version kernel TPC Results Linux 缺省读操作时更新最后一次读的时间,但是这个对我们来说并不重要,因此我们关闭这个选项,通过设置 noatime 的文件属性来实现。(对于 Win NT 和 2000 有相似的设置) 如果只是相对 Oracle 的数据文件设置,我们的命令是
chattr +A file_name 对整个目录的实施办法:chattr -R +A directory_name 最好的办法是修改 /etc/fstab ,针对每个文件系统入口,添加 noatime 关键字。 OS4: noatime file attribute
TPC Results 另外一个调整 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 经过以上一系列调整后,我们得到的最终加载时间减少了 1015.35%,TPS 增加了 45.61%。 相关文章:
Oracle 9i 在 Red Hat 7.1 和 7.2 上的安装 < | >
|
|
|||||||||||
|
|||||||||||||
|
禅道
须在生活中修,在日常言语、形式里面契合、印证
自我的觉醒却是光阴偷不走,人拿不走的。 | ||||||
|
||||||