常用Oracle数据库调优工具介绍[转]

Oracle数据库 数据库调优 文章目录一、数据库调优的目标二、确定调优目标的方式1. 用户的反馈2. 日志分析3. 服务器资源使用资源4. 数据库内部状况监控三、数据库的调优维度1. 选择合适的DBMS2. 优化表设计3. 优化逻辑查询4. 优化物理查询5. 使用 Redis 或 Memcached6. 库级优化四、SQL语句优化 一、数据库调优的目标 简单来说,数据库调优的目的就是要让数据库运行得更快,也就是说响应的时间更快,吞吐量更大。 不过随着用户量的不断增加,以及应用程序复杂度的提升,我们很难用“更快”去定义数据库调优的目标,因 阅读详情

1.  数据库级调优

1.1.修改数据库参数

以sys用户登录,运行如下的命令:

alter system set optimizer_index_cost_adj=10 scope=spfile
alter system set optimizer_dynamic_sampling=5 scope=spfile

 

optimizer_index_cost_adj取值0-1000,缺省100 ;值越小oracle就越趋向使用索引

optimizer_dynamic_sampling   配置oracle对没有统计信息的表会动态采样,会得到更准确的统计信息,同时让优化器得到更准确的执行计划。这个参数对临时表尤其有用。

1.2.分析表

应该把所有没有做过分析的表都做一下分析:

执行如下语句的返回结果。

select

'analyze table '||owner||'.'||table_name||' compute statistics; '

from dba_tables

where num_rows is null

and owner not in ('SYS','SYSTEM')

and table_name not like '%$%'

and temporary = 'N'

 

如果针对SCHEMA里的所有表做分析,以JZ21为例

begin

dbms_stats.gather_schema_stats ('JZ21');

end;

/

1.3.增加数据维护的job

1.3.1.   将表的监视打开

 select ‘alter table ‘||owner||’.’||table_name||’ monitoring; ’ 

from dba_tables

where owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

and table_name not like '%$%'

and TEMPORARY=’N’;

 

 这个监视是在内存中做的,一般情况下对性能不会有什么影响,如果发现实在有影响的时候,

 

下面语句关闭监视,

select ‘alter table ‘||owner||’.’||table_name||’ nomonitoring; ’ 

from dba_tables

where owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

and table_name not like '%$%'

and TEMPORARY=’N’;

 

1.3.2.   添加JOB

用sys用户登录

执行如下语句,mynextdate,mynextSatdate需要手工更改为下一日和下一个周六。

 

 define mynextdate='2004-03-03'; --to_char(sysdate + 1,'yyyy-mm-dd');

 define mynextSatdate='2004-03-06'; --to_char(NEXT_DAY(sysdate,7),'yyyy-mm-dd');

 

 --每天早上3点左右执行flush monitor info

 call sys.dbms_job.remove(101);

 call sys.dbms_job.isubmit( 101,

                      'sys.DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();',

                      to_date('&mynextdate03:00:00','YYYY-MM-DD HH24:MI:SS'),

                      'to_date(''&mynextdate03:00:00'',''YYYY-MM-DD HH24:MI:SS'') + 1');

 commit;                      

 --统计数据库信息

 call sys.dbms_job.remove(102);

 call sys.dbms_job.isubmit( 102,

                      'sys.dbms_stats.gather_database_stats (options => ''GATHER STALE'');',

                      to_date('&mynextdate03:10:00','YYYY-MM-DD HH24:MI:SS'),

                      'to_date(''&mynextdate03:10:00'',''YYYY-MM-DD HH24:MI:SS'') + 1');

 commit;                      

 

 --每周六下午6:30把执行对那些被更新特别频繁的表的索引做rebuild

 

 call sys.dbms_job.remove(201);

 call sys.dbms_job.isubmit( 201,

                      'execute immediate ''alter INDEX history.PK_INCREMENT_STOCK_BALANCE_HIS rebuild nologging'';'||

                      'execute immediate ''alter INDEX history.ind_inc_stock_balance_1 rebuild nologging'';'||

                      'execute immediate ''alter INDEX history.ind_inc_stock_balance_2 rebuild nologging'';'||

                      'execute immediate ''alter INDEX history.PK_TB_INCREMENT_BALANCE_HIS rebuild nologging'';'||

                      'execute immediate ''alter INDEX history.Ind_inc_balance rebuild nologging'';',

                      to_date('&mynextdate18:30:00','YYYY-MM-DD HH24:MI:SS'),

                      'to_date(''&mynextdate18:30:00'',''YYYY-MM-DD HH24:MI:SS'') + 7');

 commit;  

 

1.4.删除重复的索引

查找重复的索引

select *

   from

( select   index_owner,

index_name,

table_owner,

table_name,

            max(decode(p, 1,    c,NULL)) ||

            max(decode(p, 2,', '||c,NULL)) ||

            max(decode(p, 3,', '||c,NULL)) ||

            max(decode(p, 4,', '||c,NULL)) ||

            max(decode(p, 5,', '||c,NULL)) ||

            max(decode(p, 6,', '||c,NULL)) ||

           max(decode(p, 7,', '||c,NULL)) ||

           max(decode(p, 8,', '||c,NULL)) ||

           max(decode(p, 9,', '||c,NULL)) ||

           max(decode(p,10,', '||c,NULL)) ||

           max(decode(p,11,', '||c,NULL)) ||

           max(decode(p,12,', '||c,NULL)) ||

           max(decode(p,13,', '||c,NULL)) ||

           max(decode(p,14,', '||c,NULL)) ||

           max(decode(p,15,', '||c,NULL)) ||

           max(decode(p,16,', '||c,NULL)) index_cols

      from (select index_owner,index_name,table_owner,table_name, substr(column_name,1,30) c, column_position p

                 from dba_ind_columns )

     group by index_owner,index_name,table_owner,table_name ) A,

  ( select index_owner,

index_name,

table_owner,

table_name,

            max(decode(p, 1,    c,NULL)) ||

           max(decode(p, 2,', '||c,NULL)) ||

           max(decode(p, 3,', '||c,NULL)) ||

           max(decode(p, 4,', '||c,NULL)) ||

           max(decode(p, 5,', '||c,NULL)) ||

           max(decode(p, 6,', '||c,NULL)) ||

           max(decode(p, 7,', '||c,NULL)) ||

           max(decode(p, 8,', '||c,NULL)) ||

           max(decode(p, 9,', '||c,NULL)) ||

           max(decode(p,10,', '||c,NULL)) ||

           max(decode(p,11,', '||c,NULL)) ||

           max(decode(p,12,', '||c,NULL)) ||

           max(decode(p,13,', '||c,NULL)) ||

           max(decode(p,14,', '||c,NULL)) ||

           max(decode(p,15,', '||c,NULL)) ||

           max(decode(p,16,', '||c,NULL)) index_cols

      from (select index_owner,index_name,table_owner,table_name, substr(column_name,1,30) c, column_position p

                 from dba_ind_columns )

     group by index_owner,index_name,table_owner,table_name ) B

  where a.table_owner=b.table_owner

and a.table_name=b.table_name

and (a.index_owner<>b.index_owner

or a.index_name <> b.index_name )

and a.index_cols like b.index_cols || '%'

and a.owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

and a.table_name not like '%$%'

 

出来的结果中,排在后面的索引是可以删除的。

 

 

1.5.做为一项常规任务,每个月做一次停下应用的维护

检查哪些表碎片比较多,对这些碎片很多的表做move,同时将失效的索引全部重建。

这一项任务是在已经对表都做了分析的情况下来做。

 

做scrīpt0,对表全部做分析

begin

dbms_stats.gather_schema_stats (‘JZ21’);

end;

/

 

针对所有的schema都做一次。

 

--查看哪些表的空间碎片比较大,目前是认为大于30%就做整理。

select * from (

Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

(num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

from dba_tables where owner in (‘JZ21’) 

and TEMPORARY=’N’

) tt

where tt.bb<0.7 and blocks>10;

 

--生成整理脚本scrīpt1

select ‘alter table ‘||owner||’.’||table_name||’ move; ’ from (

Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

(num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

from dba_tables where owner in (‘JZ21’) 

and TEMPORARY=’N’

) tt

where tt.bb<0.7 and blocks>10;

 

--预备好分析脚本,不过这个脚本应该最后做scrīpt3

select 'exec dbms_stats.gather_table_stats( '''||owner||''','''||table_name||''' ,method_opt => ''for all columns'', cascade => true ); ' from (

Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

(num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

from dba_tables where owner in (‘JZ21’) 

and TEMPORARY='N'

) tt

where tt.bb<0.7 and blocks>10;

 

 

--生成重建索引脚本scrīpt2

select ‘alter index ‘||owner||’.’||index_name||’ rebuild nologging;’ from dba_indexes where owner in (‘JZ21’) and status='UNUSABLE' ;

 

步骤:先执行scrīpt0

结束后,生成scrīpt1,scrīpt2,scrīpt3

按顺序执行,scritp1,scrīpt2,scrīpt3。

 

 

1.6.特殊情况下对数据库重新整理

1.6.1.   对表做move

alter table test_move move ;

 

 select ‘alter table ‘||owner||’.’||table_name||’ move; ’ from dba_tables where owner in (‘JZ21’) and TEMPORARY=’N’;

 

这里用需要做move的schema替换。

 

1.6.2.   对index做rebuild

alter INDEX idx_test_move rebuild nologging;

 

select ‘alter index ‘||owner||’.’||index_name||’ rebuild nologging;’ from dba_indexes where owner in (‘JZ21’);

 

 

1.6.3.   对所有的表做分析

 

begin

dbms_stats.gather_schema_stats (‘JZ21’);

end;

/

 

针对所有的schema都做一次。

 

1.7.对索引打开监视开关,看哪些索引没有被使用(慎用)

select ‘alter index ‘||owner||’.’||index_name||’ monitoring usage;’ from dba_indexes

where owner not in (‘SYS’,’SYSTEM’);

 

在运行了一个很完整的周期以后(对我们来说,例如2个完整的交易日),检查有哪些索引没有被使用

 

select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage

where used='NO';

如果这些索引不是主键或唯一索引,一般情况下这些索引可以去掉。

 

检查完一次以后,将索引监视关闭,不需要老是监视索引的使用:

select ‘alter index ‘||owner||’.’||index_name||’ nomonitoring usage;’ from dba_indexes where owner in (‘WHT’);

2.  语句调优

2.1.PL/SQL中的语法解释工具

语句的执行效率是否符合需要,一个是简单的把语句提取出来直接执行一下,看效果如何,但很多情况下,语句的运行是根据实际的条件运行的,所以有时候我们写完语句有要先分析一下语句是否是最优的,这时候我们就可以用PL/SQL的explain窗口(或直接选种语句后,按F5),有时侯,我们已知语句比较慢,要寻找为什么会慢,也可以如此做。

在EXPLAIN窗口,我们需要关注几个重要的东西,COST(成本),如果这个COST数字很大,说明语句效率不高,需要想办法;有无TABLE ACCESS FULL,如果有,只要数据量大一些,效率就不会高。我们要尽量避免产生table access full,方法之一就是建索引,另一个方法是改写连接方式,使能够用到索引。另一个需要关注的是join方式,nest loops outer和hash join outer,这两种方式的效果是不一样的,有时有天壤之别,目前我没有类似的经验可以写,以后碰到后补充。

2.2.ORACLE提供的调优工具

ORACLE本身提供了很好的客户端的性能调试和跟踪工具。ORACLE的工具非常好,可以帮助我们很容易的找到系统性能的瓶颈语句在哪里。ORACLE性能调整工具的位置在:

开始—程序—Oracle – Orahome92 – Enterprise Management Packs –Diagnostics –Performance Manager,登陆后找到数据库栏,然后连接就可以看到。

我常用其中的两项来调整性能(其他的也很有用处):一,顶层会话;二,SQL,分别做介绍。

顶层会话:

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

相关推荐

Oracle DB Time深度解析:从性能模型到实战调优

数据库性能调优的核心在于理解系统时间消耗的分布与根源。在Oracle数据库中,Time Model(时间模型)是构建性能分析框架的基石,它通过统计和分类数据库操作所花费的时间,为性能诊断提供量化依据。其核心价值在于将抽象的性能问题转化为可测量的时间维度,帮助DBA和开发者精准定位瓶颈。DB Time作为Time Model中的关键聚合指标,代表了所有前台会话在数据库调用上的总耗时,是衡量数据库真实负载与效率的核心标尺。通过分析DB Time的构成(CPU时间与等待时间),并结合AWR/ASH报告、动态性能视

congli3478的博客 423

Oracle中的优化方法

Oracle中的优化方法

m0_71406734的博客 1万+

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

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

2502_91592937的博客 1016

Oracle数据库调优

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

qq_42631788的博客 1471

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

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

AI天才研究院 991

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

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

weixin_35751412的博客 619

如何进行oracle调优

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

RzhenDwo的博客 1424

机器学习-深嵌交叉验证(Nested Cross-Validation)

Section I: Code and Analyses 第一部分:代码 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from...

Santorinisu Blogs 2717

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

性能优化

qq_22201881的博客 2937

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 335

实验手册(灾难恢复)

我们发现DC1与DC2的复制出现问题,此时我们检查了在DC2中,DC1是否被正确注册。这里选择还原系统状态,因为我们原DC1上只备份了AD的数据,所以我们在新的这台服务器上还原的也是AD数据库。因为我们是单域下的测试,只测试了一个域,所以它会出现这样的报错。我们选择远程共享文件夹,我们备份的时候,是在备份这台服务器上的。同时删除SRV记录,A记录,NS记录,SOA记录,框框里面的所有有关dc1的记录全部删除。如果在企业中AD数据的备份是每周或者每月都会有一次备份,选择恢复AD数据库的时间。

weixin_52364868的博客 1310

Oracle 调优工具(SQL Trace)

2013-03-03 11:00:14|  分类: Oracle 调优 |  标签:调优工具  |举报|字号 订阅 当我们需要为特定的事务或应用的一批SQL进行调优时,我们可以使用该工具收集执行统计信息。该工具提供了EXPLAIN和DBMS_XPLAN的所有信息,并且更加准确。 SQL TRACE主要包括如下两个组成部分: SQL跟踪:在当前会话或其他会话中,

hnhbdss的专栏 1077

学术版GPT安装教程——保姆版(附带原生GPT注册教程)

学术版GPT图文安装教程

DBenD的博客 2万+

常用Oracle数据库调优工具介绍[转

. 数据库级调优1.1.修改数据库参数以sys用户登录,运行如下的命令: alter system set optimizer_index_cost_adj=10 scope=spfilealter system set o...

congtudi4111的博客 112

YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点

现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 633

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5807

Oracle-常用调优方法

oracle 常用调优方法 Oracle数据库应用系统的调优主要包括十个方面:(1)、优化数据库内存;(2)、在Oracle共享池中固定应用程序代码;(3)、优化数据存储;(4)、优化数据排序的技术;(5)、优化SQL语句;(6)、优化回退段;(7)、优化索引;(8)、优化磁盘I/O;(9)、定期生成数据库对象的状态统计信息;(10)、优化操作系统环境。其实质就是降低CPU负载、改善I/O性能...

liberty12345678的专栏 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Oracle 第20章:数据库调优

通过这个案例,我们可以看到,数据库调优是一个多方面的过程,需要综合运用性能监控工具和调优方法。使用AWR报告分析性能瓶颈。优化SQL语句和索引。使用SQL Trace和TKPROF工具进行详细分析。调整内存参数。确保合理的并发控制。考虑硬件升级。通过这个案例,我们展示了如何使用Oracle的性能监控工具和调优方法来优化SQL查询性能。使用AWR报告分析性能瓶颈。优化SQL语句和索引。分析执行计划。收集统计信息。使用绑定变量。验证优化效果。持续监控。

hummhumm的专栏 1696

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

oracle 常用调优方法

oracle常用调优方法 Oracle数据库应用系统的调优主要包括十个方面: (1)、优化数据库内存; (2)、在Oracle共享池中固定应用程序代码; (3)、优化数据存储; (4)、优化数据排序的技术; (5)、优化SQL语句; (6)、优化回退段; (7)、优化索引; (8)、优化磁盘I/O; (9)、定期生成数据库对象的状态统计信息; (10)、优化操作系统环境。 其实质就是降低CPU负载、改善I/O性能。 1、化磁盘I/O 数据库的作用就是实现对数据的管理和查询,所以必然存在对数据的大..

spt_dream的博客 4394

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Oracle数据库性能调优指南

Oracle数据库调优

810cheng 2337

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

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

qq_45732829的博客 1953

Oracle数据库常用的管理工具介绍

本文介绍Oracle数据库常用的管理工具Database Configuration Assistant、SQL plus、SQL Developer和PL/SQL Developer

cnds123的专栏 1万+

Oracle性能调优概述

转 Oracle 性能调优 概述https://blog.youkuaiyun.com/tianlesoftware/article/details/5431982在过去的十年中, Oracle 已经成为世界上最专业的数据库之一。对于 IT 专家来说,就是要确保利用 Oracle 的强大特性来提高他们公司的生产力。最有效的方法之一是通过 Oracle 调优。它有大量的调整参数和技术来改进你的 Oracle 数...

rede 7531
上一篇: 批处理调用存储过程
下一篇: 使用xargs与awk联合使用批量杀进程
networkangle
博客等级 码龄20年 6粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值