Home / MAKALELER / Veri Tabanı / Oracle Veritabanında İnsert İşlemini Hızlandırma

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

Oracle Veritabanında İnsert İşlemini Hızlandırmak için yapılabilecekler

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 set 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.

About Erkan Gunes

1987 Ankara doğumluyum. Ufuk üniversitesi istatistik bölümü mezunuyum.2011 yılından bu yana Ankara da büyük ve orta ölçekli projelerde iş zekası ve veri ambarı uzmanı olarak çalışmaktayım. Ayrıca oracle veritabanı yöneticiliği eğitimi aldım ve OCA sertifikasına sahibim. Ayrıntılı bilgi için http://www.linkedin.com/pub/erkan-gunes/34/b7a/a38

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın