- 浏览: 1019964 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
为了能取得圆满成功,我将涉及到一些预备步骤,它们将在查看发生了什么时需要,这些步骤包括运行plustrce SQL脚本、创建一个“EXPLAIN_PLAN”表、授予角色、配置sql*plus环境查看执行计划。所有这些步骤都包括在“Oracle 9i R2数据库性能调整指南和参考”中“在sql*plus中使用自动跟踪”,对于Oracle 10g,这些步骤包括在“sql*plus用户指南和参考10.2版”中“调整sql*plus”。
预备步骤
如果角色PLUSTRACE不存在,用ORACLE_HOME\sqlplus\admin目录下的PLUSTRCE SQL脚本来创建它,这个脚本相当简单:
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
|
检查角色使用情况:
SQL> select role from dba_roles where role = 'PLUSTRACE';
ROLE
----------------
PLUSTRACE
|
用户必须有(或有权限访问)一个PLAN_TABLE(它可以被命名为其他名字,但是默认的名字非常好),这个表是用ORACLE_HOME\rdbms\admin目录下的UTLXPLAN SQL脚本创建的。
SQL> show user
USER is "SYSTEM"
SQL> @?\rdbms\admin\utlxplan
Table created.
SQL> create public synonym plan_table for system.plan_table;
Synonym created.
SQL> grant select, update, insert, delete on plan_table to <你的用户名>;
Grant succeeded.
SQL> grant plustrace to <你的用户名>;
Grant succeeded.
|
我们的例子中使用的用户是HR(可以在Oracle提供的样本方案中找到)。
SQL> conn hr/hr
Connected.
SQL> set autotrace on
SQL> select * from dual;
D
-
X
|
因为autotrace被设置为on,你将能够看到执行计划和一些统计信息,你看到的输出应该与下面的内容类似:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=2)
1 0 TABLE ACCESS (FULL) OF 'DUAL' (TABLE) (Cost=2 Card=1 Bytes=2)
Statistics
----------------------------------------------------------
24 recursive calls
0 db block gets
6 consistent gets
1 physical reads
0 redo size
389 bytes sent via SQL*Net to client
508 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
|
要取消查询结果,在set语句中使用“traceonly”。
使用绑定变量
在任何DBA帮助类型的网站上,常常会看到一点使用绑定变量的建议,但是步骤或包括在这些步骤中的指令很少,这里有一个创建和使用绑定变量的简单方法。
SQL> variable department_id number
SQL> begin
2 :department_id := 80;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> print department_id
DEPARTMENT_ID
-------------
80
|
ok!区别不是太大(cost从3变为2),但这是一个小例子(表只有107行),当工作在一个更大的表上会有更多区别吗?使用SH方案,它的SALES表有超过900,000行数据。
SQL> select prod_id, count(prod_id)
2 from sales
3 where prod_id > 130
4 group by prod_id;
|
同样的查询,但这次使用一个绑定变量:
SQL> variable prod_id number
SQL> begin
2 :prod_id := 130;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> print prod_id
PROD_ID
----------
130
SQL> select prod_id, count(prod_id)
2 from sales
3 where prod_id > :prod_id
4 group by prod_id;
|
cost从540变为33了,这一下就显得十分明显了,其中最主要的受益是使用绑定变量的查询,你要做的就是为这个变量替换一个新值。 使用效率高的SQL 假设你在下面的两个查询中做一个选择(再次使用HR方案): 查询1
select d.department_id,
d.department_name,
r.region_name
from departments d,
locations l,
countries c, regions r
where d.location_id=l.location_id
and l.country_id=c.country_id
and c.region_id=r.region_id;
和
select department_id,
department_name,
region_name
from departments natural join locations
natural join countries natural join regions;
|
这产生了四个问题。
1、这些查询的查询结果集一致吗?
2、如果它们是一致的,你能预计在它们的执行计划中有什么不同吗?
3、如果这些执行计划一致,是什么使得这些查询不同?
4、能做些什么事情来改善成本(cost)?
第一个问题的答案是“是”,它们的查询结果集是一致的;第二个问题的答案是“不能”,因为相同的步骤是连接表;第三个问题的答案需要处理输入的数量或涉及的编码。
在这个例子中关键词“自然连接(natural join)”,“join on”,“左/右 外连接(right/left outer join)”的使用是怎么回事,如果你懂得什么是自然连接(仍然连接两个表,但是涉及到的列名是相同的),看起来使用第二个查询不是更容易了吗?
至于最后一个问题的答案,效率高的SQL对不同的人可能意思不一样,在本例中,使用一个视图怎么样?这样与最初的查询在成本上有何不同,或有其他需要考虑的事情吗?
假设我有一个名叫cost_example的视图,创建语句如下:
create or replace view cost_example
as
select department_id, department_name, region_name
from departments natural join locations
natural join countries natural join regions;
|
让我们在视图中查看一条记录
SQL> select department_id, department_name, region_name
2 from cost_example
3 where department_id=70;
DEPARTMENT_ID DEPARTMENT_NAME REGION_NAME
------------- ------------------------------ ------------
70 Public Relations Europe
|
输出三列或字段,它们能够被改动吗?如果可以,为什么?如果不可以,为什么不可以?
我们假设现在用Asia代替REGION_NAME的值Europe
SQL> update cost_example
2 set region_name = 'Asia'
3 where region_name = 'Europe';
set region_name = 'Asia'
*
ERROR at line 2:
ORA-01779: cannot modify a column which maps to a non key-preserved table
|
DEPARTMENT_NAME字段的值能被修改吗?
SQL> update cost_example
2 set department_name = 'PR'
3 where department_name = 'Public Relations';
1 row updated.
|
为什么在视图中的记录能被更新的原因是departments表是一个关键保护表(它的主键DEPARTMENT_ID用于视图的创建了)。
这个例子的要点是:仅仅因为你获得了低成本并不意味着你就不能再为查询优化做其他的事情了,使用单一连接结构适用于开发者,视图适用于用户。
小结
本文的主要观点是:
·使用绑定变量
·使用效率高的SQL
·使用编码标准
·创建适当的视图
这些步骤没有哪个在执行或实现起来特别困难,因为程序员常常使用"tableA.column_name = tableB.column_name"的格式来连接,转移到使用自然连接节约相当多的输入,加上受益于关键列名相配(在子表中的外键列与父表中的主键有相同的列名),如展示的那样,某些量度可能没有大的影响,但是当当作为一个整体时,每一个小的都对改善性能有帮助,在第3部分中,我们将查看更多的例子。
发表评论
-
enq: TX - row lock contention
2011-02-25 16:24 2391Article by Rampant Author Brian ... -
Oracle 9i在AIX上的性能调整 -- 内存篇
2011-01-19 23:29 1190内存访问的冲突出现在当进程申请的内存超过系统的物理内存总量时, ... -
包含IN子查询的SQL语句的优化
2010-12-09 11:10 6808当SQL语句中包含in语句时,有时候会极大的影响性能,我们可 ... -
Oracle中优化SQL语句执行的原则
2010-12-03 15:12 12751。已经检验的语句和已在共享池中的语句之间要完全一 ... -
详述逻辑读
2010-12-01 11:13 1274这篇实验讨论下数据的读写过程. 我们都知道,数据块是o ... -
相关重做的等待事件
2010-12-01 11:07 902晶晶实验十二 相关重 ... -
深度分析数据库的热点块问题(latch: cache buffers chains)
2010-11-28 07:35 4571热点块的定义 数据库 ... -
oracle 常见等待事件及处理方法
2009-12-10 17:39 1580我们可以通过视图v$session_wait来查看系统当前的等 ... -
Oracle常见等待事件介绍
2009-12-10 17:36 1264Oracle的等待事件是衡量Oracle运行状况的重要依据 ... -
Oracle隐藏索引和索引可用性
2009-09-03 10:16 1043在我参与过的许多商店系统开发中,我发现在生产系统中创建一个索引 ... -
ORACLE SQL性能优化 (下)
2009-08-20 16:38 103831. 强制索引失效如果两个或以上索引具有相同的等级,你可以强 ... -
利用Oracle执行计划机制提高查询性能
2009-07-27 00:17 1094消耗在准备利用Oracle执行计划机制提高查询性能新的SQL语 ... -
Oracle性能调整与优化一
2009-07-26 23:30 1106Oracle性能调整是一个范围比较广且有点复杂的主题,普通DB ... -
Oracle数据库设计提升性能的五条法则
2009-07-26 23:12 1060众所周知,数据库设计的好坏直接关系到数据库运行的效率。根据笔者 ... -
Oracle性能调整的要点之SGA
2009-07-26 23:09 1088一、Shared pool tunning Shared p ... -
不要让临时表空间影响数据库性能
2009-07-21 16:49 1142在Oracle数据库中进行排 ... -
关于SGA设置的一点总结
2009-07-16 23:05 997本总结不针对特例,仅对服务器只存在OS + ORACLE 为例 ... -
如何优化数据库的性能
2009-07-16 22:49 22301、 硬件调整性能 最 ... -
oracle性能优化心得
2009-07-12 22:19 1283很多的时侯, 做Oracle DBA的我们,当应用治理员向我 ... -
分析数据库性能的SQL
2009-07-12 22:10 1007--用于查看哪些实例的哪些操作使用了大量的临时段 SELEC ...
相关推荐
"Oracle Database 11gR2性能调整与优化"与"Oracle Database 12cR2性能调整与优化"这两本书分别针对Oracle的不同版本,提供了深入的性能优化策略和技巧。 Oracle Database 11gR2性能调整主要涉及以下几个方面: 1. ...
除了上述两点,Oracle性能优化还包括索引的建立与管理,分区策略的运用,回滚段的优化,以及查询执行计划的控制等。索引能加速数据检索,但过度的索引会增加写操作的开销,需权衡利弊。分区策略可将大表分解,提高...
《Oracle性能优化绝版好书:高级OWI与ORACLE性能调整》这本书深入探讨了Oracle数据库性能优化的关键技术和策略,特别关注了Oracle Wait Interface (OWI)和性能调整的实践应用。OWI是Oracle数据库中用于监控和诊断...
Oracle Database 11gR2性能调整与优化
根据提供的信息,我们可以推断出这本名为“高级owi与oracle性能调整”的书籍主要讨论了高级owi技术以及Oracle数据库性能优化的相关内容。由于提供的部分页面信息仅包含联系方式,并没有具体的章节内容,因此以下将...
Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优
这个压缩包包含了与Oracle 12C OCM性能优化考试相关的教材,帮助考生深入理解和掌握相关技术。下面将详细阐述其中的知识点。 一、Oracle 12C的新特性 1. 多租户架构(Multitenant Architecture):Oracle 12C引入...
《Oracle Database 11gR2性能调整与优化》PDF版本下载
在性能调整与优化方面,Oracle 11g R2提供了许多工具和技术,以帮助管理员和开发人员实现最佳的系统性能。 首先,Oracle的自动工作负载 repository (AWR) 是一个强大的性能监控工具。AWR收集关于数据库性能的数据,...
### Oracle的性能调试与优化 #### 一、概述 《Oracle的性能调试与优化》这本书由Springer出版社出版,共510页,出版日期为2002年12月13日,ISBN编号为0387953930。该书主要针对数据库应用程序中的常见问题,即精心...
就是那本大名鼎鼎的《oracle9i性能调整与优化》,Richard.J.Niemiec著,清华大学出出版。一共4个包
Oracle数据库性能优化与故障诊断是数据库管理中极为重要的两个方面,它们直接关系到企业业务系统的稳定运行和性能表现。在这篇文章中,我们将详细探讨针对Oracle数据库性能问题和故障的诊断案例,并分享如何通过案例...
Oracle数据库性能优化与调整是一个复杂而关键的任务,它涉及到数据库自身、硬件、操作系统等多个层面的协同工作。Oracle作为全球领先的关系型数据库管理系统,其性能优化的重要性不言而喻,尤其在处理大规模网络应用...
Oracle性能调整与优化分析 Oracle数据库是大型的关系型数据库,目前广泛应用于电信、金融、政府、交通、能源等各大部门和企业,成为基于大数据访问的重要数据库平台。然而,随着Oracle数据库应用的普及,数据库...
Oracle数据库性能调整与SQL性能优化是数据库管理员和开发人员日常工作中不可或缺的部分。Oracle数据库系统以其高效、稳定和可扩展性闻名,但同时也需要通过精心的调整和优化来确保最佳性能。以下是一些关键的知识点...
根据提供的标题“高级owi与oracle性能调整”及描述“高级owi与oracle性能调整”,我们可以推断出这份文档主要探讨的是如何通过高级优化方法提升Oracle数据库的性能。虽然提供的具体内容并没有实质性的技术信息,但...