Oracle数据库性能调优

 一、基本原则:

       数据库性能优化的基本原则就是:通过尽可能少的磁盘访问获得所需要的数据。

二、评价指标:

       要评价数据库的性能,需要在数据库调节前后比较其评价指标即响应时间和吞吐量之间的权衡、数据库的可用性、数据库的命中率以及内存的使用效率,以此来衡量调节措施的效果和指导调整的方向。    

三、注意事项:

       对Oracle数据库进行性能调整时,应当按照一定的顺序进行,因为系统在前面步骤中进行的调整可以避免后面的一些不必要调整或者代价很大的调整。

四、怎样入手:     

        一般来说可以从两个阶段入手:  

        设计阶段:对其逻辑结构和物理结构进行优化设计,使之在满足需求条件的情况下,系统性能达到最佳,系统开销达到最小;   

        数据库运行阶段:采取操作系统级、数据库级的一些优化措施来使系统性能最佳;

五、具体措施: 

       1. 在系统设计开发阶段调整数据库  

       为了充分利用Oracle数据库的功能特性,在设计信息系统时,数据库设计人员需要根据业务情况(如访问量或客户端数量)和现有资源状况(如数据库服务器的配置)考虑系统结构和数据库的逻辑结构的设计:  

       1.1 调整应用程序结构设计

       即应用程序采用的是传统的C/S两层体系结构,还是B/W/D三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。  

       1.2 恰当使用分区、索引及存档功能。  

       如果某种业务的数据量增长非常快,可以考虑存放该业务的数据库表是否使用Oracle数据库的分区功能;对于经常访问的数据库表是否需要建立索引;对于经常访问但是当业务流程完成后不再变动的数据可采用放入历史档案的方法来实现应用系统中访问尽可能少的数据量。  

       1.3 恰当编写访问数据的SQL语句。  

       良好的SQL语句可以被数据库重复使用而减少分析时间;恰当的使用索引可使访问的数据块大大减少从而减少响应时间。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率决定了Oracle数据库的性能。

       Oracle公司推荐使用Oracle语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。  

       1.4 调整硬盘I/O : 硬盘之间的IO负载均衡

       这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。在磁盘比较富裕的情况下还应该遵循以下原则:将表和索引分开;创造用户表空间,与系统表空间(system)分开磁盘;

      创建表和索引时指定不同的表空间;  

      创建回滚段专用的表空间,防止空间竞争影响事务的完成;  

      创建临时表空间用于排序操作,尽可能的防止数据库碎片存在于多个表空间中。  

      1.5 确定数据块大小和存储参数。  

由于数据库的块大小在数据库创建以后就不能在修改(除非重建数据库),因此为了减少数据链接和行迁移,又提高磁盘空间的利用率,在设计数据库时要确定合适的数据块大小和存储参数。通常我们是根据样例数据确定数据块大小,而根据业务现状和未来发展趋势确定存储参数。  

      2、在数据库运行阶段调整数据库 

      数据库运行阶段调整数据库包括两个方面:操作系统级的调整;数据库级的调整。  

      2.1 操作系统级的调整  

     实施操作系统级调整的主要目的是减少内存交换,减少分页,使SGA(System Globle Area)可留驻内存。  

            2.1.1 减少内存交换  

     内存交换(swapping)可能会造成很大的内存开销,应将它最小化。运行在Solaris Unix操作系统上的Oracle数据库,可利用vmstat或sar命令来检查交换,查看到系统级内存和硬盘I/O的使用情况,调整unix数据缓冲池的大小、每个进程所能使用的内存大小等参数。vmstat命令可报告Solaris上的进程、虚拟内存、磁盘、分页和CPU的活动情况。下面命令将显示系统每5秒钟做的事情的概要:  

% vmstat 5   sar命令  

监控交换、分页、磁盘和CPU活动。下面命令用于每10秒显示10次分页活动的概要:  

