Oracle Database In-Memory Option

Herkese Selam, Bu yazıda sizlere Oracle 12c DB ile gelen In-Memory özelliğinden bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur. Bilindiği üzere Oracle DB veriyi fiziksel seviyede row formatında saklamakta. Hali ile 1895789veritabanına gelen her bir DB transaction’ı db içindeki fiziksel tablolar içerisinde satır formatında yerini almakta. Transactional sistemlerin (OLTP) karakteristikleri gereği verinin fiziksel olarak bu şekilde DB’de tutulması bir avantaj gibi gözükmekte. Çünkü OLTP sistemler bir kayıt ile ilgili o kayıda ait tüm kolon bilgilerine aynı anda erişmek isteyebilir.  Bir kayda ait her kolon bilgisine hızlı erişmek için row formatında datayı saklamak veriye erişim performansımızı pozitif yönde etkilemektedir. Ancak aynı durum OLAP sistemler için çokta performanslı gözükmemekte. Genellikle DWH ve raporlama ortamları tek bir kayıt ile ilgilenmek yerine bir tablonun tamamının veya belirli bir kayıt kümesinin tamamını işleyen ve kayıtların tüm kolonlarını kullanmak yerine spesifik belli başlı kolonları üzerinde analitik işlemler yapıp sonuç üretme eğilimde olan sistemlerdir. OLAP sistemlerin bu karakteristik özelliği nedeniyle datanın db’de row formatda tutulması bu sistemlerin veri erişim ve sorgu performanslarını negatif yönde etkilemektedir. Günümüzde business, bir çok aksiyonun gerçek zamanlı alınabilmesi için, real time raporlamaya ve real time karar mekanizmalarına ihtiyaç duyuyor. Buda demek oluyor ki artık OLTP sistemler üzerinden de performanslı bir şekilde rapor çekebilme ihtiyacı gün geçtikçe artıyor. Bu ihtiyacı göz önünde bulunduran Oracle, 12c DB si ile beraber raporlama ihtiyacı yada sorgulama ihtiyacı olan tabloları In-Memory opsiyonu ile beraber memory’de column base tutup bu tablolara yapılacak analitik sorgu performansını arttırmayı amaçlamakta. Bu gelişimi biraz açıcak olursak, oracle in-memory’e alınacak tablo veya tabloya ait kolonları hem column base hemde row based tutmakta (Oracle Dual Architecture). (Bunun sebebini transactional operasyonların(DML) ve analitik sorguların her ikisinede benzer performanslar ile cevap verebilmesi gerekliği olarak açıklamıştık.) Akıllara şu soru gelebilir, oracle in-memory’e alınacak datayı  hem row based hemde column based formatda tutması 2 kat fazla memory ihtiyacı doğurmaz mı? Oracle’ın bu konu ile ilgili açıklaması 2 kat daha fazla memory tüketmeyeceği yönünde!. (Yıllardır database buffer cache’de yaptıkları optimizasyona oldukça güveniyorlar.)  Oracle veri, index ve transaction bütünlüğünü, tutarlılığını her iki format içinde garanti ediyor. In-Memory’e alınarak 2 formatda da data yapısı tutlan tablolar üzerine atılan transacitonal veya analtik fonksiyonları Oracle arka tarafta algılayıp, sorguları ilgili record formatlarına yönlendirerek kendi içinde optimzasyonu sağlamış oluyor. Şimdi bir kaç örnekle bu opsiyonun nasıl kullanılacağını görelim. Not: Örnekler Oracle DB 12. R1 CDB üzerinde yapılmıştır.

 -- Sistemin inmemory opsiyonu default seçenegine cekildi.

ALTER SYSTEM SET INMEMORY_FORCE=DEFAULT;

-- Sorgularda inmemory üzerinden plan çıklabilmesi çin inmempru_querry parametresi aktif edildi.
ALTER SYSTEM SET INMEMORY_QUERY=ENABLE;

-- inmemory paramterelernin degerlerine bakıldı.
SHOW PARAMETER INMEMORY

-- inmemory_size 0 görüldüüğü için inmemory_size arttırıldı.
ALTER SYSTEM SET INMEMORY_SIZE=100M;

-- in-memory opsiyonu kullanilacak tablo yaratiliyor.
create table hr.employees_inmemory as select * from HR.EMPLOYEES;

-- simdi tablo üzerinde analitik sorgu calistiracagimiz tablo columnar formatda
-- tutulsun diye in-memory opsiyonuna tabii oluyor.
ALTER TABLE hr.employees_inmemory INMEMORY;

Tüm tabloya inmemory opsiyonu uygulanabilecegi gibi tablo üzerindeki kolonlara spesifik olarak inmemory opsiyonu uygulanabilmekte. Benzer şekilde partitiınlara ve materialized view larada bu opsiyon uygulanabilmekte.

-- tabloda employee_id kolonunu inmemory opsiyonunun disinda birak
alter table hr.employees_inmemory inmemory no inmemory(employee_id);

-- bir tablonun istemdigimiz bir partitionını inmemory opsiyonu disinda birakabiliriz.
alter table hr.employees_inmemory modify PARTITION xy no inmemory;

Oracle’ın 12c sürümü ile gelen inmemory özelliği oldukça güçlü gözüküyor. Ancak bu özelliği production ortamlarında kullanmadan önce mutlaka iyi derecede test edilmesi ve yeterli olgunluğa gelip gelmediği izlenmelidir.

Daha detaylı bilgi için aşağıdaki Oracle Open World 2014 Sunumları incelenebilir.

https://blogs.oracle.com/In-Memory/entry/oow2014_wrap_up

Kaynaklar

http://www.oracle.com/us/products/database/options/database-in-memory/overview/index.html http://www.oracle.com/technetwork/database/options/database-in-memory-ds-2210927.pdf?ssSourceSiteId=ocomen http://www.oracle.com/technetwork/database/in-memory/overview/twp-oracle-database-in-memory-2245633.html?ssSourceSiteId=ocomen

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Uncategorized and tagged , , , , , , , , , . Bookmark the permalink.

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 )

Google+ photo

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

Connecting to %s