Oracle服务器性能全面调整攻略

2023-11-18

Oracle服务器性能全面调整攻略

Oracle服务器是高度可调的数据库系统,它提供了许多特性,正确地设置和调整可以有效提高系统性能,因此,对系统进行调整是数据库管理员的主要责任。由于应用设计人员很少或根本不会给数据库管理人员提供必要的信息,因此只能采用对已有应用系统影响最小的调整方式:重新分配内存、调整磁盘I/O来提高性能。

调整内存

Oracle服务器将信息存储在两个地方:内存、磁盘。因为内存的存取比磁盘的存取快得多,为了获得最佳的性能,总是希望将数据尽可能多地放在内存供用户读取。可是系统内存资源是有限的,不可能将所有数据放在内存,因此,要在现有内存资源的基础上,通过调整内存分配来获得尽可能好的性能。调整内存的分配,实际上就是对Oracle数据库内存结构分配恰当尺寸的可用内存。

为了取得好的效果,调整要按如下顺序进行:调整操作系统、调整共享池、调整缓冲区高速缓存。由于后面调整所作的改变可能需要对前面的调整再次进行判断和调整,因此,调整的过程可能需要若干次循环。

调整操作系统

操作系统运行得好,是Oracle调整内存分配的基础,其方法如下:

减少调页或交换 过度的调页或交换必定会降低操作系统的性能。可以用操作系统提供的实用程序进行监控,如发现有过度的调页或交换,则说明系统总内存存放不下已经分配在内存中的信息。解决的办法是增加系统内存总量,或减少已经分配的内存量。

