在我的前一篇博客《oracle性能优化一——简介》对oracle优化进行了简单介绍,那么今天我就从操作系统方面来介绍如何优化oracle数据库。
1.优化思路
在数据库优化的时候,可以从5个方面调整,我们可以做为数据库优化的思路
Ø 网络
Ø 硬件
ü I/O子系统
ü Cpu子系统
ü 存储器
Ø 操作系统
ü UNIX系统
ü NT系统
ü VMS
Ø 数据库
ü 存储参数调整
ü 环境参数调整
Ø 应用程序
批处理和OLTP应用程序具有不同特点,批处理要考虑整体时间,而OLTP更注重单个sql的性能,在考虑单条sql是重点是:
ü 棘手sql调整
ü 索引调整
2.硬件优化
硬件的调整常在应用程序展开的初期见到,并且能解决很多性能问题,随着应用程序的展开,数据库规模的增长,后期主要的调整手段要放到数据库和应用程序上去。它们往往是影响性能的主要因素,同时也比硬件调整要更加经济。当然,如果客户不计成本向里扔钱,不反对硬件升级。
3. 操作系统的优化
对操作系统的优化要看具体的操作系统而言,下面有一些常用的经验可供参考。
1. 对于unix操作系统,我们经常需要调整如下参数:
Ø 共享内存(SharedMemory)
Ø 信号灯(Semaphores)
对于共享内存主要关注下面四个核心参数:SHMMAX(单个共享内存段最大值)、SHMSEG(能够连到单个进程上共享内存段的最大值)、SHMALL(共享内存段总数目)。oracle建议将单个实例的SGA分配在一个共享内存段里。所以SHMMAX一般为物理内存的一半。具体的调整请看oracle的安装手册。最后,可以使用一些系统级工具进行监测:ipcs –b 可以获得当前共享内存段列表;tstshm 可以评估共享内存段设置。
对于信号灯:主要关注SSEMMNI(系统里信号灯集合的最大数目)、SEMMSL(每个集合里信号灯的最大数目)、SEMMNS(系统范围内可用的信号灯的最大数目)。每个oracle进程使用一个信号灯,信号灯数要比process多,否则数据不能启动,每个核心参数的最佳取值同上,在oracle的安装文档里有详细说明,此不赘述。
最后还要注意,要给操作系统留下足够的内存,不要因为SGA太大而造成过多的页交换,太多的page fault会消耗系统资源。
可以利用操作系统的监视工具来分析系统的瓶颈,下面的示例都是本文实例使用sql*loader导入数据文件时的情况,这是系统资源使用的一个高峰。
使用iostat如图1所示,bps表示每秒传输的kb数、tps表示每秒访问磁盘驱动的次数。
图1
可以看到硬盘平均每秒访问磁盘100次左右,平均每秒传输5M左右数据,这样每次访问磁盘可以访问到52K数据。
使用vmstat如图1所示,大家要主要关心pagefault、page pin、page pout,这些数据表明了系统的页交换情况,cpu id显示了cpu资源利用率,procs 表明队列的多少。
图2
图2表明:有大量的页交换产生,空闲内存太少,存在着内存瓶颈。但是cpu有大量的空闲等待时间。这表明SGA太大,导致系统本身的缓存太小。
通过这两个工具的监测,就可以明白原来系统的瓶颈就在内存和硬盘io这两个子系统上,更深层次的原因还有待对oracle的监测来发现。
对于WINDOWNT系列操作系统,可以使用如下手段优化操作系统:
Ø 使不必要的服务失效
Ø取消屏幕保护
Ø 只将机器用做数据库服务器
Ø 如果是WINDOWSNT系统
控制面扳中Networktool –Properties下面四个选项中选择Maximize Throughput for Network Application
控制面扳中Systemtool—Performance中boost选择None,减少文件系统缓冲
Ø 利用性能监视器监视数据库服务器,分析性能瓶颈
Ø 利用微软资源工具箱(resourcespake)中的工具(Process Viewer、Process Explode、Quick Slice、Process Stat)监视数据库服务器,决定操作系统是否优化
做优化,不单单要指导如何优化SQL,还有懂得操作系统的知识,从底层开始优化。