Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: How many people here rebuid index regularly?
On Oct 8, 1:37 pm, "Jonathan Lewis" <jonat..._at_jlcomp.demon.co.uk>
wrote:
> Since no-one else has volunteered any suggestion, I'd
> be interested in seeing what results you get from
> the code at:http://www.jlcomp.demon.co.uk/index_efficiency.html
>
> Picking just one potentially interesting index, as it does
> a fast full scan with aggregate of all entries.
>
> Code changes needed:
> supply the index name in the 'select from user_objects'
> (which may have to be dba_objects)
>
> Where I have 'column is not null' change the column
> names (and add predicates if necessary) to cover the
> columns in the chosen index.
>
> A note of the number of leaf_blocks in the index (from
> dba_indexes/user_indexes) before and after would also
> be useful, and the block size.
I have a situation where the production schema had a major delete at the end of last year, and has slowly been adding since. When I exp/ imp the schema in question to a test db, the size is a good 20% smaller. I then look at the largest index that OEM tells me has significantly fewer blocks with your program, and I see a much broader distribution of number of rows per index blocks.
>From production:
[snippage]
ROWS_PER_BLOCK BLOCKS
-------------- ----------
113 1877 114 4984 115 3167 116 28250 117 2096 118 4314 119 2301 120 5501 121 2526 122 9402 123 1803 ROWS_PER_BLOCK BLOCKS -------------- ---------- 124 3403 125 1255 126 2421 127 919 128 2528 129 985 130 1775 131 714 132 2354 133 727 134 1589
[snippage of more rows like this]
ROWS_PER_BLOCK BLOCKS
-------------- ----------
sum 172843
176 rows selected.
SQL> select leaf_blocks from user_indexes where index_name='IC_MOVEMENTS_2';
LEAF_BLOCKS
172697
>From test:
ROWS_PER_BLOCK BLOCKS
-------------- ----------
113 1 121 1 131 1 160 1 165 1 188 210 189 2 192 1 193 697 197 1 198 2 ROWS_PER_BLOCK BLOCKS -------------- ---------- 199 52109 200 230 201 288 202 468 203 692 204 2554 205 10419 206 8775 207 3780 208 1040 209 463 ROWS_PER_BLOCK BLOCKS -------------- ---------- 210 32797 211 3 212 3 213 5 214 2 215 5 216 1 217 3012 218 1 219 1 220 1 ROWS_PER_BLOCK BLOCKS -------------- ---------- 223 358 224 1 225 1 227 1 228 1 230 1 231 222 233 1 235 1 ---------- sum 118154
42 rows selected.
SQL> select leaf_blocks from user_indexes where index_name='IC_MOVEMENTS_2';
LEAF_BLOCKS
118334
Therefore, exp/imp must indeed be the answer to life, indices and everything! :-)
The question that is begged: Can-or-should I just compare the leaf_blocks on all indices between production and test and rebuild those with the largest difference? Seems too simple. (Especially since I know if I mention this to this customer they will just want me to exp/imp the whole db, MS-think abounds). I've never felt any need to do anything to these indices, except due to the space issue - between hardware upgrades and such, this is the first time they've gone a couple of years with no maintenance.
jg
-- @home.com is bogus. http://www.signonsandiego.com/uniontrib/20071006/news_1b6halo.htmlReceived on Mon Oct 08 2007 - 17:08:21 CDT