返回顶部
首页 > 资讯 > 精选 >怎样进行oracle的内存分配和调优
  • 522
分享到

怎样进行oracle的内存分配和调优

2023-06-06 02:06:59 522人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关怎样进行oracle的内存分配和调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。        一直都想总结一下orac

今天就跟大家聊聊有关怎样进行oracle的内存分配和调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

        一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且Google很多下。现在记录下来,做下备份。        

        一、概述:                  

oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是 SGA和 PGA(process global area or private global area)。对于 SGA 区域内的内存来说,是共享的全局的,在 UNIX 上,必须为 oracle 设置共享内存段(可以是一个或者多个),因为 oracle 在UNIX 上是多进程;而在 windows 上 oracle 是单进程(多个线程),所以不用设置共享内存段。PGA 是属于进程(线程)私有的区域。在 oracle 使用共享服务器模式下(MTS),PGA中的一部分,也就是 UGA 会被放入共享内存 large_pool_size 中。

       发张图oracle内存架构组成,按照图上面的显示可以一目了然关键的参数和参数名称:

对于 SGA 部分,我们通过 sqlplus 中查询可以看到:

SQL> select * from v$sga; 

NAME                VALUE 

----------             --------------------

Fixed Size                   454032 

Variable Size             109051904 

Database Buffers             385875968 

Redo Buffers                667648 

Fixed Size:         

oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了 SGA 各部分组件的信息,可以看作引导建立 SGA 的区域。

Variable Size :        

包含了 shared_pool_size、java_pool_size、large_pool_size 等内存设置

Database Buffers :       

指数 据缓 冲区:         

在 8i 中包 含 db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三 部 分内 存 。         

在 9i 中 包 含 db_cache_size 、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。

Redo Buffers :        

日志缓冲区,log_buffer。在这里要额外说明一点的是,对于 v$parameter、v$sgastat、v$sga 查询值可能不一样。v$parameter 里面的值,是指用户在初

始化参数文件里面设置的值,v$sgastat 是 oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以 block 为最小单位进行分配的),

v$sga 里面查询的值,是在 oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小大约是 11k(不同环境可能不一样)。       

二、SGA内参数及设置:              

1  Log_buffer 

对于日志缓冲区的大小设置,通常我觉得没有过多的建议,因为参考 LGWR 写的触发条件之后,我们会发现通常超过 3M 意义不是很大。作为一个正式系统,

可能考虑先设置这部分为 log_buffer=3—5M  大小,然后针对具体情况再调整。

log_buffer是Redo log的buffer。

   因此在这里必须要了解Redo Log的触发事件(LGWR)

       1、当redo log buffer的容量达到1/3

       2、设定的写redo log时间间隔到达,一般为3秒钟。

       3、redo log buffer中重做日志容量到达1M

       4、在DBWn将缓冲区中的数据写入到数据文件之前

       5、每一次commit--提交事务

   上面的结论可以换句话说

       1、log_buffer中的内容满1/3,缓存刷新一次。

       2、最长间隔3秒钟,缓存刷新一次

       3、log_buffer中的数据到达1M,缓存刷新一次。

       4、每次提交一个“事务”,缓存刷新一次

2 Large_pool_size 

对于大缓冲池的设置,假如不使用 MTS,建议在 20—30M  足够了。这部分主要用来保存并行查询时候的一些信息,还有就是 RMAN 在备份的时候可能会使用到。

如果设置了MTS,则由于 UGA 部分要移入这里,则需要具体根据 server process 数量和相关会话内存参数的设置来综合考虑这部分大小的设置。

3  Java_pool_size 

假如数据库没有使用 JAVA,我们通常认为保留 10—20M 大小足够。事实上可以更少,甚至最少只需要 32k,但具体跟安装数据库的时候的组件相关(比如 Http server)。

4  Shared_pool_size

Shared_pool_size的开销通常应该维持在300M 以内。除非系统使用了大量的存储过程、函数、包,

比如 oracle erp 这样的应用,可能会达到 500M 甚至更高。于是我们假定一个 1G 内存的系统,可能考虑

设置该参数为 100M,2G 的系统考虑设置为 150M,8G 的系统可以考虑设置为 200—300M

5SGA_MAX_SIZE

SGA区包括了各种缓冲区和内存池,而大部分都可以通过特定的参数来指定他们的大小。但是,作为一个昂贵的资源,一个系统的物理内存大小是有限。

尽管对于CPU的内存寻址来说,是无需关系实际的物理内存大小的(关于这一点,后面会做详细的介绍),但是过多的使用虚拟内存导致page in/out,

会大大影响系统的性能,甚至可能会导致系统crash。所以需要有一个参数来控制SGA使用虚拟内存的最大大小,这个参数就是SGA_MAX_SIZE。当实例启动后,

各个内存区只分配实例所需要的最小大小,在随后的运行过程中,再根据需要扩展他们的大小,而他们的总和大小受到了SGA_MAX_SIZE的限制。

对于OLTP系统,参考:

系统内存

SGA_MAX_SIZE值

1G

400-500M

2G

1G

4G

2500M

8G

5G

6 PRE_PAGE_SGA

oracle实例启动时,会只载入各个内存区最小的大小。而其他SGA内存只作为虚拟内存分配,

只有当进程touch到相应的页时,才会置换到物理内存中。但我们也许希望实例一启动后,所有SGA

都分配到物理内存。这时就可以通过设置PRE_PAGE_SGA参数来达到目的了。这个参数的默认值

为FALSE,即不将全部SGA置入物理内存中。当设置为TRUE时,实例启动会将全部SGA置入物理

内存中。它可以使实例启动达到它的最大性能状态,但是,启动时间也会更长(因为为了使所有SGA

都置入物理内存中,oracle进程需要touch所有的SGA页)。

7 LOCK_SGA

为了保证SGA都被定在物理内存中,而不必页入/页出,可以通过参数LOCK_SGA来控制。

这个参数默认值为FALSE,当指定为TRUE时,可以将全部SGA都锁定在物理内存中。当然,

有些系统不支持内存锁定,这个参数也就无效了。

8 SGA_TARGET

       这里要介绍的时Oracle10g中引入的一个非常重要的参数。在10g之前,SGA的各个内存区

的大小都需要通过各自的参数指定,并且都无法超过参数指定大小的值,尽管他们之和可能并

没有达到SGA的最大限制。此外,一旦分配后,各个区的内存只能给本区使用,相互之间是不能共享的。

拿SGA中两个最重要的内存区Buffer Cache和Shared Pool来说,它们两个对实例的性能影响最大,

但是就有这样的矛盾存在:在内存资源有限的情况下,某些时候数据被cache的需求非常大,

为了提高buffer hit,就需要增加Buffer Cache,但由于SGA有限,只能从其他区“抢”过来——如缩小Shared Pool,

增加Buffer Cache;而有时又有大块的PLSQL代码被解析驻入内存中,导致Shared Pool不足,

甚至出现4031错误,又需要扩大Shared Pool,这时可能又需要人为干预,从Buffer Cache中将内存夺回来。

        有了这个新的特性后,SGA中的这种内存矛盾就迎刃而解了。这一特性被称为自动共享内存管理

(Automatic Shared Memory Management ASMM)。而控制这一特性的,也就仅仅是这一个参数SGA_TARGE。

设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET指定了SGA可以使用的最大内存大小,

而SGA中各个内存的大小由Oracle自行控制,不需要人为指定。Oracle可以随时调节各个区域的大小,使之达到系

统性能最佳状态的个最合理大小,并且控制他们之和在SGA_TARGET指定的值之内。一旦给SGA_TARGET指定值后

(默认为0,即没有启动ASMM),就自动启动了ASMM特性。

三、oracle 内存调优办法

项目的生产环境出现性能问题,我们如何通过判断那些参数需要调整呢?

1 检查ORACLE实例的Library Cache命中率:

标准:一般是大于99%

检查方式:select 1-(sum(reloads)/sum(pins)) "Library cache Hit Ratio" from v$librarycache;

处理措施:

如果Library cache Hit Ratio的值低于99%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小:

SQL>alter system flush shared_pool;

SQL>alter system set shared_pool_size=设定值 scope=spfile;

2 检查ORACLE实例的Data Buffer(数据缓冲区)命中率:

标准:一般是大于90%

检查方式:

select 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"

 from v$sysstat cur, v$sysstat con, v$sysstat phy

where cur.name = 'db block gets'

 and con.name = 'consistent gets'

and phy.name = 'physical reads';

处理措施:

如果HIT RATIO的值低于90%,应调高db_cache_size的大小。通过sqlplus连接数据库执行如下命令,

调整db_cache_size的大小

SQL>alter system set db_cache_size=设定值 scope=spfile

3 检查ORACLE实例的Dictionary Cache命中率:

标准:一般是大于95%

检查方式:

select 1 - (sum(getmisses) / sum(gets)) "Data Dictionary Hit Ratio"

  from v$rowcache;

处理措施:

如果Data Dictionary Hit Ratio的值低于95%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小:

SQL>alter system flush shared_pool;

SQL>alter system set shared_pool_size=设定值 scope=spfile;

4  检查ORACLE实例的Log Buffer命中率:

标准:一般是小于1%

检查方式:

select (req.value * 5000) / entries.value "Ratio"

  from v$sysstat req, v$sysstat entries

 where req.name = 'redo log space requests'

   and entries.name = 'redo entries';

处理措施:

如果Ratio高于1%,应调高log_buffer的大小。通过sqlplus连接数据库执行如下命令,调整log_buffer的大小:

SQL>alter system set log_buffer=设定值 scope=spfile;

5 检查undo_retention:

标准:undo_retention 的值必须大于max(maxquerylen)的值

检查方式:

col undo_retention fORMat a30

select value "undo_retention" from v$parameter where name='undo_retention';

select max(maxquerylen) From v$undostat Where begin_time>sysdate-(1/4);

处理措施:

如果不满足要求,需要调高undo_retention 的值。通过sqlplus 连接数据库执行如下命

令,调整undo_retention 的大小:

SQL>alter system set undo_retention= 设定值 scope=spfile;

注:

32bit  和 64bit  的问题

对于 oracle 来说,存在着 32bit 与 64bit 的问题。这个问题影响到的主要是 SGA 的大小。在 32bit 的数据库下,通常 oracle 只能使用不超过 1.7G 的内存,即使我们拥有 12G 的内存,但是我们却只能使用 1.7G,这是一个莫大的遗憾。假如我们安装 64bit 的数据库,我们就可以使用很大的内存,我们几乎不可能达到上限。但是 64bit 的数据库必须安装在 64bit 的操作系统上,可惜目前 windows 上只能安装 32bit 的数据库,我们通过下面的方式可以查看数据库是 32bit 还是 64bit

    但是在特定的操作系统下,可能提供了一定的手段,使得我们可以使用超过 1.7G 的内存,达到 2G 以上甚至更多。

看完上述内容,你们对怎样进行oracle的内存分配和调优有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 怎样进行oracle的内存分配和调优

本文链接: https://lsjlt.com/news/245743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样进行oracle的内存分配和调优
    今天就跟大家聊聊有关怎样进行oracle的内存分配和调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。        一直都想总结一下orac...
    99+
    2023-06-06
  • JavaScript是怎样进行变量的内存分配
    本篇文章为大家展示了JavaScript是怎样进行变量的内存分配,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript的所有变量(包括函数)在整个处理过...
    99+
    2024-04-02
  • java是如何进行内存分配的
    具体的概念:JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method,也叫静态区)。分配情况:堆区: 存储的全部是对象,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令) ;jvm只有一个...
    99+
    2021-01-02
    java基础 java 内存分配
  • 怎么进行Java内存与垃圾回收调优
    本篇文章给大家分享的是有关怎么进行Java内存与垃圾回收调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的。今天我们...
    99+
    2023-06-17
  • php怎么对内存进行调整
    PHP是一种广泛使用的开源服务器端脚本语言,主要用于创建动态网页。在使用PHP时,可能会面临内存不足的问题,这时候我们就需要对内存进行调整。本文将介绍如何修改PHP的内存以提高脚本的性能。确定PHP.ini文件首先,需要找到PHP.ini文...
    99+
    2023-05-14
    php
  • 怎么在CentOS中对程序内存进行分配
    怎么在CentOS中对程序内存进行分配?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。[cpp] view plaincopy在CODE上查看代码片派生到我的...
    99+
    2023-06-07
  • oracle内存参数的调整优化
    本篇内容介绍了“oracle内存参数的调整优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.历史内存大...
    99+
    2024-04-02
  • JVM垃圾回收机制详解和怎样进行调优
    JVM垃圾回收机制详解和怎样进行调优,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这里向大家简单介绍一下JVM垃圾回收机制详解和调优,gc即垃圾收集机制,是指jvm用于释放...
    99+
    2023-06-17
  • 怎样进行VNC的安装和配置
    本篇文章给大家分享的是有关怎样进行VNC的安装和配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.服务器安装VNC服务端可以直接rpm安装vnc的服务端:rpm ...
    99+
    2023-06-06
  • Linux内核调优是怎样的
    这篇文章主要为大家分析了Linux内核调优是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux内核调优是怎样的”的知识吧。一、内核文件系统操作系...
    99+
    2023-06-28
  • 怎样进行Linux网络配置的分析
    本篇文章给大家分享的是有关怎样进行Linux网络配置的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。进入Linux界面后,右击选择open terminal:会出现命令行窗...
    99+
    2023-06-06
  • JVM中内存分配策略是怎么样的
    小编给大家分享一下JVM中内存分配策略是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!内存分配策略   了解GC其中很重要一点就是了解JVM的内...
    99+
    2023-06-02
  • 怎么配置php.ini进行PHP性能调优
    这篇文章主要介绍“怎么配置php.ini进行PHP性能调优”,在日常操作中,相信很多人在怎么配置php.ini进行PHP性能调优问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么配置php.ini进行PHP性...
    99+
    2023-06-29
  • 怎样通过NoSQL内存数据库来进行Linux性能优化
    这期内容当中小编将会给大家带来有关怎样通过NoSQL内存数据库来进行Linux性能优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  我们不仅要选择适合自己口味的NoS...
    99+
    2024-04-02
  • 怎样进行Apache的配置
    本篇文章为大家展示了怎样进行Apache的配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。...
    99+
    2023-06-04
  • Couchbase中怎么进行性能调优和优化
    Couchbase是一个高性能的NoSQL数据库,但是在特定情况下可能需要进行性能调优和优化。以下是一些常见的优化和调优方法: ...
    99+
    2024-03-08
    Couchbase
  • YARN和MapReduce的内存优化怎么配置
    本篇内容主要讲解“YARN和MapReduce的内存优化怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“YARN和MapReduce的内存优化怎么配置”吧!在Hadoop2.x中, YAR...
    99+
    2023-06-02
  • 如何进行linux内存的Hugepages优化
    本篇文章给大家分享的是有关如何进行linux内存的Hugepages优化,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hugepages是从Linux kernal 2.6后被...
    99+
    2023-06-06
  • Linux怎样进行安装和配置zokeeper
    这篇文章将为大家详细讲解有关Linux怎样进行安装和配置zokeeper,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。下载zokeeper上传到 /usr/local/tmp &n...
    99+
    2023-06-05
  • Oracle调优中常用表KEEP到内存中的示例分析
    本篇文章为大家展示了Oracle调优中常用表KEEP到内存中的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 数据迁移后性能受...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作