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,一经查实,立即删除!

相关文章

整体服务器与微服务

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

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

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

HDU 2647 Reward 拓扑排序

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

提高Java的锁性能

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

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

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

非捕获Lambda的实例

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

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

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

WordPress强制跳转https教程

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

Java 8的装饰器模式

在最近的一篇文章中,我描述了装饰器模式如何拯救了我的一天。 我给出了一个小代码段,其中包含创建装饰器的最简单方法,但承诺Java 8会有更好的方法。 这里是: 用Java 8装饰 HyperlinkListener listener this::changeHtmlViewBa…

WPF中使用流文档灵活地显示内容

WPF中使用流文档灵活地显示内容 by: Markus Egger form: http://msdn.microsoft.com/msdnmag/issues/07/08/wpf/default.aspx?loczh Windows Presentation Foundation (WPF) 提供了一系列功能。事实上,功能…

canvas图表(4) - 散点图

原文地址:canvas图表(4) - 散点图 今天开始完成散点图,做完这一节,我的canvas图表系列就算是完成了,毕竟平时最频繁用到的就是这几类图表了:柱状,折线,饼图,散点。经过编写canvas图表…

词频统计工程相关

&#xff08;the format of this article is from SkYjoKEr&#xff09; //开始干之前 模块1、WordClass 一个存放单词以及实现相关操作的类&#xff0c;其中单词以二元组<word, freq>的形式存储。 &#xff08;20min&#xff09; 2、WordCounter 完成单词统计&#xff0…

canvas图形编辑器

原文地址&#xff1a;http://jeffzhong.space/2017/11/02/drawboard/   使用canvas进行开发项目&#xff0c;我们离不开各种线段&#xff0c;曲线&#xff0c;图形&#xff0c;但每次都必须用代码一步一步去实现&#xff0c;显得非常麻烦。有没有一种类似于PS&#xff0c;CAD…

Sacrilege –自定义SWT滚动条

SWT是本机OS小部件之上的薄抽象层。 如果您打算将应用程序与OS外观很好地集成在一起&#xff0c;那将是一件非常好的事情。 但是&#xff0c;作为一种折衷方案&#xff0c;这种方法大大限制了样式功能。 特别是&#xff0c;我感觉到本机SW​​T滚动条通常会干扰更精细的视图布…

CSS3盒模型温故

CSS有一种基础设计模式叫盒模型&#xff0c;定义了Web页面中的元素是如何看做盒子来解析的。每一个盒子有不同的展示界面&#xff0c;下面就来介绍盒模型&#xff0c;主要有一下几种盒模型&#xff1a;inline、inline-block、block、table、absolute position、float。浏览器把…

SSL与WildFly 8和Undertow

我一直在研究WildFly 8的一些安全性主题&#xff0c;偶然发现了一些配置文档&#xff0c;这些文档没有很好地记录。 其中之一是新Web子系统Undertow的TLS / SSL配置。 有许多关于较旧的Web子系统的文档&#xff0c;并且确实仍然可以使用&#xff0c;但是这里是使用新方法进行配…

CSS属性选择器温故-4

1.属性选择器就是通过元素属性来找到元素 2.属性选择器语法 CSS3遵循了惯用的编码规则&#xff0c;通配符的使用提高了样式表的书写效率&#xff0c;也使CSS3的属性选择器更符合编码习惯 3.浏览器兼容性 CSS选择器总结&#xff1a;CSS选择器和jQuery的选择器非常相似&#xff…

Python多篇新闻自动采集

昨天用python写了一个天气预报采集&#xff0c;今天趁着兴头写个新闻采集的。 目标是&#xff0c;将腾讯新闻主页上所有新闻爬取下来&#xff0c;获得每一篇新闻的名称、时间、来源以及正文。 接下来分解目标&#xff0c;一步一步地做。 步骤1&#xff1a;将主页上所有链接爬取…

使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

有时候我们有迁移数据库的需求&#xff0c;例如从Oracle迁移到SQL Server&#xff0c;或者从MySQL迁移到Oracle。 很多江湖好汉一时不知如何手工操作&#xff0c;所幸的是Navicat提供了迁移的自动化操作界面。 当然&#xff0c;Navicat的数据库迁移无法做到完美&#xff0c;一些…

书评:Mockito Essentials

Sujoy Acharya的Mockito Essentials副标题&#xff08; Packt Publishing &#xff0c;2014年10月&#xff09;是&#xff1a;“实用指南&#xff0c;可帮助您使用Mockito进行单元测试并开始运行。” Mockito Essentials中的前言和七章涵盖大约190个实质性页面。 前言 在序言中…