Pages

9 Şubat 2011 Çarşamba

Oracle 11g RAC "Cache Fusion" Teknolojisi

Oracle RAC veritabanı sisteminde iki önemli servis vardır. Bunlar  Global Cache Service (GCS) ve Global Enqueue Service (GES) dir. Bu ikisi temelde arkaplan proseslerinin koleksiyonudur. Her iki proses birlikte toplam "cache fusion" prosesini, kaynak transferlerini ve instancelar üzerinden kaynak tırmanmasını kapsar ve yönetir.

Global Kaynak Dizini (Global Resource Directory)
GES ve GCS prosesleri beraberce, kaynak ve kuyruğa ekleme bilgilerini kaydetmek için Global Kaynak Dizinini(GRD) oluştururlar. GRD, bellek içinde yer alır ve tüm instanceler üzerinde saklanır. Her instance dizinin bir parçasını yönetir.Bu dağıtık sadelik, RAC’ın fault tolerance yapısı için anahtar noktayı oluşturmaktadır.

Global Kaynak Dizini (GRD), veri bloklarının mevcut durumunu kaydeden ve saklayan dahili bir veritabanıdır. Bir blok, bulunduğu instance içindeki lokal bellekten diğer instance’ların belleğine transfer olur olmaz GRD güncellenir. GRD içinde aşağıdaki kaynak bilgileri yer almaktadır.

* Veri blok tanımlıyıcıları (DBI)
* En güncel versiyon bilgisinin lokasyonu
* Veri blok modları (N)Null, (S)Shared, (X)Exclusive
* Her bir instance tarafından tutulan veri bloklarının rolleri(lokal veya global)
* Küme içindeki çoklu düğümler üzerindeki ön bellekler

Global Cache Service (LMSx)

GCS veri bloklarının lokasyonunu, mod ve rol durumları ile birlikte tüm instance’ların erişim haklarını izler. Veri bloğunun mevcut versiyonu bir instance’ın ön belleğinde yer alırken ve bu esnada diğer bir instance o bloğu değiştirmek için talepte bulunursa, Oracle,GCS prosesini bellek uyumluluğu için kullanmaktadır. GCS aynı zamanda blokları diğer instance’dan okumak içinde kullanılır.

Ayrıcalıklı kaynakların ilk okumasını takiben tekil RAC instance içinde çalışan çoklu işlemler, bloğu uzunca süre lokal bellek dışına transfer yapmadan GCS ilişkisi olmaksızın veri blok setlerine erişimi paylaşabilmektedir. Bu RAC olmayan Oracle veritabanı ile benzerlik gösterir. Eğer bloğun lokal belleğin dışına transfer olması gerekirse GCS paylaşımlı havuz içinde Global Kaynak Dizinini günceller.

GCS ve Cache Coherency( Bellek Uyumluluğu)

GCS tüm veri blok tiplerini yönetir. Bellek uyumluluğu, veritabanı bloğunu değiştirmeden veya okumadan önce, instanceların cluster boyunca kaynak kazanma(blok üstündeki kilit veya kuyruğa alma) gereksinimi sebebiyle GCS üzerinden sürdürülür. GCS, sadece bir instance’ın  herhangi bir tekil zaman anında bloğu değiştirmesine izin vererek global bellek erişimi senkronizasyonu için kullanılmaktadır. Global Kaynak Dizini boyunca GCS, cluster içinde herhangi bir modda belleğe alınan veri bloklarının durumunun global olarak görünür ve sürdürülür olmasını temin eder.
Oracle RAC birçok versiyon mimarisinden oluşmaktadır. Yani bu birçok versiyon mimarisi, mevcut veri blokları ile bloğun bir veya daha fazla kalıcı okuma(CR) versiyonunu ayırt etmeye yaramaktadır. Mevcut veri bloğu, commit edilmiş ve daha henüz commit edilmemiş işlemler ile ilgili değişiklikleri içermektedir. Bloğun kalıcı okuma(CR) versiyonu, verinin geçmişte herhangi bir zaman anında alınan kalıcı snapshot görüntüsünü ifade etmektedir. Bir veri bloğu, paylaşımlı kaynakların himayesi altında pek çok ön bellek içinde bulunabilmektedir.

Oracle RAC’da rollback segment bilgisinin mevcut bloklara uygulanması, bloklarda kalıcı okuma versiyonlarının oluşmasına sebep olur. Hem mevcut okuma blokları, hemde kalıcı okuma blokları GCS tarafından yönetilir.

Veri bloklarını veritabanı bellekleri arasında transfer etmek için bu tamponlar, yüksek hızda IPC interconnect ortalamasıyla taşınmaktadırlar. Disk yazmaları sadece bellek değiştirmesi için gereklidir. Bloğun eski görüntüsü(PI), eğer kirli(değiştirilmiş) blok ise, gönderilmeden önce bellek içinde saklanır. Herhangi bir başarısızlık durumunda Oracle bu blokların eski görüntüsünü kullanarak bloğun mevcut versiyonunu yeniden inşa eder.  

GCS Kaynak Modları ve Roller

GCS global kaynak dizini, RAC sistemin başından sonuna kadar aktarılan kaynak bloklarını izlemektedir. Aynı blok, birçok bellek içinde sonuçta blok transferleri olarak yer alır. Blok, instance’nın kaynak veriyi güncellemek içinmi yoksa yalnızca okuma içinmi niyetlendiğine bağlı olarak farklı modlarda tutulur.

RAC kaynağı iki faktör tarafından belirlenmektedir:

Mod – null, shared veya exclusive.
Rol – Lokal veya global

Kaynak için talebin bir parçası olarak kaynak modları tutucu tarafından genellikle ayarlanmaktadır. Kaynak modu, taşıyıcının bloğu değiştirip değiştiremeyeceğini belirler. RAC kaynaklarının  modları aşağıda açıklanmaktadır.

Null – N ile tanımlanır. Bu seviyede kaynak tutmak hiç bir erişim hakkının olmadığını ifade eder.
Shared – S ile tanımlanır. Korumalı okuma anlamına gelir. Kaynak bu seviyede tutulursa, proses onu değiştiremez ve birçok proses aynı kaynağı okuyabilir.
Exclusive – X ile tanımlanır. Prosesin ayrıcalıklı erişimi tutmasını onaylar. Diğer prosesler kaynağa yazamaz, ancak eski blokların sürekli okumaları PI prosesi üzerinden hala müsaittir.  

Kaynak rolleri erişim tipine göre ayarlanmaktadır. Eğer kaynak exclusive(ayrıcalıklı) modda ise lokal, null veya shared mod da ise kaynak globaldir.

Cache Coherency(Bellek uyumluluğu) ile kullanılan performans izleme yolları
Bazı AWR raporlarını çalıştırmaktan çok daha fazla şekilde, HSI(High Speed Interconnects) network arayüzlerinin sağlığını ölçmeye ihtiyacımız vardır. Bunun yanında düğümler üzerindeki trafik hacmini ve cevap sürelerinide izlememiz gerekmektedir. Tipik bir OLTP sistemi bizi bu noktada fazlasıyla meşgul edecektir. Bu trafiği ölçmek için iki kategoriye odaklanılması gerekmektedir.

  • GCS (Global Cache Services)
  • GES (Global Enqueue Services)
Global Kuyruğa Alma Servisi (Global Enqueue Service)
Global olarak paylaşılan kuyruğa alma işlemlerini koordine eden servistir.

RAC mimarisinde bloklar çoğunlukla işleri kendi başlarına halledebilmektedir, ancak GES devreye girdiğinde can alıcı bir nokta ortaya çıkar. RAC işlemi için düğümler arasında kusursuz bir koordinasyonun sağlanması şarttır. İşte bu noktada, GES önceliği ele alarak dictionary ve library bellekleri içinde uyumluluğun sağlanmasından sorumlu olur.Dictionary bellek, her bir düğümün kendi SGA’sı içinde öncelikli olarak hızlı bakış ve erişim için data dictionary master bilgisinden oluşmaktadır. Bir düğümde commit edilen herhangi bir DML işlemi, RAC yapısındaki tüm düğümlerde data dictionaryler üzerinden senkronize edilmeli ve yazılmalıdır. GES, değişikliklerin düğümler üzerinden sürekli kılındığını ve böylece uyuşmazlık olmadığını garanti altına alır.GES aynı objeye erişimde düğümler arasında deadlock olmamasını da garanti etmelidir. LMON, LCK ve LMD prosesleri birlikte bir koordinasyon içinde çalışarak, GES'in çalışmasını yumuşak ve kusursuz şekilde ayarlar.