% sar -p 10 10  

     若系统内存交换较多,且需要节省内存,可采用以下措施:  

     1) 避免运行不必要的系统daemon进程或应用程序进程;  

     2) 在不明显影响数据块命中率的前提下减少数据库缓冲区的数量,以释放一些内存;

     3) 减少UNIX文件缓冲区的数量(特别是在使用裸设备时)。  

            2.1.2 控制分页  

       少量的内存分页不会太显著地影响系统的性能,因为应用程序不必全部放在内存中。但是分页过多将会造成系统性能下降。为了检测过多的分页,可在快速响应或空闲期间运行测量,并与响应迟缓时的测量进行比较。

        可通过以下办法来解决:  

        使用vmstat或sar -p监控分页;  

        安装更多的内存;  

        将一些工作移到另一系统中;  

        配置系统核心使用更少的内存;  

       保持SGA在单个共享内存段中。

             2.1.3 使SGA(System Globle Area)留驻内存  

       SGA是对数据库数据进行快速访问的一个系统全局区,若SGA本身需要频繁地进行释放、分配,则不可能达到快速访问数据的目的,因此,要求SGA驻留内存。这时,我们可以重新配置UNIX核心,调整一些操作系统参数以达到增加共享内存的目的。  

      2.2 数据库级的调整  

     每一个Oracle实例都是由一组Oracle后台进程和SGA的一个内存区组成的。这组后台进程会自动的读写数据库的数据文件,因此,数据库性能可以被这些因素所影响:

     SGA各部分的分配是否合理,使用效率是否正常;

     I/O和锁竞争是否较多。  

           2.2.1 SGA的分配及使用效率  

     分配给每个实例的内存,即SGA的使用效率如何,会大大影响数据库系统的性能。SGA由下列部分组成:共享池、数据块缓冲区、重做日志缓冲区、大池组成。  

     共享池(Shared pool): 共享池存放库缓存(存储共享SQL和PL/SQL区)和数据字典缓存(数据库对象信息)以及会话期间信息(对于MTS)。由于这些信息是应用程序需要经常访问的,因此这些信息需要保持高的命中率。可以通过以下语句来确认共享池数据的命中率:  

 库缓存:   select gethitratio from v$librarycache 应大于90% 。

                  select sum(reloads)/sum(pins) from v$librarycache 应小于1%  

数据字典缓存:select sum(getmisses)/sum(gets) from v$rowcache 应小于15%  

      由于程序设计人员的水平参差不齐,可能存在大的匿名块,这会导致SQL不能重用,因此需要找出大的匿名块以转换为存储过程达到重用:  

select * from v$sqlarea where command_type=47 and length(sql_text)>500  

     而对于一些应用系统非常频繁使用的SQL对象如存储过程、函数、包等,可以通过钉在内存中的方式来防止由于共享池太小被移出:  

exec dbms_shared_pool.keep(对象名)  

        数据块缓冲区(Db block buffer):  

        数据块缓冲区存放用户所经常访问的数据文件的数据块内容以及用户修改的数据内容。数据库把数据文件里的内容读到内存中,下次需要时直接从内存中读取,从而减少了磁盘的I/O和响应时间。当然,一般只在比较小的数据表(如常用代码表)才缓存到内存中。  

        由于数据块缓冲区中不可能存放所有的数据,因此可使用LRU算法来确定移出哪些数据块,但又尽量保证有较高的数据命中率。  

       查看数据块命中率的SQL语句为:  

select 1-(phy.value/(cur.value+con.value)) 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 gets"  

       如果这个命中率小于0.85,就要考虑为数据块缓冲区分配更多的内存了。  

重做日志缓冲区(Log buffer):  

重做日志缓冲区存放从用户内存区复制来的每个DML或DDL语句的重做条目。如果这个缓冲区分配太小会导致没有足够的空间来放重做条目而等待。  

          2.2.2 I/O和资源竞争  

       由于有众多的进程要写数据文件,因此需要通过I/O调整来解决I/O瓶颈问题。如果在设计阶段有效地考虑了表空间的合理分配,就能有效地在一定程度上减少I/O竞争。在数据库运行时,由于数据的动态增长,原来分配给表或索引的空间已经用完,Oracle会自动分配空间给这些数据库对象。而这个动态分配会对系统性能有所影响,所以要求:  

      避免动态空间管理  

      表空间的本地化管理,以减少与数据字典表空间的磁盘竞争。  

      在系统设计和试运行阶段数据量相对较小,效率低下的SQL可能并不会影响系统响应时间,但当系统数据量增长到一定程度时,需要在系统运行时监控并找出是哪些SQL不能有效使用索引或缺少索引,并进行相应调整:建立索引;修改SQL写法。  

      另外,在Oracle中,需要采用一些机制来保证数据库对象在使用期间的稳定性和数据的一致性,如使用锁存器(latch)、锁(lock)等。因此争用和这些机制相关的资源会影响数据库的性能。为了减少这种资源竞争,可以通过调整数据库的相关初始化参数(如db_block_lru_latches、dml_locks)来减少资源的争用,优化数据库性能。  

       

