Oracle 碎片 优化 一例(二)

2014-11-24 18:49:07 · 作者: · 浏览: 1
16ae4 76543210


flag=--------


ntab=1


nrow=29


frre=0


fsbo=0x4c


fseo=0xf7


avsp=0x1f4c


tosp=0x1f4c


0xe:pti[0] nrow=29 offs=0


0x12:pri[0] sfll=1


0x14:pri[1] sfll=2


0x16:pri[2] sfll=3


0x18:pri[3] sfll=4


0x1a:pri[4] sfll=5


0x1c:pri[5] sfll=6


0x1e:pri[6] sfll=7


0x20:pri[7] sfll=8


0x22:pri[8] sfll=9


0x24:pri[9] sfll=10


0x26:pri[10] sfll=11


0x28:pri[11] sfll=12


0x2a:pri[12] sfll=13


0x2c:pri[13] sfll=14


0x2e:pri[14] sfll=15


0x30:pri[15] sfll=16


0x32:pri[16] sfll=17


0x34:pri[17] sfll=18


0x36:pri[18] sfll=19


0x38:pri[19] sfll=20


0x3a:pri[20] sfll=21


0x3c:pri[21] sfll=22


0x3e:pri[22] sfll=23


0x40:pri[23] sfll=24


0x42:pri[24] sfll=25


0x44:pri[25] sfll=26


0x46:pri[26] sfll=27


0x48:pri[27] sfll=28


0x4a:pri[28] sfll=-1


block_row_dump:


end_of_block_dump



里面全部是空块。建议客户做一个ALTER TABLE

MOVE;表重组后,发现原来12G的表只剩下800M了。再执行这个SQL,只有12个BUFFER GET了:




Statistics


----------------------------------------------------------


1 recursive calls


0 db block gets


12 consistent gets


1 physical reads


0 redo size


18921 bytes sent via SQL*Net to client


558 bytes received via SQL*Net from client


8 SQL*Net roundtrips to/from client


老白的这个小例子很简单,但是从这个例子里可以看到优化的一个流程。遇到SQL 的问题,可以做10046 事件,获取详细的信息,通过trace,分析原因,找到原因后,就可以解决问题,这里发现是碎片的问题,通过Move table 后,表从原来的12G 变成了800M,解决了碎片的问题,SQL 的性能得到提高。