shrink

开发过程中有时会遇到这样的问题:表的数据并不多,但是全表扫描时为什么耗时那么久?这时候你就需要看看HWM的情况了,因为影响全表扫描的一个重要因素就是HWM,每次全表扫描就是扫描HWM以下的数据块。来做个试验:

1. 建个表test,用show_space看数据块的分布情况:可以看到刚刚建立的表数据块还是分布的很结实的

total_blocks: 24576
total_bytes: 201326592
unused_blocks: 869
unused_bytes: 7118848
last_used_extent_file_id: 4
last_used_extent_block_id: 208649
last_used_block: 155
unformatted_blocks: 0
unformatted_bytes: 0
0%-25% block: 0
0%-25% bytes: 0
25%-50% block: 0
25%-50% bytes: 0
50%-75% block: 0
50%-75% bytes: 0
75%-100% blocks: 0
75%-100% bytes: 0
full_blocks: 23508

full_bytes: 192577536

2. delete一半的数据后再看数据块的分布情况:可以看到有空闲空间的数据块明显增多,而总共数据块(HWM)仍然为24576,并没有减少,也就是说,删除数据后全表扫描的性能不会得到优化

total_blocks: 24576
total_bytes: 201326592
unused_blocks: 869
unused_bytes: 7118848
last_used_extent_file_id: 4
last_used_extent_block_id: 208649
last_used_block: 155
unformatted_blocks: 0
unformatted_bytes: 0
0%-25% block: 0
0%-25% bytes: 0
25%-50% block: 169
25%-50% bytes: 169
50%-75% block: 7284
50%-75% bytes: 7284
75%-100% blocks: 5978
75%-100% bytes: 5978
full_blocks: 10077

full_bytes: 82550784

3. 执行shrink后,在再看数据块的分布情况:可以看到数据块又被打结实了,而且总数据块的数据减少为13152,此时全表扫描的性能得到提升!!!!

SQL> alter table test enable row movement;

SQL> alter table test shrink space;

total_blocks: 13152
total_bytes: 107741184
unused_blocks: 2
unused_bytes: 16384
last_used_extent_file_id: 4
last_used_extent_block_id: 197385
last_used_block: 862
unformatted_blocks: 0
unformatted_bytes: 0
0%-25% block: 0
0%-25% bytes: 0
25%-50% block: 1
25%-50% bytes: 1
50%-75% block: 0
50%-75% bytes: 0
75%-100% blocks: 2
75%-100% bytes: 2
full_blocks: 12992

full_bytes: 106430464

所以说提升全表扫描性能的一个好办法就是收缩表的空隙,降低表的高水位线!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值