Oracle ——概述 Oracle 5 步调优方法论

http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/OPS3/Default.aspx

 

对 Oracle 调优应该采取积极的态度。如果等到用户开始抱怨性能,才调优通常以为时已晚,即便是最有效的调优策略。性能问题确定和处理的时间越晚,那么解决问题的时间和资源成本就越多。当出现不可预见的性能问题时,DBA 的责任是尽早查明原因,并尽快纠正问题,越快越好。

在你开始任何调优前,需要建立一套与调优直接有关的量化目标。调优时,时刻记住你的目标。你的优化目标应该是具体的,可量化的,而不是泛泛的。

调优 Oracle 前,确保操作系统正执行在高峰期。用操作系统管理员身份,利用操作系统监控工具,检查非 Oracle 应用程序对分页和交换资源的竞争。操作系统可能需要把信息从一个存储区域移动到另一个,以容纳不适合在实际内存中的更大信息。这个过程称为分页(paging)和交换(swapping)。过度的分页和交换会降低性能。

最好的调优方法是一个结构化的方法。确保操作系统处于高峰期,并有足够的操作系统资源分配给Oracle 系统,接下来你可以按如下顺序调优:

  • 应用程序负载
  • 调优竞争
  • 最小化物理 IO
  • 优化物理 IO
  • 最佳实践

 

优化应用程序负载


开发者在用有效的 SQL 语句编写应用程序中扮演重要角色。他们应该利用指示、索引,以及必要时为获得较好性能而绑定变量。不要低估应用程序调优的重要性。千万不要低估应用程序调优的重要性。将近 80% 的性能获得都是通过应用程序调优。

应用程序开发者应对 Oracle SQL 处理有一个深刻的理解。包括:

  • DML(数据操纵语言)
  • DDL(数据定义语言)
  • 事务控制
  • 共享 SQL 和 PL/SQL 区
  • 优化器模式
  • 并行查询

对开发者来说,重要的是尽可能使用 PL/SQL,因为 PL/SQL包以已解析的格式存储。如果需要,包可以被存储在共享池以提高性能。

数据库设计和应用程序设计可能不是 DBA 的工作。但是,你应该知道适当的最初设计的重要性,如果必要的话,能够指导设计者和开发者来实现这个目标。强烈推荐,所有涉及开发和维护 Oracle 的人员要有适当培训,让他们了解应用系统使用的 Oracle 版本。要注意的是,你可以有一个现成的很好的调优实例。该实例可能是因为不好的数据库设计,或应用程序内编写的 SQL 性能很差,所造成的整体运行很差。

 

调优竞争


当两个进程都需要某个资源时,一个进程需要另一个使用完后才能使用,就会发生竞争。这会导致进程等待 Oracle 系统的资源,影响性能。

闩锁竞争发生在 SGA 中的库高速缓存、缓冲区高速缓存和日志缓冲区。回滚段的竞争也会导致系统性能变差。回滚段用于存储事务和回滚、读取一致性以及恢复的撤销信息。当事务经历等待回滚段时,就会发生竞争。必须确保你有足够的回滚段数量和正确的段大小。

 

最小化物理 IO


一旦你有了一个设计良好的模型和已正确调优的应用程序,DBA 主要的调优责任才真正开始。内存结构的正确大小可以让足够的信息存储在内存。由于内存访问比磁盘访问更快,与从磁盘相比,它总是能更好地满足在内存中的信息请求。调优内存分配包括把内存正确地分布给每个 Oracle 内存区域,同时,确保在操作系统级别不会发生分页和交换。

系统全局区(system global area,SGA)是保存关于最常用的请求数据库信息的内存区域。当数据库启动时,分配 SGA,并在后台启动。SGA 和后台进程一起被称为实例。SGA 分为三个存储组件:

  • 缓冲区高速缓存(Buffer cache)
  • 共享池(Shared pool)
  • 重做日志缓冲区(Redo log buffers)

缓冲区高速缓存是 SGA 的区域,其存储从数据库段读取的数据块的副本。这些数据块包括表、聚簇、回滚段和索引。每个缓冲区拥有一个单独的 Oracle 数据块。缓冲区高速缓存的大小,以字节为单位,由数据库初始化文件参数 DB_BLOCK_BUFFERS 乘以 DB_BLOCK_SIZE 来确定。一旦数据库被创建,缓冲区高速缓存的大小只能通过 DB_BLOCK_BUFFERS 来改变;而 DB_BLOCK_SIZE 参数自创建数据库后就不能被改变。当设置正确的数据库缓冲区高速缓存的大小,通过从内存请求数据块,而不是从磁盘,性能就可以被优化。

共享池也是SGA 的一个区域,它包含两个主要的存储区:库高速缓存和字典高速缓存。库高速缓存由共享和私有的 SQL 区域、PL/SQL 包和存储过程,以及控制结构。当库高速缓存没有足够的内存时,不会再有可用的空间来缓存新的语句,直到旧的语句被删除,腾出空间。任何被删除,不再需要的语句都将被重新解析。库高速缓存报告中对于重新装载和无效列值的大数值显示了过多的重新解析。重新解析的存储过程会要求 CPU 和 IO 资源。为了避免在库高速缓存中卸载并重新加载大对象,应确保 SHARED_POOL_SIZE 值足够大,并且保证,当函数、存储过程和包加载到数据库时,尽可能无需再解析。

字典高速缓存存储数据库的信息,它们结构和使用者。字典高速缓存中的信息包括段名、用户、权限和扩展位置。在大多数操作放到 Oracle 数据库之前,必须读取数据字典表,并被存储在数据字典缓存区。无论是缓冲区高速缓存,还是库高速缓存,字典高速缓存的效率由命中率来决定。字典高速缓存的大小间接与数据库初始化文件参数 SHARED_POOL_SIZE 有关。

如果你正运行在一个多线程服务器(multithreaded server,MTS)环境中,用户会话信息,如私有 SQL 和排序区域,被存储在共享池中,而不是用户进程的内存。如果你使用一个 MTS,你可能需要让你的共享池大点,以容纳额外的由把排序信息移动到用户全局区(user global area,UGA)引起的内存需求。共享池的大小由数据库初始化文件参数 SHARED_POOL_SIZE 来确定。库高速缓存和字典高速缓存的大小受共享池的大小限制。

重做日志缓冲区是 SGA 的一个区域,用来记录对数据库所做的所有更改。信息被定期从重做日志缓存写道联机重做日志文件,这样,如果需要恢复,就可以应用。重做日志缓存区的大小,以字节计算,是由数据库初始化文件参数 LOG_BUFFER 指定。

 

优化物理 IO


若在你的系统上获得最大的性能,通过把 Oracle 数据库文件分散到多个设备,均匀地把 IO 分布开。当多个进程试图同时访问同一个磁盘时,就会发生磁盘竞争。当达到访问磁盘的最大数量时,其他进程就得等待。

SYSTEM 表空间上过多的 I/O 可能表明共享池太小,从而导致对数据字典过多的物理读写,而数据字典位于 SYSTEM 表空间。

SYSTEM 表空间上另一个严重的 I/O 可能原因是,没有指定用户默认的表空间。确保数据段不要写到 SYSTEM 表空间。如果创建一个用户,没有默认分配默认表空间,那么用户默认的表空间是 SYSTEM。总是分配一个非 SYSTEM 默认表空间给用户。

如果排序段写到了 SYSTEM 表空间,那么会导致过多的 I/O。如果创建一个用户,而没有分配临时表空间,那么用户将在 SYSTEM 表空间执行所有的排序。总是分配一个非 SYSTEM 表空间的临时表空间给用户。

 

最佳实践


最佳实践是一个被普遍接受的指南。它们经过了时间的考验。最佳实践并没有具体的设置。

下面是一些最佳实践,它们的好处包括:

  • 整个企业的一致环境。提供不同技术组的技术共识,并消除完成方法的竞争。
  • 使用已证明的,经过时间验证的重现性好,成功的结果,尝试过的最佳实践。
  • 容易诊断问题。如果一个给定的系统并不是以标准方式安装,这通常将会很快显现出来。
  • 降低管理系统的整体成本。

o_r_%E7%BF%BB%E8%AF%91.jpg

转载于:https://www.cnblogs.com/liuning8023/archive/2012/09/08/2676991.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js,jq.事件代理(事件委托)复习。

<ul id "lists"><li>列表1</li><li>列表2</li><li>列表3</li><li>列表4</li><li>列表5</li><li>列表6</li></ul>js委托&#xff1a; var lists document.getElementById(&qu…

整体服务器与微服务

介绍 刚开始时&#xff0c;由于要求简单&#xff0c;所以应用程序既简单又小。 随着时间要求和需求的增长&#xff0c;我们的应用程序变得越来越大&#xff0c;越来越复杂。 这导致将单片服务器开发和部署为一个单元。 在某种程度上&#xff0c;微服务可以通过简单的应用程序回…

NEXUS S安卓4.0/4.1 【完美】 ROOT教程

原文链接&#xff1a;http://bbs.gfan.com/android-3517082-1-1.html 进行bootloader解锁&#xff08;即使解锁&#xff0c;再上锁&#xff09;&#xff0c;会清除你手机上的【所有】数据&#xff08;包括内部的16G SD 存储&#xff09;&#xff0c;包括但不限于应用、设置、联…

CSS中的各种FC

什么是FC&#xff1f; Formatting Context&#xff0c;格式化上下文&#xff0c;指页面中一个渲染区域&#xff0c;拥有一套渲染规则&#xff0c;它决定了其子元素如何定位&#xff0c;以及与其他元素的相互关系和作用。 BFC 什么是BFC Block Formatting Context&#xff0…

HDU 2647 Reward 拓扑排序

http://acm.hdu.edu.cn/showproblem.php?pid2647 题意&#xff1a; 输入N和M代表N个人和M组数据&#xff0c;M组数据中的A和B代表A的工资要比B的工资高&#xff0c;底薪是&#xff08;888元&#xff09;&#xff0c;问你这个老板至少要付 多少钱给这些员工&#xff0c;A比B工资…

EE Servlet 3:简单表单处理

对于大多数Web开发人员而言&#xff0c;Web应用程序中的表单处理就像小菜一碟。 如果我们无法捕获用户的输入并进行处理&#xff0c;将不会有太大用处。 因此&#xff0c;我在servlet3示例中包含了一个简单的FormServlet &#xff0c;该示例演示了您可能会遇到的很少使用的表单…

编写高质量的代码--基础:结构和样式,行为的分离

实现高质量的代码需要我们在结构和样式&#xff0c;行为的分离的基础上做到&#xff1a;精简&#xff0c;重用&#xff0c;有序。精简&#xff1a;尽量减小文件的大小&#xff0c;提高页面加载速度。重用&#xff1a;提高代码的重用性&#xff0c;减少冗余代码&#xff0c;提高…

提高Java的锁性能

Plumbr是唯一通过解释应用程序性能数据来自动检测Java性能问题的根本原因的解决方案。 几个月前&#xff0c;我们在Plumbr中引入了锁定线程检测之后&#xff0c;我们开始收到类似于“嘿&#xff0c;太好了&#xff0c;现在我知道是什么导致了性能问题&#xff0c;但是现在应该…

APK反编译工具

apktool dex2jar jd-gui 1、将要反编译的APK文件后缀改为.zip&#xff0c;解压 2、取出classes.dex文件&#xff0c;拷贝至dex2jar目录。 3、在dex2jar目录运行下列命令行&#xff1a;dex2jar.bat classes.dex&#xff0c;回车。 4、会发现该目录生成了classes.dex.dex2jar.j…

Dom属性方法

