CBO学习---第2章--表扫描(Tablescans)(一)

2014-11-24 16:41:46 · 作者: · 浏览: 8
CBO学习---第2章--表扫描(Tablescans)
CBO的4种策略:
(1)传统策略:IO次数 (oracle7)
(2)SS1= IOST --系统统计(system statistics,针对操作系统的统计信息)1;IO的大小和时间 (oracle8i)
(3)SS2=IOST+CPU--增加了CPU Costing(oracle9i)
(4)SS3=IOST+CPU+Cache--增加了缓存的说明(oracle10g)
Oracle7是传统策略,后面版本陆续增加CBO功能,Oracle9i引入CPU,10g进一步加强。SS2是normal变体。
隐藏参数“_optimizer_cost_model=io”,使优化器处于SS1,不计算CPU等,即使有workload参数,也不会用其参与计算
/**************************************************************************************************************************************/
2.1Getting Started
查看执行计划的方法:
本书提供的方法:
在本章的代码附件中,存在下面两个脚本
[sql]
plan_run81.sql
plan_run92.sql
运行该脚本之前,在相对路径下建立一个名为target.sql的文件,在该文件中,写下需要查看执行计划的SQL语句。并在SQLplus中运行该脚本,如:
[sql]
SQL> @plan_run81
STATE_ID
----------
110004
Id Par Pos Ins Plan
---- ---- ---- ---- ---------------------------------------------------------
0 3 SELECT STATEMENT (all_rows) Cost (3,14,1218)
1 0 1 1 TABLE ACCESS TABLE SCOTT EMP (full) Cost (3,14,1218)
Output file is 110004.lst
--则会打出相应的执行计划,并输出于110004.lst文件中。
SQL> @plan_run92
会话已更改。
STATE_ID
----------
110004
已选择 1 行。
已解释。
Id Par Pos Ins Plan
---- ---- ---- ---- -----------------------------------------------------------------------------------
0 3 SELECT STATEMENT (all_rows) Old Cost (3,14,1218) New Cost (3,39667,0)
1 0 1 1 TABLE ACCESS TABLE SCOTT EMP (full) Old Cost (3,14,1218) New Cost (3,39667,0)
Output file is 110004.lst
--其中New Cost (3,39667,0),括号中第二个值是CPU操作次数,第3个值是tempspace占用字节
注意:要及时了解Oracle的最新发展情况,就必须密切关注dbmsutl.sql和dbms_xplan包。(有机会做的对比专题)
/**************************************************************************************************************************************/
最常用方法:sqlplus的自动追踪
[sql]
SQL> set autot trace exp
SQL> select * from emp;
执行计划
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 1218 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 1218 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
/**************************************************************************************************************************************/
本书示例最初环境如下:
(1)db_block_size=8192
(2)db_file_multiblock_read_count=8
(3)本地管理的表空间
(4)统一extent大小1MB
(5)freelist的块管理
(6)optimizer_mode=ALL_ROWS)
(7)cpu_costing最初禁用(alter session set "_optimizer_cost_model"=io;)
/**************************************************************************************************************************************/
本章代码附件中:
[sql]
tablescan_01.sql
通过pctf