Wednesday, June 3, 2009

dbms_space.create_table_cost

bir tablonun ne kadar yer kaplayacağini önceden belirlemek için oraclenin geliştirdiği bir proceduredir.Parametre olarak
avg_row_size The anticipated average row size in the table
colinfos sütünlarınız hakkında bilgi bulunduruyor. Bunun hesaplanması için ayrı bir program var sys.create_table_cost_columns()
row_count Tabloda olmasını tahmin ettiğiniz kayıt sayısı.
pct_free Tablonun her bir “data block”’unda update’ler sonucu oluşan değişiklikler için tutulan alandır.0-99 arası değer alır, varsayılan değeri 10’dur.Yüzde “%” ile ifade edilir.”0” verilirse “data block”’un tamamının “insert” için kullanılacağı anlamına gelir.Bu alanın değerinin seçimi önemlidir.Sık “update” gören bir tabloda 5-10 gibi küçük değerler verilmesi “update” sonucu oluşan yeni verinin başka “data block”lara taşınmasına sebeb olur.Bu da tabloya ulaşımda, sorgularda performans problemine yol açar.
used_bytes The space used by user data
alloc_bytes The size of the object taking into account the tablespace extent characteristics

Örnek olsun diye bir create table kodunu veriyorum. Aslında yaptiğimiz işlem tablonun özelliklerini ve içerisinde tutacağimiz kayıtların sayısını cinsini vererek boyut hesaplaması yapmak.
CREATE TABLE NURULLAH
(
MO_DESTINATION VARCHAR2(50 BYTE),
NETWORK_NAME VARCHAR2(50 BYTE)
)
TABLESPACE USERS
PCTUSED 0
PCTFREE 20
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 160K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

DECLARE
v_used_bytes NUMBER (10);
v_allocated_bytes NUMBER (10);
v_type SYS.create_table_cost_columns;
--sütünlar hakkinda istatistik toplamak için bunu kullaniyoruz.
BEGIN
v_type :=
SYS.create_table_cost_columns
(

SYS.create_table_cost_colinfo ('VARCHAR2',50),
SYS.create_table_cost_colinfo ('VARCHAR2',50)

);
DBMS_SPACE.create_table_cost ('USERS', --tablespacemiz
v_type, --column istatistiğimiz. (avg_row_size yerine bunu koyduk.)
13710428, --tahmini kayıt sayısı
10, --PCT_FREE değerimiz.
v_used_bytes,
v_allocated_bytes
);


DBMS_OUTPUT.put_line ('Used Bytes: ' || TO_CHAR (v_used_bytes));
DBMS_OUTPUT.put_line ('Allocated Bytes: ' || TO_CHAR (v_allocated_bytes));
END;

kaynaklar http://www.ceturk.net/etiket/oracleda-pctfree/
http://www.oracle.com/technology/pub/articles/10gdba/week15_10gdba.html
http://www.psoug.org/reference/dbms_space.html
http://www.dba-oracle.com/t_dbms_space_create_table_cost.htm

No comments: