Oracle Database 12c In-memory ve Buffer Cache

Arkadaslar bildiginiz üzere Oracle’ın 12c versiyonu geçtiğimiz aylarda çıkmıştı. Geçtiğimiz günlerde de 12.0.1.2 versiyonu çıktı.

Bu versiyon bize büyük bir yenilikle beraber geldi. Kolon bazında in memory.

Veritabanında tutulan verilen kalıcı olması adına disklerde tutulduğunu ve bu verilerin okuma ve değiştirme amaçlı olanlarının da veritabanının buffer cache dediğimiz alanında tutulduğunu söyleyebiliriz. Zaten iyi performans sağlayan bir sistemde buffer cache bu ihtiyaççları karşıladığını görüyorduk.

Oracle veritabanında veriler row formatında tutulurlar. Dolayısı ile kolon  bazında in memory ilgi cekici olacaktır.

Bugune kadar veritabanı dediğimizde karşımıza iki temel secenek cıkıyordu. OLTP veritabanları (insert,update,delete) ve DSS veritabanları (sorgulama ağırlıklı). Firmalar tercihlerinde sistemlerini optimize etmek adına ayrı ayrı makinalar ayrı ayrı veritabanları kuruyorlardı.

Oracle Database 12c in memory artık dual-format olacak. Buradan anlayabileceğiniz üzere tek sistem artık eskisinden çok daha yakın. Özellikle Exadata artık daha yakın.

Yazımda Buffer cache ve In Memory farkını net ortaya koymak istiyorum. Buffer Cahe , datayı read/write işleri için geneleksel şekilde row formatında tutar.

Datayı okumak için istediğimizde Memory option devreye girecek ve row formatından kolona döndürecek.

Peki bu in memory opsiyonu nasıl kullanacağız, kullanmak için yapmamız gereken sadece bir veritabanı parametresini ayarlamak.

Alter system set inmemory_size=5368709120 diyelim scope=spfile;

Daha sonra sorgulama için uygun olan tablonuzu

Alter table satisrapor inmemory; komutunu verip memory alalım.

 

Bu özelliğin en önemli yanı ne kodda ne databasede bir değişiklik yapmamak.

yani aynı tabloyu ister inmemory tutarsınız ister buffercacde . Bu sizin DBA bilginize ve operasyona göre yapacağınız aksiyona bağlı bile olabilir.

Size buffercache ile inmemory karsılaştırmasını somut bir örnekle göstermek istiyorum.

Alter table satisrapor cache ; diyelim bu şekilde tablomuzu buffer cache almış olalım.

Tabloya

Select avg(satis) from satisrapor where zaman between ‘2008’ and ‘2012’

çalıştırdığımızda bize geri dönüş süresi 32sn olarak gözüküyor.

Bu select buffer cacheden gelen bir sonuc.

Aynı sorgu buffercacheden değilde diskten gelse çok daha uzun zaman alacaktır.

alter table satisrapor inmemory

alter session set inmemory_query=enable

Select avg(satis) from satisrapor where zaman between ‘2008’ and ‘2012’

 

çalıştırdığımızda query inmemory geliyor ve geri dönüş süresi mükemmel sadece 7 saniye.

Detaylı incelemek için Execution plana baktığımızda Table access in memory full yazdığını görebiliriz.

Evet Arkadaşlar Artık ORACLE 12C geçmenin yavaş yavaş vakti geliyor.

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s