Pojok Oracle buletin edisi 17 April 2006
---------------------------------
Do you Yahoo!?
Yahoo! Movies - Search movie info and celeb profiles and photos.
---------------------------------
Do you Yahoo!?
New and Improved Yahoo! Mail - 1GB free storage!
----------
*********************************************************************************************
POJOK ORACLE
Edisi 17 April 2006
Redaksi Erick di [EMAIL PROTECTED]
*********************************************************************************************
Perencanaan Kapasitas
Perencanaan kapasitas meliputi dua tujuan utama
->Berapa banyak kapasitas penyimpanan yang telah terisi
->Berapa besar pertumbuhan data
Peralatan dan metode yang dapat digunakan untuk merencanakan kapasitas di
batasi oleh dua hal, yaitu:
->Seberapa akurat hasil perhitungan
->Dampaknya pada performance
Metoda yang tidak akurat
->Menghitung kapasitas yang telah digunakan berdasarkan besarnya datafile dari
operating system (Datafile size).
Metoda yang akurat, tetapi hasilnya tidak bisa dipercaya karena sangat erat
kaitannya dengan pengorganisasian system
penyimpanan fisik (physical storage)
->Menghitung isi dari data file dengan menggabungkan informasi performance view
dari DBA_DATA_FILES dengan
DBA_FREE_SPACE (datafile content sizes).
Metoda yang tingkat keakuratannya tinggi, tetapi sangat tergantung block usage
parameter atau berapa banyak block yang
secara partial telah terisi.
->DBMS_SPACE
Metoda yang tingkat keakuratannya tinggi, tetapi mempengaruhi performance
->Statistics, semakin tinggi tingkat keakuratan yang kita inginkan, maka
semakin tinggi pula pengaruhnya pada performance.
Perlu di perhatikan bahwa pada versi Oracle lama masih menggunakan rule
based optimizer dari pada cost based
optimizer.
Pergunakan parameter OPTIMIZER_MODE untuk menghindari masalah ini.
->Mengukur panjang data, data yang tersimpan dalam database diukur dengan
menggunakan besarnya parameter dalam
tipe data pada masing-masing tabel di kali banyak baris data. Kesulitan
dengan menggunakan metoda ini adalah pada
tipe data variabel seperti varchar2. Metoda ini merupaka metoda yang paling
akurat untuk database dengan
menggunakan database relasional yang utuh (pure).
->Oracle Enterprise Manager Capacity Planner Package.
Metoda Datafile sizes
Pada metoda ini pengukuran dilakukan secara langsung dari operating system
dengan menggunakan sintak dir pada
windows, df k pada solaris atau dengan skrip perl.
Metoda Datafile content sizes
Skrip untuk mendapatkan nilai kapasitas yang telah terisi adalah sebagai
berikut:
spool ./logs/tablespace.log;
SELECT 'Tablespace '||df.tablespace_name "TBS"
,round((sum(nvl(fs.bytes,0))/ (df.bytes)) * 100) "%Free"
,round(((df.bytes - sum(nvl(fs.bytes,0))) / (df.bytes) ) * 100) "%Used"
,round(sum(nvl(fs.bytes/1024/1024,0))) "Mb Free"
,round(df.bytes/1024/1024 - sum(nvl(fs.bytes/1024/1024,0))) "Mb Used"
,df.autoextensible "AutoExtensible"
FROM dba_free_space fs, dba_data_files df
WHERE fs.file_id(+) = df.file_id
GROUP BY df.tablespace_name, df.file_id, df.bytes, df.autoextensible
ORDER BY df.file_id;
spool off;
Metoda DBMS_SPACE
DBMS_SPACE merupakan package dari oracle untuk menghitung jumlah total blok
dari setiap database objek, tabel,
index dan cluster.
Skrip dari metoda ini adalah sebagai berikut:
set serveroutput on;
create or replace procedure my_DBMS_SPACE (powner in varchar2) as
cursor cOBJECTS is
select decode(partitioned,'NO','TABLE','YES','TABLE PARTITION')
as type,table_name as name from dba_tables where owner = powner
UNION
select decode(partitioned,'NO','INDEX','YES','TABLE PARTITION')
as type,index_name as name from dba_indexes where owner = powner
UNION
select 'CLUSTER' as type,cluster_name as name from dba_clusters where owner =
powner;
total_blocks NUMBER;
total_bytes NUMBER;
unused_blocks NUMBER;
unused_bytes NUMBER;
lastextf NUMBER;
lastextb NUMBER;
lastusedblock NUMBER;
used_blocks integer default 0;
free_blocks integer default 0;
begin
for objs in cOBJECTS loop
dbms_space.unused_space(
powner
,objs.name
,objs.type
,total_blocks
,total_bytes
,unused_blocks
,unused_bytes
,lastextf
,lastextb
,lastusedblock);
used_blocks := used_blocks + total_blocks;
free_blocks := free_blocks + unused_blocks;
end loop;
dbms_output.put_line('Used = '||to_char(used_blocks)||', Free =
'||to_char(free_blocks));
exception when others then
dbms_output.put_line('test '||sqlerrm(sqlcode));
end;
/
exec my_dbms_space;
Metoda Statistics
Ada dua cara untuk menggunakan metoda statistics, yaitu:
->Menggunakan perintah ANALYZE.
->Menggunakan DBMS_STATS package.
Perintah ANALYZE
Sintaknya adalah sebagai berikut:
ANALYZE table_name COMPUTE STATISTICS;
Cara ini lebih efisien tetapi kurang begitu akurat karena perintah ini
memerintahkan oracle untuk melakukan sampling
1064 baris dari tabel yang di tentukan.
Sintak perintah ANALYZE yang memperhitungkan persentase dari jumlah baris
adalah sebagai berikut:
ANALYZE table_name ESTIMATE STATISTICS [SAMPLE {1-99% | rows];
DBMS_STATS package
Sintak untuk menjalankan DBMS_STATS yang berhubungan dengan perencanaan
kapasitas adalah sebegai berikut:
EXEC DBMS_STATS.GATHER_TABLE_STATS(owner,table_name);
EXEC DBMS_STATS.GATHER_INDEX_STATS(owner,index_name);
Skrip untuk menghitung total kapasitas terpakai dari tabel dan index dalam satu
schema adalah sebagai berikut:
set termout off echo off feed off trimspool on head off pages 0 timing off;
spool ./log/statistics.log;
select 'exec dbms_stats.gather_table_stats(''ACCOUNTS'','''||table_name||''');'
from user_tables;
select 'exec dbms_stats.gather_index_stats(''ACCOUNTS'','''||index_name||''');'
from user_indexes;
spool off;
set termout on timing off;
@@./log/statistics.log;
SELECT SUM((t.BLOCKS+SUM(i.LEAF_BLOCKS/DECODE(i.BLEVEL,0,1,i.BLEVEL))))*8192
AS BYTES
,ROUND(SUM((t.BLOCKS+SUM(i.LEAF_BLOCKS/DECODE(i.BLEVEL,0,1,i.BLEVEL)))
*8192/1024/1024)) AS MB
,ROUND(SUM((t.BLOCKS+SUM(i.LEAF_BLOCKS/DECODE(i.BLEVEL,0,1,i.BLEVEL)))
*8192/1024/1024/1024),1) AS GB
FROM USER_TABLES t, USER_INDEXES i
WHERE t.TABLE_NAME = i.TABLE_NAME
GROUP BY t.TABLE_NAME,t.BLOCKS;
exit;
Metoda mengukur panjang data dari masing-masing table.
Ilustrasi dari metoda ini adalah sebagai berikut:
Membuat table dengan skrip sebagai berikut:
CREATE TABLE ATABLE(
rnum INTEGER,
vc1 VARCHAR2(4000) DEFAULT '0123456789',
vc2 VARCHAR2(4000) DEFAULT '012',
c1 CHAR(2) DEFAULT 'ab',
c2 CHAR(10) DEFAULT 'abc',
n1 NUMBER DEFAULT 100,
n2 NUMBER(10) DEFAULT 101,
n3 NUMBER(12,4) DEFAULT 103.1234,
f1 FLOAT DEFAULT 1.23334,
si1 SMALLINT DEFAULT 0,
si2 SMALLINT DEFAULT 100,
i1 INTEGER DEFAULT 0,
i2 INTEGER DEFAULT 222,
d1 DATE DEFAULT SYSDATE,
t1 TIMESTAMP DEFAULT SYSDATE
);
INSERT INTO ATABLE(rnum) VALUES(1);
COMMIT;
Kemudian lakukan query dengan skrip sebagai berikut:
SELECT DATA_LENGTH AS Length, DATA_PRECISION AS Precision, DATA_SCALE AS Scale,
COLUMN_NAME|| , ||DATA_TYPE AS Field FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = ATABLE;
Jumlahkan nilai yang ada pada kolom length dan kalikan dengan jumlah baris
(row) pada setiap table, maka akan
di peroleh nilai kapasitas terpakai dari tabel. Lakukan hal yang sama untuk
setiap tabel dan jumlahkan semua sehingga
diperoleh nilai total.
Semoga bermanfaat.
[Non-text portions of this message have been removed]
--
-----------I.N.D.O - O.R.A.C.L.E---------------
Keluar: [EMAIL PROTECTED]
Website: http://indo-oracle.lizt.org (NEW)
-----------------------------------------------
Bergabung dengan Indonesia Thin Client User Groups,
Terminal Server, Citrix, New Moon Caneveral, di:
http://indo-thin.vze.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/indo-oracle/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/