Oracle Veritabanında Insert İşlemini Hızlandırma

Oracle veritabanına yüksek miktarlarda veri insert ederken veritabanı loglarını tuttuğu için bu işlem çok hızlı gerçekleşmeyebilir. Biz de bu konuda bu işlemin hızlandırılması için atılabilecek adımları göreceğiz.

Öncelikle insert edebilmek için “tbl_bidunyasi” isimli bir tablo yarattım. Verisini de all_objects view’unu tekrar tekrar insert ederek 4.448.248 satırlık bir tablo oluşturdum.Daha sonra bu oluşturduğum tablodaki veriyi insert edeceğim, aynı kolonlara ve veri tipine sahip bir boş tablo yaratıyorum .

 create table tbl_bidunyasi2 as

select * from tbl_bidunyasi where 1=0

Şimdi autotrace’in statistics özelliğini devreye sokarak ne kadar redo üretildiğini göreli

m. SQL Plus’ın timing özelliğini de devreye sokarak insert edilme zamanı hakkında fikir sahibi olalım.

Görsel

4.448.248 satır eklendi. 494093144 byte redo üretildi. Yaklaşık 471 MB. Süre olarak da SQL Plus timing özelliği 7saniye 68 salise gösteriyor.

APPEND hint’ini eklediğimizde tabloya insert ederken tablonun içindeki boş yerleri arayıp oralara insert etmekle uğraşmaz. Direk olarak HWM(High Water Mark)’ı yükselterek ekler, dolayısıyla yer aramadığı için daha hızlı insert eder. Şimdi APPEND hint’ini kullanarak sürenin ne kadar değişeceğini göreceğiz. Bunun için daha önce yarattığımız tbl_bidunyasi2 ile aynı yapıda tbl_bidunyasi_append adında tablo yaratalım.

create table tbl_bidunyasi_append as

select * from tbl_bidunyasi where 1=0

.Görsel

4.448.248 satır eklendi    107512 byte redo üretildi, yaklaşık 0.82mb. Süre olarak da SQL Plus timing’i 4 saniye 03 salise gösteriyor.

APPEND hint’i üretilen UNDO miktarını azalttığı için üretilen redo miktarını da azaltıyor. Tablonun UNDO dışında üretilen redo miktarını da tabloyu NOLOGGING moduna koyarak biraz daha azaltabiliriz

create table tbl_bidunyasi_nolog as

select * from all_objects where 1=0

şeklinde tabloyu yarattıktan sonar tabloyu nologging moduna alıyoruz.

SQL> alter table tbl_bidunyasi_nolog nologging;

dedikten sonra ;

Görsel

4.448.248  satır eklendi. 104364 byte redo üretildi, yaklaşık 0.79MB. Süre olarak da SQL Plus timing’i 3saniye 24 salise gösteriyor.

Ama tabloya NOLOGGING modunda insert edildiği zaman redo bilgisi tutamadığı için herhangi bir çökme durumunda tablonun verisini geri getiremeyiz. Dolayısıyla nologging modunda insert edildikten sonra sağlıklı bir şekilde yedek alınana kadar tablodaki verilerimiz güvende değildir.

Not: APPEND hint’i sadece direct-load insert’lerde işe yarar. Yani insert into tablo_adı select diye devam eden SQL’lerde kullanılır. insert into tablo_adı values diye devam ediyorsa append hint’i işe yaramaz.

Bu yazı Pure SQL / PLSQL, sql, Veri Ambarı, Veri Tabanı, İş Zekası içinde yayınlandı ve , , , , , , , , , , , , , , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

3 Responses to Oracle Veritabanında Insert İşlemini Hızlandırma

  1. Halil dedi ki:

    Merhaba Erkan Bey, bir sorum olacak, bildiğiniz gibi Golden Gate gibi replikasyon araçları redologları kullanmakta eğer append özelliğini açarsak bu ürünler bu işlemden etkilenir mi ?

  2. Imtheone dedi ki:

    Alter session enable parallel dml;
    Insert /*+ append parallel (t,8) */ into tbl_bidunyasi_nolog t
    select /*+parallel (s,8) */ * from tbl_bidunyasi s

    Birde buna bakarmisin?

Yorum bırakın