|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
客户还是可以使用DBaaS系统所能提供的所有能力。数据库云服务消除了组织对专职人员、本地数据库存储设备的需要。他们不必安装、配置和维护任何软硬件。oracle
Oracle10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ
TomKyte的旧书EffectiveOraclebyDesign的第6章GettingtheMostOutoftheCost-BasedOptimizer中先容了参数OPTIMIZER_INDEX_COST_ADJ,并以为能够了解为Oracle实行多块(MultiBlock)I/O(好比全表扫描)的价值与实行单块(Single-block)I/O价值的绝对比例。Tom指出,9i下该参数缺省值为100,意即两者具有不异的价值,若减小,则CBO偏向于利用索引(即单块I/O),反之则偏向于全表扫描(多块I/O)。Tom一样给出了一个不错的例子。
在本人的手提上实验了一下,硬盘巨细缘故原由,只装了一个Oracle10g(10.1.0.2),谁知就发明该参数在10g下取值产生了改动。我们先来看一下参照Tom的实行:
A.创立数据表。
SQL>droptablet1;
表已删除。
SQL>droptablet2;
表已删除。
SQL>createtablet1
2as
3selectmod(rownum,1000)id,rpad(x,300,x)data
4fromall_objects
5whererownum<=5000;
表已创立。
SQL>ed
已写进fileafiedt.buf
1createtablet2
2as
3selectrownumid,rpad(x,300,x)data
4fromall_objects
5*whererownum<=1000
SQL>/
表已创立。
B.创立索引并剖析。
SQL>createindexidx_t1ont1(id);
索引已创立。
SQL>createindexidx_t2ont2(id);
索引已创立。
SQL>ed
已写进fileafiedt.buf
1begin
2dbms_stats.gather_table_stats
3(user,T1,method_opt=>forallindexedcolumns,cascade=>true);
4dbms_stats.gather_table_stats
5(user,T2,method_opt=>forallindexedcolumns,cascade=>true);
6*end;
SQL>/
PL/SQL历程已乐成完成。
C.查询缺省值,并设置好情况。
SQL>setautotoff
SQL>showparametersoptimizer_index_cost_adj;
NAMETYPEVALUE
-----------------------------------------------------------------------------
optimizer_index_cost_adjinteger100
SQL>setautottraceonlyexpstat;
D.在缺省值下查询的了局。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=13Card=5Bytes=1000
)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=2Card
=1Bytes=100)
21NESTEDLOOPS(Cost=13Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=3
Card=5Bytes=500)
43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)
52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)
统计信息
----------------------------------------------------------
367recursivecalls
0dbblockgets
101consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
12sorts(memory)
0sorts(disk)
30rowsprocessed
E.修正参数值,注重,援用Tom的结论,9i中这个值在0-100之间,而10g呢?
SQL>altersessionsetoptimizer_index_cost_adj=0;
ERROR:
ORA-00068:值0对参数optimizer_index_cost_adj有效,必需在1和10000之间
SQL>altersessionsetoptimizer_index_cost_adj=1;
会话已变动。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=2Card=5Bytes=1000)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=1Card
=1Bytes=100)
21NESTEDLOOPS(Cost=2Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=1
Card=5Bytes=500)
43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)
52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed
SQL>altersessionsetoptimizer_index_cost_adj=50;
会话已变动。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=7Card=5Bytes=1000)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=1Card
=1Bytes=100)
21NESTEDLOOPS(Cost=7Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=2
Card=5Bytes=500)
43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)
52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed
F.持续修正参数值,改年夜。
SQL>altersessionsetoptimizer_index_cost_adj=200;
会话已变动。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=26Card=5Bytes=1000
)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=4Card
=1Bytes=100)
21NESTEDLOOPS(Cost=26Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=6
Card=5Bytes=500)
43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)
52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed
SQL>altersessionsetoptimizer_index_cost_adj=500;
会话已变动。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=63Card=5Bytes=1000
)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=10Car
d=1Bytes=100)
21NESTEDLOOPS(Cost=63Card=5Bytes=1000)
32TABLEACCESS(FULL)OFT2(TABLE)(Cost=13Card=5By
tes=500)
42INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
90consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed
SQL>altersessionsetoptimizer_index_cost_adj=1000;
会话已变动。
SQL>ed
已写进fileafiedt.buf
1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/
已选择30行。
实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=66Card=5Bytes=1000
)
10HASHJOIN(Cost=66Card=5Bytes=1000)
21TABLEACCESS(FULL)OFT2(TABLE)(Cost=13Card=5Byte
s=500)
31TABLEACCESS(FULL)OFT1(TABLE)(Cost=52Card=26Byt
es=2600)
统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
271consistentgets
213physicalreads 解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。 |
|