dear andes,
mungkin sample berikut ini bisa membantu??

==> buat table partisi :)

create table th (id number, modd number, padding varchar2(40), rrnum number)
tablespace ts1 partition by hash(id) partitions 4
store in (ts1,ts2);

==> isi data
kolom id = unik
kilom modd = mendekati unik

declare
r pls_integer;
strnd varchar2(12);
begin
for i in 1..2000 loop
r := round(dbms_random.value(1,99999999),0);
strnd := dbms_random.string('A',12);
insert into th values(i,r+5,strnd,r/12);
end loop;
commit;
end;
/

create index idx_th1 on th(modd) compute statistics;

==> gather statistics, buat histogram semua kolom
    dgn bucket size 1 (frequency histogram).

begin
dbms_stats.gather_table_stats(
OWNNAME                        => 'SCOTT',
TABNAME                        => 'TH',
METHOD_OPT                     => 'for columns MODD size 1',
CASCADE                        => true);
end;
/

==> expected result...

select * from th where modd=900;

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


| Id  | Operation                          | Name    | Rows  | Bytes | Cost
(%CPU)| Time     | Pstart| Pstop |

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


|   0 | SELECT STATEMENT                   |         |     1 |    36 |     2
  (0)| 00:00:01 |       |       |

|   1 |  TABLE ACCESS BY GLOBAL INDEX ROWID| TH      |     1 |    36 |     2
  (0)| 00:00:01 | ROWID | ROWID |

|*  2 |   INDEX RANGE SCAN                 | IDX_TH1 |     1 |       |     1
  (0)| 00:00:01 |       |       |

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




==> modd=1 yg asalnya ada 109 record, ganti ke 10 sehingga
modd=1 tinggal 9.

update th set modd=10 where modd=1 and rownum<=100;

begin
dbms_stats.gather_table_stats(
OWNNAME                        => 'SCOTT',
TABNAME                        => 'TH',
METHOD_OPT                     => 'for columns MODD size 1',
CASCADE                        => true);
end;
/

==> dengan bucket yg kurang tepat,
  even ada index, tapi ndak kepake
karena berasumsi bahwa

  1* select column_name,endpoint_number,
endpoint_value,endpoint_actual_value from user_histograms where
table_name='TH'
SQL> /

COLUMN_NAM ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALU
---------- --------------- -------------- --------------------
MODD                     0              1
MODD                     1             10

==> dari informasi histogram ini,
oracle berasumsi bahwa modd=1 adalah
(2000/10)=200
200/2000 = 10%
oracle berasumsi gak efisien dgn scanning index karena >5%


select * from th where modd=1;

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


| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
Pstart| Pstop |

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


|   0 | SELECT STATEMENT   |      |   200 |  7200 |     5   (0)| 00:00:01 |
      |       |

|   1 |  PARTITION HASH ALL|      |   200 |  7200 |     5   (0)| 00:00:01 |
    1 |     4 |

|*  2 |   TABLE ACCESS FULL| TH   |   200 |  7200 |     5   (0)| 00:00:01 |
    1 |     4 |

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




begin
dbms_stats.gather_table_stats(
OWNNAME                        => 'SCOTT',
TABNAME                        => 'TH',
METHOD_OPT                     => 'for columns MODD size 10',
CASCADE                        => true);
end;
/

SQL> select column_name,endpoint_number,
endpoint_value,endpoint_actual_value from user_histograms where
table_name='TH';

COLUMN_NAM ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALU
---------- --------------- -------------- --------------------
MODD                   228              2
MODD                   442              3
MODD                   689              4
MODD                   886              5
MODD                  1115              6
MODD                  1347              7
MODD                  1572              8
MODD                  1789              9
MODD                  2000             10
MODD                     9              1

==> disini oracle tau distribusi data
 karena informasi dari histogram secara akurat tahu
bahwa modd=1 cuman berisi 9 rows saja,
makanya akan lebih baik menggunakan index.

select * from th where modd=1;

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


| Id  | Operation                          | Name    | Rows  | Bytes | Cost
(%CPU)| Time     | Pstart| Pstop |

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


|   0 | SELECT STATEMENT                   |         |     9 |   324 |     2
  (0)| 00:00:01 |       |       |

|   1 |  TABLE ACCESS BY GLOBAL INDEX ROWID| TH      |     9 |   324 |     2
  (0)| 00:00:01 | ROWID | ROWID |

|*  2 |   INDEX RANGE SCAN                 | IDX_TH1 |     9 |       |     1
  (0)| 00:00:01 |       |       |

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



select * from th where modd=10;

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


| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
Pstart| Pstop |

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


|   0 | SELECT STATEMENT   |      |   211 |  7596 |     5   (0)| 00:00:01 |
      |       |

