- 浏览: 703775 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
yzs5273:
没什么用。都试过了
WIN7下CS不能全屏的解决方法 -
di1984HIT:
不错,学习了
读取本地计算机中的安装程序列表 -
ffedu:
[flash=200,200][url][img][list] ...
linux/unix中如何用find命令详解,非常详细的介绍,比man find强100倍(转) -
lintghi:
...
Log4j使用相对路径指定log文件及使用总结 -
nick.s.ni:
唉,Java中引用的包没有介绍啊,如果数据库用UTF-8的格式 ...
Oracle 中Java 对象与PL/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('&mynextdate 03:00:00','YYYY-MM-DD HH24:MI:SS'),
'to_date(''&mynextdate 03: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('&mynextdate 03:10:00','YYYY-MM-DD HH24:MI:SS'),
'to_date(''&mynextdate 03: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('&mynextdate 18:30:00','YYYY-MM-DD HH24:MI:SS'),
'to_date(''&mynextdate 18: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,登陆后找到数据库栏,然后连接就可以看到。
发表评论
-
Mongo vs. Couchbase
2017-07-05 22:21 0https://www.couchbase.com/com ... -
Backup DDL on Oracle DB
2016-03-01 10:31 792set trimspool on lines 500 pa ... -
Identifying Relationship vs. Non-identifying Relationship
2015-10-20 23:49 1267Identifying vs non-identifying ... -
Re-post: DBMS_XPLAN : Display Oracle Execution Plans
2014-07-23 16:14 1058DBMS_XPLAN : Display Oracle Ex ... -
Optimistic Locking with Concurrency in Oracle
2014-04-16 11:37 724A very good document about opti ... -
SQL*PLUS - SET Statement
2012-10-24 19:38 940Syntax: SET option value ... -
Get DDL via SQLPLUS
2012-10-24 19:36 987set pagesize 0 -- The height of ... -
Oracle 子程序参数模式,IN,OUT,NOCOPY ( 转)
2012-03-06 14:54 1899Oracle 子程序参数模式主 ... -
TNSNAMES配置中空格导致的bug(转)
2011-12-29 21:55 1221发现一个很有趣的bug ... -
Oracle 中Java 对象与PL/SQL类型的映射及使用(转)
2011-11-05 23:45 4781一、Jpublisher概述 Oracle JPu ... -
Refresh statistics for all tables
2011-11-03 14:10 990select 'analyze table '||tab ... -
What's blocking my lock?(Reposted)
2011-10-31 13:44 1027If you've ever gotten a phone c ... -
Oracle exp direct(Reposted)
2011-06-15 14:55 2201使用直接导出模式 direct=y exp 比传统模式导 ... -
九大Oracle性能优化基本方法详解(转)
2011-05-12 18:18 1126Oracle性能优化基本方法包括一下几个步骤,包括: 1)设 ... -
深入了解oracle的高水位(HWM)
2011-05-12 09:23 1193转自http://tolywang.itpub.net ... -
Oracle 聚簇(收集)
2011-05-11 22:02 19621. 什么是聚簇 聚簇是 ... -
怎样正确显示oracle异常行数(转)
2011-01-20 16:17 2624在oracle中的存储过程中,使用的EXCEPTION并用 ... -
Oracle function translate(Reposted)
2011-01-08 22:51 1676一、语法: TRANSLATE(string,f ... -
Oracle用Start with...Connect By子句递归查询(转)
2011-01-07 11:39 4303一、语法 大致写法:sel ... -
Spool和SQLLDR--Oracle数据导出导入(传)
2010-12-02 14:58 4525对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直 ...
相关推荐
MYTUN则是另一种调优工具,它可能是指Oracle的自动管理功能或者其他第三方的数据库调优工具。MYTUN通常用于根据数据库的工作负载和当前状态,自动调整数据库的参数设置,以优化性能。MYTUN可能会包括自动索引创建、...
为了确保Oracle数据库能够高效稳定地运行,并且能够满足业务发展的需求,进行Oracle系统的性能调优就显得尤为重要。 性能调优的目标主要包括: - 提高数据库查询速度。 - 减少系统资源消耗(如CPU、内存等)。 - ...
Oracle数据库性能调优是数据库管理的关键环节,旨在提高数据处理速度和系统响应时间,从而提升整体应用系统的效率。本文主要探讨了几个关键的调优策略。 首先,日志管理是数据库性能的重要因素。日志文件包含了...
总结来说,掌握`EXPLAIN PLAN`的使用和解析,是Oracle数据库调优的关键技能之一。通过深入理解执行计划,我们可以有效地改进SQL查询,提升数据库的整体性能。对于开发者和DBA而言,这是一项必不可少的技能,能帮助...
《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的功能。本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 ...
本文将详细介绍Oracle中的一些常用管理工具,包括Oracle Database Configuration Assistant (DBCA)、SQL*Plus、SQL*Plus Worksheet以及Oracle Enterprise Manager (OEM)。 1. **Oracle Database Configuration ...
Oracle数据库服务器配置是数据库管理员和IT专业人员在部署和管理Oracle...随着经验的积累,还应深入学习Oracle数据库的体系结构、性能调优、备份恢复、安全管理等高级主题,以便更好地管理和维护Oracle数据库环境。
Oracle数据库性能调优是针对数据库系统的优化过程,旨在提高数据处理速度、降低响应时间、提升系统吞吐量,以满足日益增长的业务需求。在江苏省社会法人信用基础数据库的案例中,性能低下主要由以下几个因素引起: ...
7. Oracle for NT系统实用工具介绍 8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script ...
### Oracle数据库性能分析 #### 一、Oracle体系结构 Oracle数据库是一个复杂且功能强大的关系型数据库管理系统(RDBMS),其核心组件包括实例和数据库文件。理解Oracle的体系结构对于优化性能至关重要。 - **实例**...
### MySQL性能调优工具介绍与应用 MySQL作为全球最广泛使用的开源关系型数据库之一,在企业级应用中的地位不可动摇。为了确保MySQL能够高效稳定地运行,掌握一系列性能调优工具至关重要。本文将详细介绍多种MySQL...
此外,Oracle数据库设计也包括对数据库性能监控和调优。通过使用工具如SQL*Plus、Oracle Enterprise Manager或日志分析,我们可以发现性能瓶颈并采取相应的优化措施。 总的来说,Oracle数据库设计是一门深奥但实用...
- **Oracle管理工具**:介绍常用的Oracle管理工具,如SQL*Plus、Enterprise Manager等,以及如何利用这些工具对数据库进行管理和维护。 #### 第三天:性能调优与备份恢复 - **性能监控**:了解Oracle数据库的性能...
- **DBCA (Database Configuration Assistant):** 用于创建、配置和管理Oracle数据库的图形化工具。 #### Oracle数据库基础知识 - **Oracle数据库的特点:** 高性能、高可用性、安全性强。 - **Oracle数据库架构:** ...
- **版本介绍**:Oracle数据库10g版本作为Oracle公司推出的第三代产品,是基于网格计算技术的重要里程碑。它集成了许多高级特性,如自动存储管理(ASM)、实时应用集群(RAC)等,极大提升了数据库的性能和可用性。 ...
在安装Oracle数据库时,我们需要一系列特定的RPM包来确保所有必要的库和工具都已就绪。 首先,Oracle数据库对硬件和软件环境有一定的要求。确保你的Linux系统版本与Oracle数据库兼容,通常Oracle支持CentOS、Red ...
### Oracle数据库教程知识点详解 #### 一、Oracle数据库概述 - **定义与特点**: - Oracle数据库是由美国Oracle公司开发的一款关系型数据库管理系统。它以其高性能、高可靠性及强大的功能在众多数据库产品中...
在IT领域,Unix和Linux操作系统是企业级Oracle数据库系统常用的操作环境。Oracle数据库因其稳定性、高性能和可扩展性,被广泛应用于大型企业及关键业务系统。本书“Unix和Linux下的Oracle数据库管理”深入探讨了在...
这一章节通常会介绍Oracle数据库的基础概念,包括数据库的构成、数据存储结构以及如何创建和管理数据库对象如表、索引、视图等。此外,还会涉及SQL语言的基本用法,如数据查询、插入、更新和删除操作。 “第二章--...