12 Şubat 2011 Cumartesi

SQL Access Advisor

Merhaba,

Oracle veritabanının yönetiminin olmazsa olmasa danışmanlardan bugün "SQL Access Advisor" olanını anlatmak istiyorum. 10g versiyonu ve sonrası için geçerli olan bu danışmanlar arasında, SQL Tuning Advisor, Data Recovery Advisor, SQL Access Advisor, Memory Advisor, Undo Advisor ve Segment Advisor bulunmaktadır. Her birinin amacı farklıdır ve aynı zamanda AWR ve ADDM tarafından da kullanılmaktadırlar. Arka plandaki görevini üstenen görev ise MMON ve bir üst kademe olan MMAN'dır.

SQL Access Advisor

Bu danışmanın görevi verinin erişimi için kullanılan yollar hakkında tavsiyelerde bulunmaktır. Bir sorgunun geçtiği yolları en optimum nasıl belirleyebilirim, ne gibi önlemler alarak daha iyi yollardan geçmesini sağlayabilirim gibi konuları araştırır. Bu danışmanın bize performansı arttırmak için verebileceği tavsiyeler arasında partitioning kullanımı, materialized view kullanımı, index tanımlanması veya materialized view logs yaratılması ile ilgili tavsiyeler yer almaktadır. Bir sorgu için partitioning ve index oldukça önemlidir ve sorgu performansını direkt olarak iyileştirebilir. Bu sebepten dolayı SQL Access Advisor bu konular üzerine yoğunlaşmaktadır. Bu danışmanın bir diğer faydalı yanı ise bu tavsiyelerde bulunurken iş yüküne göre de hareket etmektedir. Index ve partitioning eklemek performansı arttırabilir ancak fiziğin temel kanunu olarak bir yandan enerji gelirken diğer yandan enerji çıkmalıdır. Buradaki durumda ise çıkan kaybettiğimiz disk alanı, giren ise artan performansdır. SQL Access Advisor bunun da optimum düzeyde gerçekleşmesini sağlar ve orantılı bir ölçüde tavsiyelerde bulunur. 

SQL Access Advisor Enterprise Manager kullanılarak çalıştırılabilir, görüntülenebilir ya da izlenebilir. Bunun yanı sıra DBMS_ADVISOR paketi kullanılarak da aynı işlemler yapılabilir. Takdir size kalmış ama EM kullanırsanız rakamlarla boğuşmak yerine grafiksel, hoş bir görüntüye bakmış olursunuz. 

SQL Access Advisor'a Genel Bir Bakış

Geçtiğimiz günlerde bir ACE Director olan Daniel Morgan'ın ( http://www.morganslibrary.com/ ) bir konuşmasını izliyordum. Partitioning ile ilgili konuşuyordu ve şunları söyledi; "Partitioning yalnızca oldukça satır sayısı içeren tablolar için geçerli değil, artık küçük veritabanları ve küçük tablolar için de kullanımı yaygınlaşmakta. Bunun en büyük etkisi insanların artık veriyi daha hızlı görmek ve vakitten kazanmak istiyor olmalarıdır". Benim "Interval Partitioning" ile ilgili yazdığım bir konu var ve burada detaylı olarak bahsediyorum. SQL Access Advisor'ın da ilgilendiği konu bu çünkü çok ciddi boyutlarda performans arttırabilir ve verinin son kullanıcıya hızlı bir şekilde sunulmasını sağlayabilir. Tabii, az önce de bahsettiğim gibi bu performansın da bir götürüsü olması gerekiyor. Partitioning ve indeksler için temel sorun daha fazla yer kaplamaları. 11gR2'deki ileri düzey sıkıştırma algoritmaları ile bu problemi CPU'nun üzerine bindirmeye başlayabilirsiniz ancak buradaki konumuzla ilgili olmadığı için detayına girmiyorum.

SQL Access Advisor'un bize sunduğu index tavsiyeleri arasında, b-tree index, bitmap index and function-based index'ler yer almaktadır. Bu 3 tip index'in kullanım amacı ve yeri farklıdır ancak varsayılan olarak yaratılan ve daha sık kullanılan index tipi b-tree index'tir. Materialized view olarak verdiği tavsiyeler ise MV'nin fast ya da full olarak tazelenmesi üzerinedir. Bu danışman, TUNE_MVIEW prosedürünü kullanarak karar vermektedir ve aynı zamanda bir MV'nin nasıl optimize edileceğini açıklar.

