快捷搜索:

Oracle9i 动态SGA,PGA特性探索

Oracle9i动态SGA,PGA特性探索

  多条件查询asp代码数据asp菜鸟以上仅为参考值,不同系统可能差异比较大,需要根据具体情况调整。建议在设置参数的同时,init中使用 lock_sga ,在不同的平台上可能有不同的方式,使得SGA锁定在物理内存中而不被放入 SWAP 中,这样对效率有好处关于内存的设置,要再进行细致的调整,起的作用不大,但可根据statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息来考虑微调

  在Oracle9i之前,PGA的计算和控制都是比较复杂的事情,从Oracle9i开始,Oracle提供了一种SQL内存管理的新方法:自动化SQL执行内存管理(Automated SQL Execution Memory Management),使用这个新特性,Oracle可以自动调整S Q L内存区,而不用关闭数据库,这一改进大大简化了DBA的工作,同时也提高了Oracle数据库的性能。

  要理解PGA的自动调整,还需要区分可调整内存(TUNABLE MEMORY SIZE)与不可调整内存(UNTUNABLE MEMORY SIZE)。可调整内存是由SQL工作区使用的,其余部分是不可调整内存。

  也就是说,对于一个单纯的数据库服务器,通常我们需要保留20%的物理内存给操作系统使用,剩余80%可以分配给Oracle使用。Oracle使用的内存分为两部分SGA和PGA,那么PGA可以占用Oracle消耗总内存的20%(OLTP系统)至50%(DSS系统)。

  也就是说,对于一个单纯的数据库服务器,通常我们需要保留20%的物理内存给操作系统使用,剩余80%可以分配给Oracle使用。Oracle使用的内存分为两部分SGA和PGA,那么PGA可以占用Oracle消耗总内存的20%(OLTP系统)至50%(DSS系统)。

  Oracle9i数据库在内部特性方面有着非常大的增强,其中一个最令Oracle DBA兴奋的莫过于可以动态设置全部的Oracle SGA控制参数。与8i不同的是asp技术,原来都将初始化参数放到一个文本文件中,并且在数据库启动的时候读取,Oracle9i却可以通过ALTER DATABASE和ALTER SYSTEM命令复位全部的Oracle参数。

  在9i前,如果想对Oracle数据库的处理模式作一些改变的话,Oracle管理员必须关闭数据库并且重新设置INIT.ORA文件中的参数,然后重新启动数据库。对于白天使用OLTP模式运作,晚上切换到数据仓库模式的Oracle数据库来说,这种重新设置是经常做的。

  这种可以在Oracle SGA中动态增加和缩小不同区域的能力为Oracle数据库管理员提供了一些令人激动的新特性。SGA每个区域的数据库活动都可以独立地被监视,而且也可以在Oracle数据库中,根据使用的模式分配和取回资源。

  我们首先来看以下Oracle9i数据库和Oracle8i数据库的一些区别。Oracle9i的一个最重要的加强是对于连接到Oracle数据库的全部专用连接,都无需要拥有一个独立的PGA空间。在Oracle8i中,对于专用的Oracle连接,我们都需要在内存中分配一个独立的区域,称为Program Global Area或者PGA。PGA空间中包含有SORT_AREA_SIZE和额外的RAM控制结构以用来维护连接任务的状态。在Oracle9i中,PGA空间已经被Oracle SGA中的一个新内存空间代替,它是通过PGA_AGGREGATE_TARGET参数来设置的

  由于全部的内存使用都在Oracle SGA中分配,所以Oracle数据库管理员可以将分配给Oracle服务器的内存加大,可以分配至直到Orace服务器全部内存的80%。Oracle建议将服务器其余的20%内存保留给操作系统的任务。

  当用户连接到Oracle9i数据库时,排序工作所需要的内存将会在Oracle9i的PGA_AGGREGATE_TARGET区域中分配。这可以令Oracle9i比Oracle8i跑得更快,这是由于内存只在需要的期间才分配,并且在完成后就可以马上释放给其它连接的Oracle任务使用。

  由于Oracle管理员现在可以增加和减少SGA的全部区域,因此我们可以快速地查看一下SGA区域是怎样的,这样我们就可以知道Oracle DBA如何监视这些区域的使用并且为Oracle数据库更有效地重新分配内存。SGA的区域可以分为以下的部分。

  Log buffer--对于Oracle redo log缓冲是否有大量活动,我们可以在log switch(日志转换)的频率上看出来。Oracle管理员可以监视redo log区域的活动,并且在Oracle数据库需要额外的内存为原始的缓冲区域服务时,动态地增加内存。

  由上面的例子看到,在每天的9:00AM到10:AM之间,shared pool明显缺少内存。我们就可以在这段期间动态地重新设置shared_pool参数以由db_cache_size中分配额外的内存。

  它们的目的是通过这些V$视图来监视SGA中的内存使用,然后根据Oracle实例的处理要求,通过ALTER SYSTEM命令重新分配内存。我们以下来看一些这些新的Oracle9i特性和脚本,它可以帮助我们查看详细的内存使用。

  我们还可以使用V$PGASTAT视图来决定我们的Oracle实例的内存使用。V$PGASTAT视图提供了PGA使用和自动内存管理的实例级摘要统计信息。以下的脚本提供了全部Oracle9i连接的整体内存使用的统计信息。

  Total PGA used for auto workareas - 这个统计监视内存的使用或者全部运行在自动内存模式中的全部连接。要记住的是,并不是全部的内部进程使用自动内存特性。例如,Java和PL/SQL 将分配内存,但是这部分将不会统计到这个值中。因此我们可使用整体PGA的值来减去该值,以得到连接和Java and PL/SQL使用的内存。

  以下的UNIX脚本可以用来重新设置OLTP和DSS的SGA值而无需将实例停下来。在这个例子中,我们假定有一个孤立的带有8GB内存的的Oracle服务器。我们还假定保留20%的内存供UNIX使用,而剩下的6GB内存则用作Oracle和Oracle连接。这些脚本是在HP/UX或者Solaris中使用的,并且接受$ORACLE_SID作为一个参数。

  现在我们已经知道了一个常见的方式来修改Oracle的配置,我们也很容易地看到可以很简单地开发一个技术来连续地监控Oracle的处理需求,并且根据现有的数据库需求来使用ALTER SYSTEM作修改。

  虽然Oracle9i中的内存管理仍然需要很多的手工操作,不过大部分的Oracle管理员可以使用工具来连续地监控Oracle SGA中的内存使用,并且可以根据Oracle instance中现在的使用情况来自动地重新分配内存。这样就可以令Oracle 管理员根据系统的变化来灵活地重新设置他们的系统。

  正在看的ORACLE教程是:ORACLE应用经验(1)。JAN-1(January) FEB-2(February) MAR-3(March)APR-4(April) MAY-5(Ma...查看详情

  正在看的ORACLE教程是:Oracle性能究极优化 下。我们有理由相信采用新的内核版本(2.2.16-3 smp)也应该有性能的提升: OS2: Newer minor version kernel TPC Results Load Time (Seconds) 9...查看详情

  正在看的ORACLE教程是:Oracle性能究极优化。增大 SGA 已经缓冲看来对于性能的提升并不显著,加载时间只提升了 1.73%。下面我们增加 SGA 重做日志的大小: DB3: Log Buffer Database Block Size 2K SGA Bu...查看详情

  原作者:Bert Scalzo目前,HP,Compaq,Dell,IBM 以及 Oracle 都在加快速度拥抱 Linux ,这个开放源码的操作系统。根据 eWeek 的统计,去年 Linux 服务器的销售量大约占据了 Compaq 的 30%,Dell 的 13.7%,IBM ...查看详情

  正在看的ORACLE教程是:Oracle密码文件的使用和维护。概要:Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库的安全性 是数据库管理工作的重要内容。本文是笔者在总结Oracle数据库安全管理工作的基础上,对Oracle数据库系统密码文件的创建、使用...查看详情

  正在看的ORACLE教程是:Oracle如何直接运行OS命令(下)。EXEC SQL WHENEVER SQLERROR CONTINUE; sqlglm(msg_buffer, &buffer_size, &msg_length); printf(...查看详情

  正在看的ORACLE教程是:Oracle如何直接运行OS命令(上)。在Oracle 8i中,往往会出现要在存储过程中运行操作系统命令的情况。一般来说,利用Oracle Enterprise Manager设定作业时可以达到这个目的。但是由于OEM在设定作业缺 乏灵活性,设定的...查看详情

  正在看的ORACLE教程是:Oracle数据库安全策略分析 (三)。数据的安全性策略: 数据的生考虑应基于数据的重要性。如果数据不是很重要,那么数据的安全性策略可以稍稍放松一些。然而,如果数据很重要,那么应该有一谨慎的安全性策略,用它来维护对数据对象访问的有效控制。用...查看详情

  正在看的ORACLE教程是:Oracle数据库安全策略分析(二)。SQL*DBA命令的安全性: 如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权限相关的命令只能分配给Oracle软件拥有者和DBA组的用户,因为这些命令被授予了特殊的系统权限。 ...查看详情

  正在看的ORACLE教程是:Oracle数据库安全策略分析(一)。数据库安全性问题一直是围绕着数据库管理员的恶梦,数据库数据的丢失以及数据库被非法用户的侵入使得数据库管理员身心疲惫不堪。围绕数据库的安全性问题提出了一些安全性策略,希望对数据库管理员有所帮助。对于数据库数据的安...查看详情

您可能还会对下面的文章感兴趣: