- 浏览: 398967 次
- 性别:
- 来自: 上海
最新评论
-
liuwenlong62555:
...
Linux防火墙的关闭和开启 -
baolong101010:
永久关闭:chkconfig --level 2345 ipt ...
Linux防火墙的关闭和开启 -
lijie1819:
3)查看防火墙状态chkconfig iptables --l ...
Linux防火墙的关闭和开启 -
Annah:
总结的很好,谢谢
Vector和ArrayList区别 -
celavi:
非常好的文章,谢谢分享!
ORACLE SQL TUNING
大家在大型数据库生产系统的运维中可能会遇到这样一个问题,一条查询语句,操作的是相同的表和数据,为什么在生产数据库上执行起来就很慢,而在备份数据库反而会很快。这其中一个重要原因就在于索引CLUSTER_FACTOR的不同。
Oracle数据库下,索引在做完统计分析后,会获得很多重要信息,其中之一就是CLUSTER_FACTOR,CLUSTER_FACTOR表示索引数据顺序和表数据顺序的一致性,关于CLUSTER_FACTOR的理论和机制分析见随后作者的文章,Oracle高级SQL调优之:CLUSTER_FACTOR机制研究。
CLUSTER_FACTOR的精彩之处就在于,能借此区分看来貌似完全相同的情况:表结构、表数据和索引完全相同,但就是表数据行的存储顺序不同。下面以案例的形式加以分析。
1. 研究结论
CLUSTER_FACTOR对Oracle执行计划会产生重要影响。这个值越高,说明索引的使用效率将会越差。这个值会存在于一个区间内,区间的最小值为表占用的数据块数,最大值为表拥有的数据行数。
2. 研究对象
研究对象为两个数据表TESTCF和TESTCF2,两者的数据结构相同,都只有两列:ID列,整数型,name列,字符型,80个字符,数据相同,都8万行,占用1024个数据块。不同的在于两个表的数据行的存储顺序不同,TESTCF表的数据,按照ID值从小到大的顺序依次存储,而TESTCF2表的数据,随机杂乱存储。
3. 案例实验过程
3.1 系统配置:
Oracle 11.1.0.6,初始化参数optimizer_index_cost_adj为默认值100
SQL> SELECT * FROM v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 – Production
SQL> SELECT name, type, value FROM v$parameter p WHERE p.name = ’optimizer_index_cost_adj’;
NAME TYPE VALUE
------------------------------ ---------- --------------------
optimizer_index_cost_adj 3 100 3.2 创建表TESTCF和TESTCF2
设置表TESCF控制其行长度和行数使得总共占用约1024个数据块
表定义:每行至少80个字节,共8万行,PCTFREE = 0,初始盘区和NEXT盘区都为1M
3.2.1 创建表TESTCF,并产生数据
数据的两列,分别由类序列值和随机函数产生,随机函数直接产生80位长的字符
SQL> CREATE TABLE TESTCF
2 (
3 ID NUMBER(32),
4 NAME VARCHAR2(80)
5 )
6 TABLEspace USERS
7 pctfree 0
8 initrans 1
9 maxtrans 255
10 storage
11 (
12 initial 1M
13 next 1M
14 minextents 1
15 maxextents unlimited
16 );
表已创建。
已用时间: 00: 00: 00.06
SQL> begin
2 for i in 1..80000 loop
3 insert into TESTCF(id, name)
4 values(i,dbms_random.string(’a’,80));
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 18.53 3.2.2 创建表TESTCF2
该表和表TESTCF结构相同,且数据相同。将TESTCF表的所有数据灌入TESTCF2以获得相应信息。
重要:灌入时,让数据随机的进入TESTCF2,由dbms_random控制员Vぷ愎坏乃婊浴?BR> SQL> CREATE TABLE TESTCF2
2 (
3 ID NUMBER(32),
4 NAME VARCHAR2(80)
5 )
6 TABLEspace USERS
7 pctfree 0
8 initrans 1
9 maxtrans 255
10 storage
11 (
12 initial 1M
13 next 1M
14 minextents 1
15 maxextents unlimited
16 );
表已创建。
已用时间: 00: 00: 00.04
SQL>
SQL> insert into TESTCF2 nologging
2 SELECT * FROM TESTCF order by dbms_random.random;
已创建80000行。
已用时间: 00: 00: 01.28
SQL>
SQL> commit;
提交完成。
已用时间: 00: 00: 00.00 3.3 给两个表都创建PK
SQL> alter TABLE TESTCF add constraint pk_TESTCF primary key(id);
表已更改。
已用时间: 00: 00: 00.71
SQL>
SQL> alter TABLE TESTCF2 add constraint pk_TESTCF2 primary key(id);
表已更改。
已用时间: 00: 00: 00.37
表都为1024个数据块,索引都为256个数据块。
SQL> SELECT t.SEGMENT_NAME, t.SEGMENT_TYPE, t.BLOCKS FROM user_segments t WHERE t.SEGMENT_NAME like ’%TESTCF%’;
SEGMENT_NAME SEGMENT_TYPE BLOCKS
-------------------- ------------------------------------ ----------
TESTCF2 TABLE 1024
PK_TESTCF INDEX 256
TESTCF TABLE 1024
PK_TESTCF2 INDEX 256
已用时间: 00: 00: 00.10
3.4 查看数据样例
SQL> SELECT * FROM TESTCF WHERE rownum < 3;
ID NAME
---------- --------------------------------------------------------------------------------
1 XMaMnroMsEWEamYPDopXkESqZkNbQrxlOeXsaHIGZIRrAnrTzPRtoOawwooEimyGjtwBuhWcxHPlsKKY
2 AeVFFXiLTLwJtGNJCOtvUOvwWgfhZkVxTJJoKgRDFtKonklzVIgNZFUXLAnfHDImVGxDnfMHHEjIzhvs
已用时间: 00: 00: 00.00
SQL> SELECT * FROM TESTCF2 WHERE rownum < 3;
ID NAME
---------- --------------------------------------------------------------------------------
39312 uWNqugvticIHolgfCcbNIVHOUTESzhVPhwLJeEydkUKfuywcCkiKyRkPqSIuNRJQYURSqeJnwmsDTEqW
41453 cOSqPzChzGBYkHnJbhIGbwUYBKquCBRcTNHbyHyVjdNItSxpxDKWXzSdYIkSBUJSUIziOleLLWPVOSNy
已用时间: 00: 00: 00.01 3.5分别产生统计数据,然后查看两个表PK索引的CLUSTER_FACTOR
可以看出两表PK索引的CLUSTER_FACTOR值相差甚远。
TESTCF表的值为908,接近于表的数据块数(1024),
TESTCF2表的值为79913,接近于表的数据行数(80000),
这说明,当数据行的存储顺序和索引顺序越接近,CLUSTER_FACTOR越小,越有利于使用索引。
SQL> begin
2 dbms_stats.gather_TABLE_stats(ownname => user,tabname => ’TESTCF’,cascade => true);
3 end;
4 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.93
SQL> begin
2 dbms_stats.gather_TABLE_stats(ownname => user,tabname => ’TESTCF2’,cascade => true);
3 end;
4 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.45
SQL> SELECT i.index_name, i.CLUSTERING_FACTOR FROM dba_indexes i WHERE i.index_name like ’PK_TESTCF%’;
INDEX_NAME CLUSTERING_FACTOR
------------------------------ -----------------
PK_TESTCF 908
PK_TESTCF2 79913
3.6 测试CLUSTER_FACTOR对执行计划的影响
执行相同的查询语句,获得一段连续id内的数据行,以检查CLUSTER_FACTOR对执行计划的影响
从实验可以看出,CLUSTER_FACTOR对执行计划产生了巨大影响,这使得
a) TESTCF表的执行计划,走的是INDEX RANGE SCAN,而test2表走的是TABLE ACCESS FULL
同事这导致TESTCF表的总cost为83,TESTCF2表的总cost为210,是后者的四倍。
b) TESTCF表的物理读和一致性读远小少于TESTCF2。
SQL> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.06
SQL> set autotrace traceonly;
SQL> SELECT * FROM TESTCF WHERE id > 2000 and id < 8000;
已选择5999行。
已用时间: 00: 00: 00.65 执行计划
----------------------------------------------------------
Plan hash value: 2216396729
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6001 | 498K| 83 (0)| 00:00:0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTCF | 6001 | 498K| 83 (0)| 00:00:0
|* 2 | INDEX RANGE SCAN | PK_TESTCF | 6001 | | 14 (0)| 00:00:0
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID">2000 AND "ID"<8000)
统计信息
----------------------------------------------------------
320 recursive calls
0 db block gets
929 consistent gets
121 physical reads
0 redo size
592212 bytes sent via SQL*Net to client
4774 bytes received via SQL*Net FROM client
401 SQL*Net roundtrips to/FROM client
5 sorts (memory)
0 sorts (disk)
5999 rows processed
SQL> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.03
SQL> set autotrace traceonly;
SQL> SELECT * FROM TESTCF2 WHERE id > 2000 and id < 8000;
已选择5999行。
已用时间: 00: 00: 00.59 执行计划
----------------------------------------------------------
Plan hash value: 4178501150
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6001 | 498K| 210 (2)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TESTCF2 | 6001 | 498K| 210 (2)| 00:00:03 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ID"<8000 AND "ID">2000)
统计信息
----------------------------------------------------------
312 recursive calls
0 db block gets
1383 consistent gets
944 physical reads
0 redo size
568273 bytes sent via SQL*Net to client
4774 bytes received via SQL*Net FROM client
401 SQL*Net roundtrips to/FROM client
5 sorts (memory)
0 sorts (disk)
5999 rows processed
SQL>
Oracle数据库下,索引在做完统计分析后,会获得很多重要信息,其中之一就是CLUSTER_FACTOR,CLUSTER_FACTOR表示索引数据顺序和表数据顺序的一致性,关于CLUSTER_FACTOR的理论和机制分析见随后作者的文章,Oracle高级SQL调优之:CLUSTER_FACTOR机制研究。
CLUSTER_FACTOR的精彩之处就在于,能借此区分看来貌似完全相同的情况:表结构、表数据和索引完全相同,但就是表数据行的存储顺序不同。下面以案例的形式加以分析。
1. 研究结论
CLUSTER_FACTOR对Oracle执行计划会产生重要影响。这个值越高,说明索引的使用效率将会越差。这个值会存在于一个区间内,区间的最小值为表占用的数据块数,最大值为表拥有的数据行数。
2. 研究对象
研究对象为两个数据表TESTCF和TESTCF2,两者的数据结构相同,都只有两列:ID列,整数型,name列,字符型,80个字符,数据相同,都8万行,占用1024个数据块。不同的在于两个表的数据行的存储顺序不同,TESTCF表的数据,按照ID值从小到大的顺序依次存储,而TESTCF2表的数据,随机杂乱存储。
3. 案例实验过程
3.1 系统配置:
Oracle 11.1.0.6,初始化参数optimizer_index_cost_adj为默认值100
SQL> SELECT * FROM v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 – Production
SQL> SELECT name, type, value FROM v$parameter p WHERE p.name = ’optimizer_index_cost_adj’;
NAME TYPE VALUE
------------------------------ ---------- --------------------
optimizer_index_cost_adj 3 100 3.2 创建表TESTCF和TESTCF2
设置表TESCF控制其行长度和行数使得总共占用约1024个数据块
表定义:每行至少80个字节,共8万行,PCTFREE = 0,初始盘区和NEXT盘区都为1M
3.2.1 创建表TESTCF,并产生数据
数据的两列,分别由类序列值和随机函数产生,随机函数直接产生80位长的字符
SQL> CREATE TABLE TESTCF
2 (
3 ID NUMBER(32),
4 NAME VARCHAR2(80)
5 )
6 TABLEspace USERS
7 pctfree 0
8 initrans 1
9 maxtrans 255
10 storage
11 (
12 initial 1M
13 next 1M
14 minextents 1
15 maxextents unlimited
16 );
表已创建。
已用时间: 00: 00: 00.06
SQL> begin
2 for i in 1..80000 loop
3 insert into TESTCF(id, name)
4 values(i,dbms_random.string(’a’,80));
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 18.53 3.2.2 创建表TESTCF2
该表和表TESTCF结构相同,且数据相同。将TESTCF表的所有数据灌入TESTCF2以获得相应信息。
重要:灌入时,让数据随机的进入TESTCF2,由dbms_random控制员Vぷ愎坏乃婊浴?BR> SQL> CREATE TABLE TESTCF2
2 (
3 ID NUMBER(32),
4 NAME VARCHAR2(80)
5 )
6 TABLEspace USERS
7 pctfree 0
8 initrans 1
9 maxtrans 255
10 storage
11 (
12 initial 1M
13 next 1M
14 minextents 1
15 maxextents unlimited
16 );
表已创建。
已用时间: 00: 00: 00.04
SQL>
SQL> insert into TESTCF2 nologging
2 SELECT * FROM TESTCF order by dbms_random.random;
已创建80000行。
已用时间: 00: 00: 01.28
SQL>
SQL> commit;
提交完成。
已用时间: 00: 00: 00.00 3.3 给两个表都创建PK
SQL> alter TABLE TESTCF add constraint pk_TESTCF primary key(id);
表已更改。
已用时间: 00: 00: 00.71
SQL>
SQL> alter TABLE TESTCF2 add constraint pk_TESTCF2 primary key(id);
表已更改。
已用时间: 00: 00: 00.37
表都为1024个数据块,索引都为256个数据块。
SQL> SELECT t.SEGMENT_NAME, t.SEGMENT_TYPE, t.BLOCKS FROM user_segments t WHERE t.SEGMENT_NAME like ’%TESTCF%’;
SEGMENT_NAME SEGMENT_TYPE BLOCKS
-------------------- ------------------------------------ ----------
TESTCF2 TABLE 1024
PK_TESTCF INDEX 256
TESTCF TABLE 1024
PK_TESTCF2 INDEX 256
已用时间: 00: 00: 00.10
3.4 查看数据样例
SQL> SELECT * FROM TESTCF WHERE rownum < 3;
ID NAME
---------- --------------------------------------------------------------------------------
1 XMaMnroMsEWEamYPDopXkESqZkNbQrxlOeXsaHIGZIRrAnrTzPRtoOawwooEimyGjtwBuhWcxHPlsKKY
2 AeVFFXiLTLwJtGNJCOtvUOvwWgfhZkVxTJJoKgRDFtKonklzVIgNZFUXLAnfHDImVGxDnfMHHEjIzhvs
已用时间: 00: 00: 00.00
SQL> SELECT * FROM TESTCF2 WHERE rownum < 3;
ID NAME
---------- --------------------------------------------------------------------------------
39312 uWNqugvticIHolgfCcbNIVHOUTESzhVPhwLJeEydkUKfuywcCkiKyRkPqSIuNRJQYURSqeJnwmsDTEqW
41453 cOSqPzChzGBYkHnJbhIGbwUYBKquCBRcTNHbyHyVjdNItSxpxDKWXzSdYIkSBUJSUIziOleLLWPVOSNy
已用时间: 00: 00: 00.01 3.5分别产生统计数据,然后查看两个表PK索引的CLUSTER_FACTOR
可以看出两表PK索引的CLUSTER_FACTOR值相差甚远。
TESTCF表的值为908,接近于表的数据块数(1024),
TESTCF2表的值为79913,接近于表的数据行数(80000),
这说明,当数据行的存储顺序和索引顺序越接近,CLUSTER_FACTOR越小,越有利于使用索引。
SQL> begin
2 dbms_stats.gather_TABLE_stats(ownname => user,tabname => ’TESTCF’,cascade => true);
3 end;
4 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.93
SQL> begin
2 dbms_stats.gather_TABLE_stats(ownname => user,tabname => ’TESTCF2’,cascade => true);
3 end;
4 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.45
SQL> SELECT i.index_name, i.CLUSTERING_FACTOR FROM dba_indexes i WHERE i.index_name like ’PK_TESTCF%’;
INDEX_NAME CLUSTERING_FACTOR
------------------------------ -----------------
PK_TESTCF 908
PK_TESTCF2 79913
3.6 测试CLUSTER_FACTOR对执行计划的影响
执行相同的查询语句,获得一段连续id内的数据行,以检查CLUSTER_FACTOR对执行计划的影响
从实验可以看出,CLUSTER_FACTOR对执行计划产生了巨大影响,这使得
a) TESTCF表的执行计划,走的是INDEX RANGE SCAN,而test2表走的是TABLE ACCESS FULL
同事这导致TESTCF表的总cost为83,TESTCF2表的总cost为210,是后者的四倍。
b) TESTCF表的物理读和一致性读远小少于TESTCF2。
SQL> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.06
SQL> set autotrace traceonly;
SQL> SELECT * FROM TESTCF WHERE id > 2000 and id < 8000;
已选择5999行。
已用时间: 00: 00: 00.65 执行计划
----------------------------------------------------------
Plan hash value: 2216396729
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6001 | 498K| 83 (0)| 00:00:0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTCF | 6001 | 498K| 83 (0)| 00:00:0
|* 2 | INDEX RANGE SCAN | PK_TESTCF | 6001 | | 14 (0)| 00:00:0
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID">2000 AND "ID"<8000)
统计信息
----------------------------------------------------------
320 recursive calls
0 db block gets
929 consistent gets
121 physical reads
0 redo size
592212 bytes sent via SQL*Net to client
4774 bytes received via SQL*Net FROM client
401 SQL*Net roundtrips to/FROM client
5 sorts (memory)
0 sorts (disk)
5999 rows processed
SQL> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.03
SQL> set autotrace traceonly;
SQL> SELECT * FROM TESTCF2 WHERE id > 2000 and id < 8000;
已选择5999行。
已用时间: 00: 00: 00.59 执行计划
----------------------------------------------------------
Plan hash value: 4178501150
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6001 | 498K| 210 (2)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TESTCF2 | 6001 | 498K| 210 (2)| 00:00:03 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ID"<8000 AND "ID">2000)
统计信息
----------------------------------------------------------
312 recursive calls
0 db block gets
1383 consistent gets
944 physical reads
0 redo size
568273 bytes sent via SQL*Net to client
4774 bytes received via SQL*Net FROM client
401 SQL*Net roundtrips to/FROM client
5 sorts (memory)
0 sorts (disk)
5999 rows processed
SQL>
发表评论
-
一次oracle无法open的解决
2009-01-16 13:59 3617这几天因为公司的复杂查询出现性能的问题(说实话本来就没设计好, ... -
Oracle10g 自动共享内存管理
2009-01-14 13:25 38805.6 自动共享内存管理 从Oracle 10g开始,Or ... -
如何改善Oracle的索引
2009-01-12 16:40 15261、速度因素 PARALLEL选项:当创建索引时,O ... -
Oracle latch竞争总结(一)
2009-01-07 11:38 2842在Oracle中,Latch的概念是非常重要的,v$l ... -
PX Deq: Execute Reply 案例说明
2009-01-03 09:55 29971 背景:Oracle 数据库在执行sql时,会自动的选择较 ... -
MySQL优化经验——第一讲
2008-12-28 19:41 1350今天突然想起自己 ... -
oracle中对workarea_size_policy和sort_area_size的总结
2008-12-19 12:06 8831在实际的工作中,想必很多人会对SORT_AREA_SIZE和s ... -
Oracle专用服务器与共享服务器的区别
2008-12-19 11:51 3350在建立Oracle数据库的时候,应该会在数据库建立助手向导上面 ... -
CBO学习笔记
2008-12-18 23:09 1395cost of b-tree access 这 ... -
Oracle分析函数RANK()|ROW_NUMBER()|LAG()使用详解
2008-12-16 14:58 3068ROW_NUMBER()的使用方法: ROW_NUMB ... -
index和rowid的一点关系
2008-12-16 14:18 1461相信很多朋友在rowid和index之间都会有些疑问,今天在w ... -
关于MySQL的查询缓存收
2008-12-13 21:21 1158关于MySQL的查询缓存收 原理 QueryCache(下面简 ... -
oracle 被锁,解锁,阻塞语句
2008-12-12 18:35 2635//查询被锁的表 select A.s ... -
通过Oracle10g的FLASHBACK_TRANSACTION_QUERY指定事务的历史信息
2008-12-12 13:05 3138在数据库操作中,我们经常会遇到余下情况: 1.莫名其妙数据被D ... -
对于Oracle中DML使用UNDO的一些看法
2008-12-11 17:53 1217insert操作回滚段中只记录这些记录的ROWID updat ... -
oracle中x$ksppi和x$ksppcv详解
2008-12-09 17:22 3351SQL> desc x$ksppi 名称 ... -
ORA-600 [2103]错误及CF enqueue竞争
2008-12-09 17:21 1200昨天,客户的一套Oracle 10.2.0.3 RAC环境遇到 ... -
Oracle的redo 和undo的区别
2008-12-05 15:26 2583redo--> undo-->datafile i ... -
从 v$session 视图获取客户端 IP 地址
2008-11-18 19:42 2614缺省从 v$session 中不能直接获得客户端 IP ... -
oracle中聚合函数RANK和dense_rank的使用
2008-04-18 17:23 1338聚合函数RANK 和 dense_rank ...
相关推荐
ORACLE 19C SQL调优指南 中文版,很牛逼的文档,Oracle DBA必备
Oracle 19C SQL调优优化指南,全面提升SQL优化能力,DBA必备,开发必备
ORACLE_SQL调优老方块出品,深入讲解了ORACLE原理及常见SQL调优技巧
Oracle Sql性能调优,内部培训文档
Oracle_Database_10g:SQL_Fundamentals中文版
本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的...
oracle 数据库sql调优.doc
thomas_主讲_oracle_调优thomas_主讲_oracle_调优thomas_主讲_oracle_调优thomas_主讲_oracle_调优
oracle高级sql培训和讲解文档,内容都是干货
Oracle_Sql_Pl_Sql_性能优化.doc Oracle_Sql_Pl_Oracle_Sql_Pl_Sql_性能优化.docSql_性能优化.doc Oracle_Sql_Pl_Sql_性能优化.doc
ORACLE执行计划和SQL调优
SQL statement • Monitor the use of shared SQL areas • Write SQL statements to take advantage of shared SQL areas • Understand how to use the CURSOR_SHARING parameter • Use automatic PGA memory ...
Oracle_Database_11g_SQL_-_Master_SQL_and_PLSQL_in_the_Oracle_Database
本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在SQL语句执行的生命...
oracle sql级别调优及书写原则,重点是使用索引及索引覆盖
Oracle_for_redhat_as4.0_cluster_全过程Oracle_for_redhat_as4.0_cluster_全过程
NULL 博文链接:https://zhengfc323.iteye.com/blog/1455767
Oracle+高性能SQL引擎剖析:SQL优化与调优机制详解
深入揭示OracleSQL优化与调优的原理、核心技术与思想方法 盖国强鼎力推荐! Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一...