SQL Access Advisor'ın sırasıyla yapabileceklerine bir örnek vermem gerekirse, partitioned olmayan bir tablo için önce partition yaratılması için, ardından index ve MV yaratılması için tavsiye verebilir. Aşağıdaki diagram bize SQL Access Advisor'ın nasıl çalıştığını göstermektedir. Eğer tanımladığımız bir workload yoksa SQL Access Advisor farazi olarak bir workload oluşturarak ölçüm de yapabilmektedir. 


Bu danışmanın bize sunduğu bir fikri, tavsiyeyi beğenmezsek bunu EM aracılığı ile silebiliriz veya işaretleyebiliriz. 

SQL Access Advisor Kullanımı

SQL Access Advisor'ı kullanmanın en kolay yolu Enterprise Manager olarak gösterilmektedir. "Advisor Central" sayfası altında ilgili danışmanı görebilirsiniz. 

Bir Görev Yaratın

Bir danışman görevi data dictionary içerisindeki bilgilerin derlendiği ve sonuçların analiz safhasında ilgili danışman tarafından kullanıldığı görevlerdir. SQL Access Advisor'un bize bir tavsiye sunabilmesi için öncelikle bir görev yaratmamız gerekmektedir. Bunu yerine getirmek için DBMS_ADVISOR_QUICK_TUNE prosedürünü kullanabilirsiniz ya da DBMS_ADVISOR.CREATE_TASK prosedürü de bir görev yaratacaktır. EM üzerinden de yapabilirsiniz tabii ki. Bir görevin özelliklerini değiştirmek isterseniz ise DBMS_ADVISOR.SET_TASK_PARAMETER prosedürünü kullanabilirsiniz.

Workload Tanımlama

Bir workload SQL sorgularından oluşmaktadır. Bunun yanı sıra her SQL sorgusu için istatistikler ve özelliklerini içermektedir. İki tip workload bulunmaktadır, bunlar full ve partial'dır. Full olan tipte bütün SQL sorguları için veriler tutulmakta iken partial için sadece SQL sorgularının alt kümeleri saklanmakadır. Bu ikisi arasındaki farklardan birisi de full workload işe yaramayan ve kullanılmayan MV'ler için de bilgi içermektedir. 

SQL Access Advisor'ı bir workload olmadan kullanamazsınız. Veritabanı, bir workload'u SQL Tuning Set olarak saklamaktadır. DBMS_SQLTUNE paketi ile workload'a ulaşabilir ve diğer danışman görevleri ile paylaşabilirsiniz. Workload bağımsız bir obje olduğu için DBMS_ADVISOR.ADD_STS_REF prosedürünü kullanarak kimin için tanımlanacağını belirleyebilirsiniz. 

Tavsiyeleri Oluşturma

Görevler oluşturulduktan ve bu görevlere bir workload atandıktan sonra DBMS_ADVISOR.EXECUTE_TASK prosedürü kullanılarak ilgili görev çalıştırılabilir. Ortaya çıkan bütün tavsiyeler SQL Access Advisor Repository'sinde bulundurulmaktadır. Oluşan her bir tavsiye bir veya birden çok adımdan oluşabilmektedir. 

Tavsiyeleri Görüntüleme ve Kabul Etme

Katalog, yani data dictionary görüntüleri kullanılarak oluşturulan tavsiyeleri görüntüleyebilirsiniz. Bununla birlikte DBMS_ADVISOR.GET_TASK_SCRIPT prosedürü ile de bir script yarattırabilirsiniz. Enterprise Manager üzerinden görüntülemek isterseniz "Viewing Recommendation" kısmı karşınıza gelecektir. 

Bütün tavsiyeleri kabul edeceksiniz diye bir koşul elbette bulunmamaktadır. Ancak şöyle bir durum bulunmaktadır ki örneğin SQL Access Advisor bize bir tablo üzerinde partition yaratmamız gerektiğini iletti. Bu yerine gelmeden tablo üzerinde bir lokal indeks tanımlayamazsınız. Tavsiyelere uyduktan veya bir kısmına uymadıktan sonra yapacağımız en son aşama ise ilgili sorgunun performansı arttı mı yoksa artmadı mı bunu incelemektir.

SQL Access Advisor Repository

Veritabanındaki data dictionary'nin bir parçası olan bu repository, oluşturulacak olan tavsiyelerin saklanmasını üstlenmektedir. SQL Access Advisor için workload'ları toparlar, geçmişe yönetlik verinin desteklenmesine yarar ve sunucu tarafından yönetilmektedir. 

İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan