8 Temmuz 2015 Çarşamba

4 Oracle Dersleri 4 Oracle’da High Water Mark Kavramı

Merhabalar 4. dersimiz ile beraberiz. Oracle da High Water Mark kavramından bahsetmeye çalışacağım bu anlatımımda sizlere. 

High Water Mark'ı kısaca data bloğun gösterildiği yer yani pointer olarak düşünebiliriz.Mesela bir tablo oluşturduğumuz zaman kayıt olmadığı için başlangıç bloğu gösterir.İnsert edildikçe high water mark en son data bloğu gösterir.Görsel olarak göstermek gerekirse aşağıdaki örneği gösterebiliriz.





 Peki neden var bu HWM ? Çünkü  Full Table Scan yapan sorgularda oracle şu data bloğa kadar okuma yapacağını HWM ' dan öğereniyor.İnsert edildikçe HWM yükseldiğini arttığını söyledik ama delete işlemi olduğu zaman HWM ' ın yerinin aşağıya inebileceğini düşünebilirsiniz belki . İşte önemli kısım burası delete işlemi olduğu zaman hatta tüm tablodaki data'ları silsek bile HWM ' ın yeri değişmiyor. Tabloya yine Full Table Scan yapan bir sorgu geldiği zaman HWM ' ın olduğu en son data bloğa kadar okuma yapacağı için buda performans yönünden büyük bir zarar olacak tabi milyonlarca data olan büyük tablolarda etkisini çok gösterir.



Bir örnekte inceleyelim durumu ;



Öncelikle bir tablo oluşturalım ;

create table hwm_test as

select from hr.employees;


Sonra count ' unu sorgulayarak çalışma süresini öğrenelim ;


set timing on -- çalışma süresini gösterir

select count(*) from hwm_test;


  COUNT(*)

----------

       107

1 row selected.

Elapsed: 00:00:00.03

Toad ' da canlı olarak gösterelim işaretlediğim yerden yani execute as script yerden çalıştıracağız ;



Şimdi tablomuzo nerdeyse 10000000 ( on milyon ) satır ekleyelim ;

begin

for i in 1 .. 100000

    loop

        insert into hwm_test

        select * from hr.employees;

        commit;

   end loop;

end;

Şimdi tablomuzdaki tüm data'ları silelim ;

delete from hwm_test;


Tüm datalarımı sildikten sonra tekrar count'unu sorgulayarak çalışma süresine bakalım ;


set timing on -- çalışma süresini gösterir

select count(*) from hwm_test;

  COUNT(*)

----------

  10700107

1 row selected.

Elapsed: 00:02:30.91




Gördüğünüz gibi hiçbir veri olmazsa bile sorgumuzun süresi daha uzun olmuştur.Bu sorunun çözüm yollarından biri olan Shrink işlemi ile düzeltebiliriz.Bir sonraki makelem olan oracle'da shrink operasyonu isimli makalemde görüşmek üzere.

Yaşar İslam



Hiç yorum yok:

Yorum Gönder