一、javascript的三大核心 1.ECMAScript js的语法标准 2.DOM Document object Model 文档对象模型&#xff0c;提供的方法可以让js操作html标签 3.BOM Browser Object Model 浏览器对象模型&#xff0c;提供的方法让js可以操作浏览器 注意&#xff1a;1. js里最大的boss是wind…

学习Netflix管理员–第2部分

为了继续上一篇有关Netflix Governator的一些基础知识的文章&#xff0c;在这里&#xff0c;我将介绍Netflix Governator带给Google Guice的另一项增强功能–生命周期管理 生命周期管理本质上提供了进入对象所经历的不同生命周期阶段的钩子&#xff0c;以引用有关Governor的Wi…

[置顶] UDP协议---心德(1)

UDP协议1.面向无连接 2.速度快 3.不可靠的协议&#xff0c;容易丢包 4.包小于64k DatagramSocket:此类表示用来发送和接收数据报包的套接字 DatagramPacket:数据包 发送端&#xff1a; 1.创建一个udpsocket服务 DatagrameSocket dsnew DatagramSocket(); 2.将数据封装到数据包…

@vue/cli 3 运行支持报错 socket

问题 /sockjs-node/info 无限报错解决方案 原因是相关代理端不支持 ws&#xff0c;因此需要在代理处关闭 ws&#xff0c;即 ws: false&#xff0c;如下&#xff1a;vue.config.js const ds_proxy {/: {ws: false,target: https://dev.test.gitinn.com/,changeOrigin: true,…

Eclipse快捷键以及设置

转自&#xff1a;http://www.blogjava.net/liudawei/articles/362468.html Eclipse实用快捷键大全 收藏 Alt左箭头,右箭头 以在编辑窗口切换标签Alt上下箭头, 以自动选择鼠标所在行,并将其上下移动Ctrlf6 可以弹出菜单…

学习Netflix管理员–第1部分

最近几天&#xff0c;我一直在与Netflix Governator合作&#xff0c;并尝试使用Governator尝试一个小样本&#xff0c;以将其与Spring Framework的依赖项注入功能集进行比较。 以下内容并不全面&#xff0c;我将在下一系列文章中对此进行扩展。 因此&#xff0c;对于没有经验的…

元素类型

元素是文档结构的基础&#xff0c;在CSS中&#xff0c;每个元素生成了一个包含了元素内容的框&#xff08;box&#xff0c;也译为“盒子”&#xff09;。但是不同的元素显示的方式会有所不同&#xff0c;例 如<div>和<span>就不同&#xff0c;而<strong>和&l…

React 等框架使用 index 做 key 的问题

React 等框架使用 index 做 key 的问题 假如有两个树&#xff0c;一个是之前&#xff0c;一个是更变之后&#xff0c;我们抽象成两种可能性。 插入内容在最后插入内容在最前 关于插在中间&#xff0c;原理一样&#xff0c;就不阐述。 使用 ul 代表树&#xff0c;并且使用了…

非捕获Lambda的实例

大约一个月前&#xff0c;我在Java 8的lambda表达式框架下总结了Brian Goetz的观点 。 目前&#xff0c;我正在研究有关默认方法的文章&#xff0c;令我惊讶的是&#xff0c;我又回到了Java处理lambda表达式的方式。 这两个功能的交集可能会产生微妙但令人惊讶的效果&#xff0…

SQL Server 查询性能优化——创建索引原则(一)

索引是什么&#xff1f;索引是提高查询性能的一个重要工具&#xff0c;索引就是把查询语句所需要的少量数据添加到索引分页中&#xff0c;这样访问数据时只要访问少数索引的分页就可以。但是索引对于提高查询性能也不是万能的&#xff0c;也不是建立越多的索引就越好。索引建少…

WordPress强制跳转https教程

在互联网火热的今天&#xff0c;安全问题显得越来越重要&#xff0c;为了用户信息安全&#xff0c;很多热门网站都启用了https 有小伙伴就问&#xff1a;我启用了https&#xff0c;为什么访问的时候显示的还是http呢&#xff1f; 其实&#xff0c;有时候并不是因为我们ssl证书…