CBO学习---第2章--表扫描(Tablescans)(五)
start',是记录下v$filestat(实际上是X$开头的基表)和v$sysstat表的初始信息。
'stop',再次记录上面两个表的信息,然后通过相隔的时间,计算所需的系统统计参数。
[sql]
select
pname, pval1
from
sys.aux_stats$
where
sname = 'SYSSTATS_MAIN';
[sql]
PNAME PVAL1
----------- ----------
CPUSPEED 559
SREADTIM 1.299
MREADTIM 10.204
MBRC 6
MAXTHR 13938448
SLAVETHR 244736
本章代码附件中:
[sql]
set_system_stats.sql
[sql]
begin
dbms_stats.set_system_stats('MBRC',12);
dbms_stats.set_system_stats('MREADTIM',30);
dbms_stats.set_system_stats('SREADTIM',5);
dbms_stats.set_system_stats('CPUSPEED',500);
end;
/
[sql]
--MBRC,典型多块读取12个块。
--MREADTIM,平均多块读取时间30ms
--SREADTIM,平均单块读取时间5ms
--CPUSPEED,CPU频率500MHz=500 000 000 Hz
[sql]
alter system flush shared_pool;
--刷新shared_pool,清理游标,清理软分析
MAXTHR和SLAVETHR与并行执行有关,这两个值可控制最大并行度。这两个值可设置为-1。如果其他4个值的任何一个设置为-1,都不会调用cpu_costing。(有待验证)
在10g中,系统统计有两组,一组为nowordload,另一组为wordload。如果wordload不正确,则会回头实用nowordload
/**************************************************************************************************************************************/
本章代码附件中:
[sql]
tablescan_02.sql
Oracle9i中,开启workload,Cost不再随db_file_multiblock_read_count值的变化而变化
[sql]
alter session set "_optimizer_cost_model"=choose;
--注意:"_optimizer_cost_model"=io;是会关闭workload的参数参与计算的。
@tablescan_02
db_file_multiblock_read_count = 4
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5031 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=5031 Card=10000 Bytes=40000)
db_file_multiblock_read_count = 8
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5031 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=5031 Card=10000 Bytes=40000)
db_file_multiblock_read_count = 16
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5031 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=5031 Card=10000 Bytes=40000)
db_file_multiblock_read_count = 32
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5032 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=5032 Card=10000 Bytes=40000)
db_file_multiblock_read_count = 64
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5032 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=5032 Card=10000 Bytes=40000)
db_file_multiblock_read_count = 128
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5032 Card=1 Bytes=4)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1'