首页 理论教育内存调优:数据库性能管理与调优

内存调优:数据库性能管理与调优

【摘要】:通过持续的调优工作和监测可以找到运行中应用程序的最佳值。此时,UNIX内核的内存不易减少,需要有效地调优数据库内存区域,使用更少内存发挥相同水平的性能。如果内核内存使用约100 MB,并发用户为30名,每个Oracle进程的内存为 10 MB,假定 sort_area_size为 1MB,按以下公式计算出430 MB。100 MB+30×=430 MB因此,物理内存为1 GB的系统,可分配大约600 MB的SGA使用。

为克服物理内存的限制,UNIX系统使用虚拟(virtual)内存的概念运行内存,虚拟内存的大小为“物理内存+虚拟磁盘(交换磁盘)”。虚拟内存由一组page构成,page的大小通常为4 KB(8 KB)。 Page为内存的分页单位,由UNIX的page daemon管理,为保持尽可能多的可用内存,将当前不使用的page保存到磁盘(页面调出)中。如果当前的某个进程请求物理内存中不存在的page(缺页错误),则会将磁盘中保存的page作为内存读取(页面调进)。简单来说,交换操作比分页的使用范围更广泛。如果说分页是以page为单位的管理,交换则管理进程使用的所有page。因此,要重新恢复该进程,所有相关的page都需要重新调进到内存中,对性能有很大的不良影响。为保证系统正常运行,绝对不能发生交换情况,并要避免同时发生分页的情况。因此,监测内存时,分析的重点主要是分页和交换的有无与数量。要查看分页和交换的详细信息,可使用以下指令,如图1-6所示。

图1-6 查看指令

(a)确认分页;(b)确认交换

如果系统中发生太多分页和交换,则无法保证系统性能。因此要重新配置系统,使大部分已用内存都可以存到当前可用的物理内存中。系统的物理内存是固定的,用户可以根据需要改变所要使用的内存。因此,要调整用户使用的内存。例如,假定当前有1 GB的内存,通常考虑的内存量为UNIX内核使用的内存、数据库使用的内存区域、个别进程占用的内存总和。通常指定数据库的内存区域如果是Oracle DBMS,则SGA(system global area)为使用OS全部内存的40%~60%(实际上数据库的内存使用情况可根据OLTP· DSS·DW等业务的性质逐渐使用更大的内存区域)。因此,如果OS的内存(物理)为1 GB,则数据库的内存区域配置约为400~600 MB。通过持续的调优工作和监测可以找到运行中应用程序的最佳值。如果因OS中发生太多交换和分页而判定内存不足,则要减少内存的使用量,以避免出现交换和分页。此时,UNIX内核的内存不易减少,需要有效地调优数据库内存区域,使用更少内存发挥相同水平的性能。(www.chuimin.cn)

在OS上运行的数据库所用的DBMS拥有多种特性,对于Oracle DBMS,可通过减少可能位于Oracle进程的个别PGA (program global area)区域中的sort_ area_ size (init.ora),从而减少各个进程使用的内存。此时如果减少SGA,则会降低数据库缓冲区缓存、库缓存、字典缓存的命中率,从而造成性能下降;如果减少sort_area_size,在Oracle中选择数据时如果需要排序,还可能会出现物理I/O,因此调整时要考虑到各个方面。

全部内存使用量可按以下方法计算。如果内核内存使用约100 MB,并发用户为30名,每个Oracle进程的内存为 10 MB,假定 sort_area_size为 1MB,按以下公式计算出430 MB。其中,sort_area_size为所有用户都进行排序时计算出的最大值[如果Oracle服务器的运行方式为多线程服务器(MTS)方式,sort_area_size将包含到SGA中]。

100 MB+30×(10 MB+1 MB)=430 MB

因此,物理内存为1 GB的系统,可分配大约600 MB的SGA使用。如果并发用户更多,则需要减少 SGA区域。然后指定初始设定值,查看内存使用量-交换-分页的量,略微增加或减少 SGA,导出最优化的内存使用量结构。