Oracle RAC GCS performansını izlemek için Grid Enterprise konsoldan “Cluster Cache Coherency” performans izleme sayfasına girince aşağıdaki ekran çıkmaktadır.


GC CR Blocks Received: Bu metrik mevcut cluster üzerinden okuma kalıcılık uygulamasını yansıtmaktadır.  Diğer bir şekilde cluster içindeki herhangi bir düğümde SELECT işlemi çalışır durumdayken başka bir oturum başka bir düğümde bu SELECT sorgusu çalışmaya başladığı andan itibaren satırları değiştirdiyse, oturum sorgu başladığı andaki veriyi içeren veri bloklarını talep edecektir. Eğer kalıcı okuma talebi lokal ön bellekten sağlanamazsa, bu durumda cluster içindeki başka bir instance içindeki veri bloklarını taşıma yoluyla sağlayabilmektedir. İşte bu taşıma işlemleri bu metrik içinde kayıt edilmektedir.

GC Current Blocks Received: Bu metrik mevcut durumdaki veri bloklarının instance’lar arası transferini göstermektedir. Bir veri bloğu INSERT, UPDATE veya DELETE işlemi sonucunda değiştirilmiş veya oluşturulmuşsa “mevcut durum” modundadır ve bu hareketi sağlayan en son güncel veri instance içindeki ön bellekte yer almaktadır. Eğer bu mevcut veri, cluster içindeki başka bir instance tarafından talep edilmiş ve başarılı bir şekilde transfer edilmişse bu metrik içinde yer alır.

GV$ görünümleri
Awr raporları yanında SQL*Plus üzerinden GV$ görünümleride performas izleme ve proaktif işlemler açısından önemlidir.

Örneğin, aşağıdaki sorgu düğümler üzerinde gönderilen GCS mesajları ile ilgili sonuç verecektir. Eğer düğümler arasında çok farklılıklar varsa bir sorun var demektir.

SQL> select * from gv$sysstat where name like ‘%gcs %’;

Bunun yanında aşağıdaki sql cümlesi, “nunhem” şemasındaki segmentlere ait global bellek aktivitesini gösterecektir. Eğer sonuçta blok başına yüksek satır sonuçları mevcutsa, bu objelerin PCTFREE değerlerinin artırılmasında fayda vardır.

SQL> SELECT
> table_name AS "Table Name",
> gc_buffer_busy AS "Buffer Busy",
> gc_cr_blocks_received AS "CR Blocks Received",
> gc_current_blocks_received AS "Current Blocks Received"
> FROM
> (
> SELECT table_name FROM dba_tables
> WHERE owner = 'NUNHEM'
> ) t,
> (
> SELECT object_name,value AS gc_buffer_busy
> FROM v$segment_statistics
> WHERE owner = 'NUNHEM'
> AND object_type = 'TABLE'
> AND statistic_name = 'gc buffer busy'
> ) ss1,
> (
> SELECT object_name,value AS gc_cr_blocks_received
> FROM v$segment_statistics
> WHERE owner = 'NUNHEM'
> AND object_type = 'TABLE'
> AND statistic_name = 'gc cr blocks received'
> ) ss2,
> (
> SELECT object_name,value AS gc_current_blocks_received
> FROM v$segment_statistics
> WHERE owner = 'NUNHEM'
> AND object_type = 'TABLE'
> AND statistic_name = 'gc current blocks received'
> ) ss3
> WHERE t.table_name = ss1.object_name
> AND t.table_name = ss2.object_name
> AND t.table_name = ss3.object_name;

Table Name Buffer Busy CR Blocks Received Current Blocks Received
--------------------- --------------- ---------------------- -----------------------
CSTTBL                      0                     54                    434
RGNTBL                     0                      62                    370
JOBTBL                       0                      6                      19
ITMTBL                       0                      0                      637
ORDTBL                      1                      250                  574
STCTBL                      0                      1193                531
WRHTBL                     0                      206                  192

0 yorum:

Yorum Gönder