六、一些常用的性能优化手段和工具  

     Oracle数据库系统提供了一些工具和脚本来获取数据库的性能指标和优化的方法。如使用utlbstat.sql和utlestat.sql脚本获取一段时间内数据库的内存、磁盘I/O等的情况;使用动态性能视图和数据字典视图来获取命中率和系统等待事件等信息。当然,也可以使用Oracle Enterprise Manager图形化工具来监控。  

 

七、结束语  

      Oracle数据库的性能调整相当重要,但难度也较大。数据库管理员需要综合运用上面介绍的规律,在数据库建立时,就能根据应用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有很大的益处。只有认真分析Oracle运行过程当中出现的各种性能问题,才能保证Oracle数据库高效可靠地运行。还需要指出的是:数据库的性能调整是一个系统工程,涉及的方面很多,不能仅仅根据一个时间点的情况就断定数据库运行性能的好与坏。如何有效地进行调整,数据库管理员需要经过反反复复的过程。这些都需要在大量的实践工作中不断地积累经验,从而更好地进行数据库的调优。

Oracle 数据库性能调优:从瓶颈诊断到精准优化之道 在当今数据驱动的时代,数据库性能直接关系到企业的运营效率和用户体验。Oracle 作为全球领先的关系型数据库管理系统,承载着众多企业的核心业务。然而,随着数据量的增长和业务复杂度的提升,数据库性能问题日益凸显。性能调优并非简单的参数调整或硬件升级,而是一项需要系统方法论、深入理解和丰富经验的综合工程。 本文将深入探讨 Oracle 数据库性能调优的完整体系,从核心方法论到具体实践,为您呈现一幅清晰的性能优化路线图。 阅读详情

相关推荐

25、Oracle Database 10g 性能与应用调优指南

本文详细介绍了 Oracle Database 10g 的性能与应用调优功能,包括自动统计信息收集、增强查询优化、数据字典统计信息的收集、DBMS_STATS 包的改进、DML 表监控、规则基优化器的停用、SQL 调优顾问、SQL 访问顾问以及企业管理器的关键性能页面。通过这些功能的合理使用,可以显著提升数据库的整体性能和稳定性。文章还总结了最佳实践,帮助用户更好地应用 Oracle 10g 的调优工具。

grass的博客 154

Oracle中的优化方法

Oracle中的优化方法

m0_71406734的博客 1万+

Oracle数据库的性能调优经验分享

在当今的信息时代,数据库是各种应用系统的核心组成部分,存储着大量的重要数据。Oracle数据库作为一款广泛应用的企业级数据库管理系统,其性能的好坏直接影响着整个系统的运行效率和用户体验。本分享的目的就是帮助大家了解如何对Oracle数据库进行性能调优,提升其运行速度和稳定性。范围涵盖了从基础的概念理解到实际的调优操作,包括SQL语句优化、索引优化、参数调整等方面。本文首先会介绍与Oracle数据库性能调优相关的核心概念,让大家对调优涉及的元素有清晰的认识。然后讲解核心算法原理和数学模型,为调优提供理论支持。

AI天才研究院 991

全面整理的Oracel 数据库性能调优方案

性能优化

qq_22201881的博客 2937

Oracle数据库的性能调优最佳实践总结

Oracle数据库作为企业级应用中广泛使用的数据库管理系统,其性能直接影响到业务系统的运行效率和用户体验。性能调优的目的在于提高数据库的响应速度、降低资源消耗、提升并发处理能力,确保数据库能够高效稳定地运行。本文的范围涵盖了Oracle数据库性能调优的各个方面,包括SQL语句优化、索引优化、参数调整、存储优化等,旨在为数据库管理员和开发人员提供全面的调优指导。本文将按照以下结构进行组织:首先介绍核心概念和它们之间的联系,让读者对性能调优涉及的关键概念有清晰的认识;

2502_91592937的博客 794

Oracle数据库的性能监控与调优工具

随着企业数据量的不断增长,Oracle数据库作为一种广泛使用的关系型数据库管理系统,其性能的好坏直接影响到业务的正常运行。本文章的目的在于详细介绍Oracle数据库中常用的性能监控与调优工具,帮助数据库管理员(DBA)、开发人员等更好地了解和运用这些工具,以提升Oracle数据库的性能。范围涵盖了Oracle数据库中多种内置的监控和调优工具,包括自动工作负载信息库(AWR)、SQL调优顾问(SQL Tuning Advisor)等,同时会结合实际案例进行分析。

2502_91592937的博客 1016

Oracle数据库调优

Oracle数据库调优是为了提升数据库性能、稳定性和响应速度所进行的一系列优化措施。

qq_42631788的博客 1471

Oracle Database 11g性能调优培训资料全解

性能监控是确保数据库高效运行的关键环节。在Oracle Database 11g中,我们可以使用多种工具来监控性能,其中包括自动工作负载存储库(AWR)和动态性能视图。

weixin_35751412的博客 619

优化Oracle数据库性能:合理设置数据库参数

Oracle 数据库是一种功能强大的关系型数据库管理系统,但在处理大量数据和复杂查询时,性能问题可能会成为一个挑战。为了提高数据库的响应速度和效率,我们可以采取一系列的优化措施。 合理设置数据库参数是提高 Oracle 数据库性能的重要策略之一。通过调整内存管理参数、并发处理参数和日志恢复参数,可以最大程度地利用数据库资源,提高查询性能、并发性能和可靠性。在设置数据库参数时,需要考虑数据库的大小、负载情况和业务需求。因此,建议在优化数据库性能之前,进行充分的测试和评估,以确定最佳的参数设置策略。

小蓝枣的博客 5683

Oracle 11g数据库性能调优实战指南

在当今数据驱动的商业环境中,数据库性能优化是确保企业应用运行顺畅的关键。Oracle 11g作为一款成熟的数据库管理系统,提供了众多优化工具和策略。在深入探讨SQL语句优化、索引管理以及内存配置等专题前,本章旨在为读者提供一个关于Oracle 11g性能优化的概览。首先,性能优化不仅仅是技术问题,它还涉及成本与效率的平衡。优化的目的是以最低的成本获得最高的系统效率。这要求IT专业人员充分理解其数据库的工作方式,以及如何识别和解决潜在的性能瓶颈。

weixin_35987118的博客 1155

Oracle数据库共享池空间管理调优 (2015年)

Oracle数据库是当前使用最为广泛的大型数据库之一。共享池存储数据库所运行的可执行程序代码和相关数据字典提供,是Oracle数据库体系中最复杂的内存组件之一。由于缺乏对共享池内部运行机制的了解,当数据库在运行过程中显示共享池中空闲空间较多,报ORA-4031错误提示共享池空间不足时,往往束手无策。通过导出Oracle数据库共享池的内存数据的方法,总结并分析共享池空间管理的内部管理机制,找到空闲空间较多而报ORA-4031错误的原因,给出了错误检测方法和相对应的解决方法。

如何进行oracle调优

可以使用 Explain Plan 或 SQL Trace 等工具分析查询的执行计划,找出慢查询的瓶颈所在,例如索引缺失、高开销操作等。分析执行计划:使用 Explain Plan 或 SQL Trace 等工具分析查询的执行计划,找出慢查询的瓶颈所在,例如索引缺失、高开销操作等。添加合适的索引:索引可以加快查询的速度,但也会增加写操作的开销,因此需要根据实际情况选择最合适的索引类型和列。优化 SQL 查询:根据分析结果对 SQL 查询进行优化,例如添加合适的索引、重写查询语句等。

RzhenDwo的博客 1424