|   1 |  PARTITION HASH ALL|      |   211 |  7596 |     5   (0)| 00:00:01 |
    1 |     4 |

|*  2 |   TABLE ACCESS FULL| TH   |   211 |  7596 |     5   (0)| 00:00:01 |
    1 |     4 |

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




-- 
best regards
Oracle DBA
http://www.dbs247.com
http://blog.dbs247.com


2009/4/20 Andes Febrian <[email protected]>

> pak bw, gimana cara mastikan statistics dan histogram itu sudah di update ?
>
> kemudian, apa syntax untuk statistics dan histogram ini ?
>
> apa dgn update statistics dan histogram pada tabel, akan memberikan hasil
> pada execution plan tersebut ?
>
> Many Thanks
>
> 2009/4/17 Yulius Wibowo <[email protected]>
>
> >
> >
> > Penyebab lain kenapa penggunaan tablespace TEMP di 10g lebih banyak
> > dibandingkan 9i adalah karena "execution plan" yg berbeda.
> >
> > Misal:
> > Ketika SQL statement dijalankan di 9i execution plannya menggunakan
> NESTED
> > LOOP,
> > sedangkan di 10g berubah menjadi SORT MERGE atau HASH ...
> > dan parahnya lagi table yg dipakai utk sortir adalah table yg besar,
> > sehingga penggunaan tablespace TEMP membengkak.
> >
> > Ini disebabkan karena optimizer (optimizer_features_enable) yg dipakai
> > berbeda antara 9i dan 10g.
> >
> > Pastikan statistics dan juga histogram sudah diupdate setelah migrasi.
> >
> > bw
> >
> >
> > --- In [email protected] <indo-oracle%40yahoogroups.com>,
> Andrew
> > Krisna <endru...@...> wrote:
> > >
> > > aloo
> > >
> > > Mau nambahin aja nih.
> > >
> > > Seabis kamu upgrade apakah sudah di monitor penggunaan memory nya?
> Biasa
> > sorting akan lari ke TEMP tablespace jika memory untuk sorting tidak
> > cukup(bisa check "pga_aggregate_target" parameter).
> > > Nah kalo TEMP tablespace ini memang sih sebaiknya tidak dibikin
> > autoextend unlimited, tp inget juga kalo tidak cukup dan perlu space maka
> > user yang udah jalanin reporting lama2 bisa gagal gara2 space nya gak
> cukup
> > :) alhasil user telpon DBAnya trus ngamuk2 :)
> > >
> > > Untuk itu kudu dimonitor query2 yg memerlukan sorting besar, dan karena
> > ini skrg pake 10g, bisa dibilang pemakain memorynya lebih boros sedikit.
> So
> > jangan malu2 digedein sedikit2 parameternya "pga_aggregate_target" dan
> > dimonitor performance nya.
> > >
> > >
> > >
> > > cheers,
> > >
> > >
> > > Andrew
> > >
> > >
> > >
> > >
> > > ________________________________
> > > From: Martin <mar...@...>
> > > To: [email protected] <indo-oracle%40yahoogroups.com>
> > > Sent: Wednesday, 15 April 2009 3:48:56
> > > Subject: [indo-oracle] temp di 10 g
> > >
> > >
> > >
> > >
> > >
> > > suhu tanya dong
> > >
> > > kenapa setelah upgrade dari 9i ke 10 G penggunaan table space temporary
> > > meningkat tajam.
> > >
> > > di 9i --> 3 Gb di 10g sudah sampai ke 17 G
> > >
> > > ask
> > > 1. kira-kira apa yang perlu saya cek dan setup ulang yah
> > > 2. Apa sih yang menggunakan temp sampai segitu banyak
> > > - Run report dari oracle dev 6i ( analisa saya saat ini )
> > > - ........
> > >
> > > salam
> > >
> > > martin
> > >
> > >
> > >
> > >
> > >
> > > New Email names for you!
> > > Get the Email name you&#39;ve always wanted on the new @ymail and
> > @rocketmail.
> > > Hurry before someone else does!
> > > http://mail.promotions.yahoo.com/newdomains/sg/
> > >
> > > [Non-text portions of this message have been removed]
> > >
> >
> >
> >
>
>
>
> --
> Cheers,
> ^_^ Andes ^_^
>
>
> [Non-text portions of this message have been removed]
>
>
>
> ------------------------------------
>
> --
> -----------I.N.D.O - O.R.A.C.L.E---------------
> Keluar: [email protected]
> Website: http://indooracle.wordpress.com
> http://www.facebook.com/group.php?gid=51973053515
> -----------------------------------------------
>
> Bergabung dengan Indonesia Thin Client User Groups,
> Terminal Server, Citrix, New Moon Caneveral, di:
> http://indo-thin.blogspot.comYahoo! Groups Links
>
>
>
>


[Non-text portions of this message have been removed]

Kirim email ke