调整系统全局区(SGA SGAOracle数据库存放系统信息的一块区域,由所有的服务器和客户进程共享,主要由以下四部分组成:数据高速缓冲区、字典缓冲区、重演日志缓冲区、共享SQL池。建SGA的目的是为了将数据放在内存以便快速存取,如果SGA过大内存放不下,就要被交换到磁盘,产生过度交换或调页,数据存取就快不了。在大多数系统里,过度调页的坏处比大SGA的好处对性能的影响要大得多,因此宁可SGA小些,也要保证整个SGA能被内存容下。 可利用SQL*DBA语句SHOW SGA来查看分配了多少内以及每个内部结构的大小。

该机系统内存 256M SGA大小约为 115M ,应用过程中不会发生调页或交换。为了提高性能,还可以在初始化参数文件INIT.ORA中添加参数 PRE_PAGE_SGA=FALSE,使得Oracle在启动Instance时将整个SGA读入内存。该设置虽然会增加Instance启动时间,但会减少Oracle在启动后达到性能峰值所用的时间。

调整共享池

调整共享池主要包括三个方面:库高速、数据字典缓存、对话信息。由于Oracle管理共享池中数据的算法,使得数据字典缓存中的数据比库高速缓存中的数据在内存中存留的时间长,因此,只要把库高速缓存调整成可以接受的命中率,就能提高数据字典缓存的命中率。

检查、调整库高速缓存 可以通过动态性能表V$LIBRARYCACHE来查询Instance启动以来所有库高速缓存的活动。

V$LIBRARYCACHE表中以下几列反映了库高速缓存在执行调用阶段的不命中:

PINS列,它的值显示在库高速缓存中执行的次数;

RELOADS列,它的值显示在执行阶段库高速缓存不命中的数目。

  

一般来说,库高速缓存总不命中数与总存取数之比应当接近零,本例为0.001%,说明库高速缓存命中率很高,该比率如果接近或大于1%,就应当立即采取措施来减少这种不命中。

措施一:增加初始化参数shared_pool_size的值,提高库高速缓存可用的内存数量,同时为了取得好的效果,可能还要增加初始化参数open_cursors的值,以提高对话允许的光标数。需要注意的是:为库高速缓存分配了太多的内存可能引起调页或交换。

措施二:写等价的SQL语句,尽可能让SQL语句和PL/SQL块共享一个SQL区,来减少库高速缓存的不命中。这是应用设计人员应该做到的:SQL语句或PL/SQL块的文本必须每一个字符都等价,包括大小写和空格。

检查、调整数据字典高速缓存 在应用已经运行,数据库达到了一种相对稳定的状态之后,可以通过动态性能表V$ROWCACHE来查询数据字典高速缓存的活动。

V$ROWCACHE表中以下几列反映了数据字典高速缓存的使用和有效性:

GETS列,它的值显示请求相应项的总数。

GETMISSES列,它的值显示造成高速缓存不命中的数据请求数。

  

一般来说,数据字典高速缓存总不命中数与总存取数之比应当接近零,本例为1.616%,说明数据字典高速缓存命中率比较高,该比率如果大于10%,甚至在应用过程中该比率还在增长时,就应当立即通过增加初始化参数shared_pool_size的值,来提高数据字典高速缓存可用的内存数量,从而减少这种不命中。

检查、调整对话信息占用共享池的大小 多线程服务器允许进程共享内存和连接,能支持大量用户同时访问数据库。使用多线程服务器结构时,需要将共享池分得大一些以容纳对话信息。可以通过动态性能表V$SESSTAT来查询Oracle收集对话信息使用的总内存统计。

V$SESSTAT表中session memory列,显示分配给对话的内存字节数。

max session memory列,显示分配给对话的最大内存数。

  

第二个结果比第一个结果大,但第一个结果能更好地估计共享内存应该多大,除非所有对话几乎在同一时间都达到最大分配。如果共享池不够,可以通过增加初始化参数shares_pool_size的值来增加。本例中共享池的大小为52428800,容纳对话信息绰绰有余。

调整缓冲区高速缓存

Oracle启动后不断收集和统计数据存取的情况,并将其存放在动态性能表V$SYSSTAT中。表中对调整缓冲区高速缓存有用的为以下几项统计:

dbblock gets 该统计值为数据请求的总数;

consistent gets 该统计值为通过对内存缓冲区存取即能满足的请求数;

physical reads 该统计值为磁盘文件存取的总数。

下面语句可以监控在一段时间内V$SYSSTAT表中的统计:

 

 

用以下公式计算缓冲区高速缓存的命中率 :命中率=1-( physical reads /(db block gets+ consistent gets))。根据以上查询出的统计数据,计算出缓冲区高速缓存的存取命中率为99.198%

  

该例中,命中率很高,说明缓冲区高速缓存够用,性能良好。如果高速缓存大到足以容纳最经常存取的数据,在保持高命中率的前提下,可以通过适当减少初始化参数db_block_buffers的值来减少高速缓存的大小,从而可将省出来的内存用于其他Oracle内存结构。如果命中率低于70%的话,性能就会造成下降,就应该立即通过增加初始化参数db_block_buffers的值(它的最大值为65535),来扩大缓冲区高速缓存的大小。

重新分配内存

经过上述对Oracle内存结构分配的调整,可以再次对库高速缓存、数据字典高速缓存和缓冲区高速缓存的性能作出评估。如果有可能减少某种结构的内存消耗,就可以考虑给其他结构多分配一些内存,以得到增加可用内存的好处。但要注意,经过调整后的Oracle内存结构,如果使SGA过大而不能全部填入主存,就可能会使操作系统引起过度调页或分配,从而降低性能。

在重新分配内存的过程中,如果发现要取得Oacle最佳内存结构十分困难,就需要考虑花费资金,通过在计算机中增加更多的内存来进一步改进性能。

 

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle服务器性能全面调整攻略 的相关文章

  • 课程完成时更新外部数据库

    我的场景 Moodle 中的用户完成了一门课程 一旦发生这种情况 我想更新外部数据库 我的理解是 每次运行 cron 作业时都会触发 course completed 事件 使用一些简单值 例如已完成课程的用户名 ID 课程 ID 以及完成
  • 插入触发器是否需要提交语句

    这是实际场景的简化 在哪里可以看到表 B 上缺失的记录 假设有两个数据库表 A B 表 A 上有一个插入触发器 它对表 B 进行插入 但它没有 COMMIT 如果我们通过 JDBC 连接器打开数据库连接 并对表 A 进行插入 并提交 触发器
  • 将 SQL 依赖关系与 Azure 结合使用

    在我的本地数据库中 Sql 依赖关系工作正常 但是当我迁移到 Azure 数据库时 它就不起作用了 我检查服务代理是否已启用 并且它已激活 这是错误 此版本的 SQL Server 不支持语句 RECEIVE MSG 这是我的代码 publ
  • 基于 MySQL 中的另一列创建计算列

    我的表中有 2 列 varchar 8 and an int 我想要auto increment the int column当我这样做时 我想将值复制到varchar 8 column 但用 0 填充它直到它达到 8 个字符长 因此例如
  • C# 和 .NET 的“最佳”数据访问框架/方法是什么?

    编辑 我将其设为社区维基 因为它更适合协作格式 有多种方法可以从 NET 访问 SQL Server 和其他数据库 一切都有其优点和缺点 这永远不会是一个简单的问题 哪个是 最好的 答案永远是 这取决于 然而 我正在寻找在不同级别的系统背景
  • 操作数类型冲突:uniqueidentifier 与 int 不兼容

    当我尝试创建下面的存储过程时 出现以下错误 操作数类型冲突 uniqueidentifier 与 int 不兼容 我不清楚是什么原因导致了这个错误 UserID 实际上是我所有表中的一个 int 有人可以告诉我我做错了什么吗 create
  • 在 PLSQL Oracle 中抛出特定错误消息...在休眠中捕获?

    是否可以在 PL SQL oracle 存储过程中抛出特定的错误消息 并在调用它时在 Hibernate 中捕获它 您可以从 PL SQL 代码中抛出用户定义的错误消息 20000 到 20999 之间的错误代码保留用于用户指定的错误消息
  • 如何从一个 cfc 文件中函数的查询中调用另一个 CFC 文件中的函数?

    我有一个具有多种功能的 cfc 文件 info cfc 如下所示
  • PHP数组转SQL

    array array 53 gt array num gt 20 name gt aaa 10 gt array num gt 20 name gt bbb sql 插入数据 id num name 值 53 20 aaa 10 20 b
  • MySQL 1443:这是什么意思?

    我正在尝试在 MySQL 5 0 中进行以下形式的更新 update mytable myfield t set f blah where t id in select v id from myview v where MySQL 告诉我
  • 显示 Presto 中所有模式的表

    急速 SHOW SCHEMAS 返回所有模式 SHOW TABLES FROM foo 返回 foo 模式的所有表 有没有一种简单的方法可以从 Presto 中的所有模式返回表 您可以使用select table schema table
  • MYSQL枚举:@rownum,奇偶记录

    我问了一个关于为查询结果创建临时 虚拟 ID 的问题 mysql 和 php 查询结果的临时 虚拟 ID https stackoverflow com questions 4063998 mysql php temporary virtu
  • SQL 错误:1452:无法添加或更新子行:外键约束失败

    我的数据库中有两个表 order course order有一个专栏courseid哪个参考列id of the course桌子 每当我尝试做的时候saveAll in CakePHP以上SQL将显示错误并且不会保存数据 听起来是在数据库
  • 如何根据 Postgres 中的过滤条件更新深度嵌套的 JSON 对象?

    我有一张桌子mapping transform带有 JSONB 列content json包含类似的东西 meta mapping src up dest down 我想添加一个新的 JSON 条目 rule names some name
  • 数据库索引:是好事、坏事还是浪费时间?

    这里通常建议添加索引作为性能问题的补救措施 我只讨论读取和查询 我们都知道索引会使写入速度变慢 多年来 我在 DB2 和 MSSQL 上多次尝试过这种补救措施 但结果总是令人失望 我的发现是 无论索引会让事情变得更好是多么 明显 事实证明查
  • 消息传递功能创建 Sql 查询和数据库视图

    鉴于以下情况 我需要能够获取给定用户参与的所有线程的列表 首先按最新消息排序 仅显示最新消息 每个线程 1 条消息 这是上面的 SQL 查询 SELECT Message MessageId Message CreateDate Messa
  • SELECT DISTINCT 和 SELECT UNIQUE 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 Oracle 9i 中的唯一与不同多列 https stackoverflow com questions 174912 unique vs distinct multi column in orac
  • SQL 从一列到另一列搜索字符串

    以前可能有人问过这个问题 但我不知道如何搜索它 我想查找 Column2 中的字符串是否是 Column1 的一部分 或者根本没有在 Column1 中使用 Column1 Column2 ABCDE JKL XC XC PQ A XYZ
  • 为什么我们需要带有聚合函数的 GROUP BY?

    我看到一个例子 其中有一个员工列表 表 及其各自的月薪 我对工资进行了汇总 并在输出中看到了完全相同的表格 这很奇怪 这是必须做的 我们必须找出本月我们支付多少员工工资 为此 我们需要在数据库中对他们的工资金额进行求和 如下所示 SELEC
  • 如何使用 Linq to SQL 从存储过程中检索多行?

    我最近开始使用 Linq to SQL 想知道如何通过执行存储过程来获取多行 这是我想要使用的一个简单的 sp CREATE PROCEDURE gsp ftsmultiple SearchKey varchar 100 AS BEGIN

随机推荐

  • RabbitMQ消息确认机制

    消息确认 基本流程 说明 生产者发送消息到RabbitMQ Server后 RabbitMQ Server需要对生产者进行消息Confirm确认 消费者消费消息后需要对 RabbitMQ Server进行消息ACK确认 消息确认模式 Rab
  • iterable java_如何在Java中将Iterable转换为Collection?

    iterable java There are various ways to convert Iterable to Collection in Java programming language 有多种方法可以用Java编程语言将Ite
  • BUUCTF--[第二章 web进阶]死亡ping命令

    BUUCTF 第二章 web进阶 死亡ping命令 本文只是对官方wp进行了一点修改 因为在测试过程中发现8080端口弹不回flag 在本地测试也是一样的结果 但是把端口修改成8089 其他端口应该也可以 并且nc监听方式为 nc lvp
  • C++ 之 常量成员函数

    常量成员函数 const member function 可读取类中的数据成员 但不能修改 1 声明 1 1 const 关键字 参数列表后 加 const 关键字 声明为常量成员函数 表明其不被允许修改类的数据成员 下面的类 以年 月 日
  • 【技术经验分享】计算机毕业设计Python+SparkML知识图谱新闻推荐系统 新闻数据分析 新闻爬虫 新闻大数据 新闻可视化 大数据毕业设计 大数据毕设 机器学习 深度学习

    开发技术 Python爬虫 springboot vue js SparkML SparkALS 机器学习 深度学习 协同过滤算法 说明 后端使用SpringBoot Mybatis Plus框架 前端使用Vue js Element Pl
  • Element UI 框架中Loading 区域加载的使用方法

    给自己打个小广告 有开发APP 小程序 网站 后台系统需求 或者 想学习前端的可以私信我哈 Loading 加载用于加载数据时显示动效 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img MgPFZSRk 16602
  • 怎样提升Java水平

    怎样提升Java水平 想更快更好地提高你的Java编程水平 除了在日常工作中积累经验外 你还可以在空闲时间通过学习来提高你的技术技能 首先Java 理论基础不会太差 一个Java基础理论知识都很差的Java程序员 那么你期望他的Java代码
  • docker安装rocketmq4.6.1(精简版)

    一 创建文件 mkdir p usr local rocketmq server logs usr local rocketmq server store usr local rocketmq broker logs usr local r
  • 黑白色老照片一键上色在线工具,让老照片漂亮起来

    每个人家中多少都有一些老旧的黑白照 或是当初拍照时只有拍黑白 跟彩色照片比虽然别有一番风味 但有时候还是会想看如果是彩色不知道会变怎样 会不会更好看 而这款 线上工具就能帮你实现 只要把你的黑白照上传 它就会透过 AI 技术自动帮你上色 我
  • idea中相同包不聚合

    idea中创建子包不折叠 项目场景 问题描述 原因分析 解决方案 项目场景 提示 idea使用中出现的问题 突然发现相同包不能聚合了 问题描述 提示 相同包不能聚合 突然出现很多路径相同的很多包下的文件 原因分析 提示 不小心将设置动了 解
  • 95-38-055-Buffer-UnpooledDirectByteBuf

    文章目录 1 总述 1 1 局部图 1 2 概述 1 总述 1 1 局部图 1 2 概述 Netty的UnpooledDirectByteBuf在NIO的DirectByteBuf上采用组合的方式进行了封装 屏蔽了对程序员不友好的地方 并使
  • 如何使用js创建一个构造函数及重写toString的方法

    在js中使用function可以创建一个函数 也可用创建一个构造函数 这个构造函数可用于实例化对象 代码如下
  • 解析Java-throw抛出异常详细过程

    首先 我们知道Java有3种抛出异常的形式 throw 执行的时候一定抛出某种异常对象 throws 出现异常的可能性 不一定会发生 系统自动抛出异常 throw用在一个语句抛出异常的时候 throw an instance of exce
  • MySQL最常用的二种存储引擎MyISAM和InnoDB的介绍

    1 MyISAM 默认表类型 它是基于传统的ISAM类型 ISAM是Indexed Sequential Access Method 有索引的顺序访问方法 的缩写 它是存储记录和文件的标准方法 不是事务安全的 而且不支持外键 如果执行大量的
  • 轻松拿结果-第二部分 同力 -第五章 用制度保障业绩

    第五章 用制度保障业绩 制度的保障 体现的是管理者的监管能力 也是守护胜利果实的有力保障 只有铁的纪律 才能拿到铁的结果 商场如战场 在公司您们就是带兵打仗的将军 有一个销售员踢球时伤到了腿 在他休息的两个月里 业绩却没有落下一点 都是整个
  • html5 悬停边框,Html,css:在悬停时更改行的边框颜色(Html,css: Change a row's border colow on hover)...

    Html css 在悬停时更改行的边框颜色 Html css Change a row s border colow on hover 我正在使用DataTables 我试图在行悬停时将行的顶部和底部边框更改为红色 以下没有改变颜色 tab
  • 消息的顺序消费

    首先 需要保证顺序的消息要发送到同一个messagequeue中 其次 一个messagequeue只能被一个消费者消费 这点是由消息队列的分配机制来保证的 最后 一个消费者内部对一个mq的消费要保证是有序的 我们要做到生产者 messag
  • 强化学习笔记(5)-回合策略梯度算法

    以下为阅读 强化学习 原理与python实现 这本书第七章的学习笔记 在之前学习到的强度学习方法中 都是通过学习最优价值函数来获得最优策略 现在换一个角度来思考 我们可以通过用含参函数来近似最优策略 并在迭代中更新参数值 这就是策略梯度算法
  • C#、C++、Java、Python选择哪个好?

    一个好的程序员不能把自己绑定在一种语言上 不能把自己就定义为JAVA程序员 C 程序员 等等 语言没有高下之分 只有适用的场景 好的程序员 应该有很快学会一种新的语言 并解决实际问题的能力 在我二十年的程序生涯中 有过不止一次 因为项目 一
  • Oracle服务器性能全面调整攻略

    Oracle服务器性能全面调整攻略 Oracle服务器是高度可调的数据库系统 它提供了许多特性 正确地设置和调整可以有效提高系统性能 因此 对系统进行调整是数据库管理员的主要责任 由于应用设计人员很少或根本不会给数据库管理人员提供必要的信息