麦克风声源定位原理_声源定位—如何定位到噪声根源?

前言TPA(传递路径分析)专题系列已经开篇。其遵循方法论:源(Source)——路径(Path)——响应(Receiver)有人说TPA好,它可以识别出路径处甚至源的载荷特征,可以量化各个路径的贡献量。有人说声源定位好,不管东西南北中,“源”自其中。但是,声源定位识别出来色彩丰富的一个结果,这结果被您拿来应付工作了,还是真正帮您解决了问题?声源定位定位到了噪声的根源了么?对于一些声源现,...

weixin_39943678的博客 3974

Oracle数据库性能调优指南

Oracle数据库调优

810cheng 2336

数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点

数字IC后端培训教程之Hierarchical Flow子系统block partition和pin assignment详细教程

weixin_37584728的博客 1607

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 340

基于Oracle DB的linux服务器性能调优

安装完Oracle后,对linux服务的系统调优是最重要的工作之一,本文将基于Oracle+linux平台,对一些最关键的影响服务器及DB性能的项目进行探讨式调优。

qq_45732829的博客 1953

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

[Oracle 11g OCM] Oracle 性能调优中 DB TIME的作用

今天小编和大家分享一下 11G

shtopdata的专栏 1563

SmartFusion从FPGA到ARM系列教程

前言 本系列教程,将会以Microsemi SmartFusion一代芯片A2F200M3F为例,简单介绍片上ARM Cortex-M3 硬核 MCU 基本外设的使用,及其与FPGA逻辑模块进行交互的示例。 在学习片上硬核ARM Cortex-M3 MCU的开发之前,要先熟悉Microsemi Libero SoC开发环境的使用,可以参考:Microsemi Libero SoC系列教程 关于Microsemi SmartFusion混合型FPGA的介绍,可以参考:Microsemi SmartFusio.

whik1194的博客 8293

深度解构事务码 SQF:Support Query Framework 与 ABAP 静态分析实战

某制造企业在年度审计前,需要确认自定义发票过账程序 ZFI_INV* 系列是否存在硬编码公司代码与未捕获异常。技术团队在字段填入ZFI_INV*后,勾选与规则,执行扫描。SQF 生成的 ALV 报告列出 42 个警告,其中 17 条与抛出 CX_SY_NO_HANDLER 相关,8 条涉及动态 SQL 注入风险。结果导出至 Excel 供开发整改,并在 ATC 阶段验证修复。此过程较手工逐个执行 Code Inspector 节省超 80 % 时间。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

Oracle Database 23c 性能调优实战:3个核心参数优化,查询速度提升 50%

本文深入探讨Oracle Database 23c性能调优实战,重点介绍SGA_TARGET、OPTIMIZER_MODE和DB_CACHE_SIZE三个核心参数的优化策略。通过实际测试数据展示如何实现查询速度提升50%的显著效果,帮助DBA充分发挥Oracle 23c的性能潜力,提升企业级数据库的响应速度和服务质量。

weixin_29268267的博客 361

Python 爬虫实战:微信搜一搜内容深度爬取(含搜索结果解析与企业级架构设计)

在信息爆炸的时代,微信搜一搜已成为海量信息获取的重要入口。无论是个人知识探索,还是企业舆情监控,掌握微信搜一搜内容的深度爬取能力具有巨大价值。本文将从基础原理到企业级实现,全面解析微信搜一搜爬虫的开发过程。

yansideyucsdn的博客 2455

oracle管理与调优,3Oracle数据库调优管理与性能调优

关于举办《Oracle数据库管理与性能调优实践》培训班的通知时间:2016年3月23日-3月28日(22日全天报到)地点:杭州各有关单位:为响应工业和信息化部信息化高端人才培养的号召,中国信息化培训中心特推出了Oracle数据库管理和调优实践课程培训班,希望通过专业的Oracle数据库管理和调优技术与专家经验来全面提高Oracle数据库管理人员的技术水平,旨在培养专业Oracle数据库管理和调优专...

weixin_42502146的博客 138

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4580

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Mybatis与Ibatis对照入门于学习
下一篇: Java Synchorinzed注意事项
iteye_4921
博客等级 码龄8年 25粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值