17 Kasım 2010

Adaptive Cursor Sharing

Adaptive Cursor Sharing (ACS), Oracle 11g R1 ile beraber kullanılmaya başlanılan Oracle’ın yeni özelliklerinden biridir. Cost Based Optimizer (CBO)’ın execution planları oluştururken bir statement için daha fazla execution plan tutmasına olanak sağlayan yapı olarak ön plana çıkmaktadır. Bir statement için birden fazla execution planı tutuyor olmak daha önceki versiyonlardan farklı olarak ilk hard parse olan statement’ın planını daha sonra tekrar tekrar farklı parametrelerle çalışan aynı statementlarıda kullanmak zorunda bırakmamak anlamınada geliyor olacaktır.

Bind variable kavramındaki execution planları ortak kullandırma mantığının aynı plana sahip olmaması gereken 2 cümle için ortak plan kullandırdığı zaman ne kadar maliyetli (costu yüksek) olduğunu görebiliriz. Örneğin;

select * from table_name where id= :dept_id

dept_id değeri ilk olarak 1 daha sonra 2 değerleri gönderilerek sorgulanmış olsun. Bu statement 1 için çalıştığında tablodaki kayıtlardan sadece 1’ i geliyor olsun yani selectivity’si yüksek olsun ve execution plan index üzerinden datayı getirsin. Bu statement 2 için çalıştığında ise tablodaki kayıtların yarısı geliyor olsun ve full table scan (FS) ile dataya erişiyor olsun. Tahmin edileceği gibi bu statement daha birçok kez çalışacaktır. Eğer ACS olmasa idi ilk hard parse olan yani dept_id 1’e göre oluşan execution plan dept_id 2 içinde uygulanacaktı ve FS ile gelmesi gereken bir tablo index üzerinden getirilmeye çalışılacak ve response time’ı düşecekti ve sorgunun sonucu daha uzun sürede oluşacaktır.

Oracle 11g R1 ile beraber aşağıdaki tablolar bind variable larda cursor share edilip edilmediğini takip edip, yorumlayabilmemiz için geliştirilmiş ve 3 adette yeni view eklenmiştir.

V$SQL tablosunda - IS_BIND_SENSITIVE, IS_BIND_AWARE columnları
V$SQL_CS_HISTOGRAM view à SQL statementının bind sensitive olup olmadığını 3 adet frequency histogram ile yorumlamamızı sağlar. Child cursorların kaçar kere çalıştığı bilgisinide içerir.
V$SQL_CS_SELECTIVITY view à Statement ile beraber gelen where koşullarındaki değerleri, bunların selectivitysini ve high value – low value aralığını tutar.
V$SQL_CS_STATISTICS view à Adaptive Cursor’ın nekadar paylaşıldığını gösteren istatistiki tablodur.