7 Haziran 2012 Perşembe

[TR] Tablo Büyüme Boyut Tahmini


Bir tablonun zamanla ne kadar büyüyeceği aşağıdaki adım ve formüller kullanılarak tahmin edilebilir. Tahmin, tabloya zaman içerisinde düzenli veri yüklenmesi durumunda geçerlidir. Yani belli aralıklarda tabloya daha az yada daha yoğun veri yüklenmesi durumunda tahmin tutarsız olacaktır. Büyüme tahmini, aynı zamanda Enterprise Manager üzerinden de yapılabilir.



---------
--- 1 ---
---------

--Örnek bir tablo yaratılır.

create table SEMAXXX.deneme as select * from dba_tables where 1=2;

---------
--- 2 ---
---------

--İçine bir miktar veri yüklenir.

insert into SEMAXXX.deneme select * from dba_tables;
insert into SEMAXXX.deneme select * from dba_tables;
insert into SEMAXXX.deneme select * from dba_tables;
insert into SEMAXXX.deneme select * from dba_tables;
insert into SEMAXXX.deneme select * from dba_tables;
commit;

---------
--- 3 ---
---------

-- Tercihen compute olarak tablonun istatistikleri toplanır.

begin
DBMS_STATS.GATHER_TABLE_STATS (
   ownname=> 'SEMAXXX',
   tabname=> 'deneme',
   estimate_percent=> NULL,        
   method_opt=> 'FOR ALL COLUMNS SIZE AUTO',
   degree=> 1,                          
   granularity=> 'ALL',                
   cascade=> TRUE);                          
end;

---------
--- 4 ---
---------

-- Tablonun toplam blok sayısı öğrenilir.

select sum(blocks) from dba_extents where owner='SEMAXXX' and segment_name = 'DENEME'  and segment_type = 'TABLE';

SUM(BLOCKS)
-----------
        40
1 row selected.

---------
--- 5 ---
---------

-- İstatistiki olarak satır sayısı ve blok sayısı öğrenilir. Eksik 1 blok sistem tarafından kullanılıyor.

select num_rows, blocks, empty_blocks, avg_space from dba_tables where owner='SEMAXXX' and table_name = 'DENEME';

 NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_SPACE
---------- ---------- ------------ ---------
     2927         39            0         0
1 row selected.

---------
--- 6 ---
---------

-- DB'nin blok size'ı öğrenilir.

select name,value/1024 from v$parameter where name = 'db_block_size';

NAME                                                             VALUE/1024
---------------------------------------------------------------- ----------
db_block_size                                                            16
1 row selected.

---------
--- 7 ---
---------

-- Tablodaki kullanıcı verisinin toplam boyutunu aşağıdaki formülle hesaplarız.

[(BLOCKS - EMPTY_BLOCKS) * 16k ] - [(BLOCKS - EMPTY_BLOCKS) * AVG_SPACE k ]
[(39 - 0) * 16k ] - [(39 - 0) * 0 k ] = 624k

---------
--- 8 ---
---------

-- 2927 satırlık toplam boyutu 624k olan bu veri 1 günlük veri ise ve kullanıcı bizden 1 senelik büyüme tahmini istemişse,
-- aşağıdaki formülle tablonun 1 sene sonraki boyutunu hesaplarız. Tabi tüm bu tahminler tablonun büyümü hızı doğrusal ise
-- geçerlidir aksi halde sapma olur.

624k * 30 * 12 = 224640k = ~219m

Hiç yorum yok:

Yorum Gönder