SQL Tuning Uygulamaları: SQLT ve SQLHC Araçlarının Kullanımı Bora YÜRET Oracle Veritabanı Yöneticisi T.C. Çalışma ve Sosyal Güvenlik Bakanlığı
Sunum Konuları SQLT ile tanışma SQLXTRACT ve SQLTXECUTE metodları ile SQL incelenmesi Test Ortamı Oluşturulması ve Test Senaryolarının Çalıştırılması XPLORE metodu ile bir iyileştirme çalışması SQLHC Kullanımı
SQLTXPLAIN (SQLT) Nedir? SQLTXPLAIN (SQLT), Carlos Sierra tarafından kodlanmış, problemli çalışan SQL’leri inceleme aracıdır. Add-on (Metalink Doc ID 215187.1) Oracle 10g/11g/12c versiyonlarında çalışıyor. Linux / Unix / Windows ortamlarında çalışıyor. Single Instance, RAC, Exadata ortamlarında çalışıyor. Kurulumu ve kullanımı kolay Ücretsiz
SQLT Kullanım Faydaları Tek bir SQL için SQL Tuning teşhisi yapıyor. SQL için 100’ün üzerinde HC(Health Check) gerçekleştiriyor ve sonuçlarını Observation olarak raporluyor. Otomatik Test Case oluşturma. Ana faydası, SQL Tuning için gereken bilgi toplama işlemlerini hızlandırması.
SQLT Nasıl Çalışır? SQL’i incelemek için 3 + 4 ana metod sağlıyor. Input olarak bir SQL sorgusu giriyor, output olarak bir zip dosyası çıkıyor. Zip dosyasında bir HTML dosyası ve diğer dosyalar var: AWR, ADDM, ASH, 10053, 10046, TKPROF, vb. SQL Tuning TC(Test Case)’leri otomatik oluşturup zip dosyasına ekliyor. SQLT kendi şemalarına (2 adet) kuruluyor ve diğer kullanıcılara kullanım hakkı rol üzerinden veriliyor.
SQLT Kurulumu My Oracle Support’da 215187.1 no’lu dökümana gidiyoruz. sqlt.zip dosyasını indiriyoruz. Unzip ettikten sonra SYS olarak sqlt/install/sqcreate.sql scriptini çalıştırıyoruz. Gerekli kurulum parametrelerini sağlıyoruz.
SQLT Kurulum Parametreleri Opsiyonel Connect Identifier (Örn, @PROD) SQLTXPLAIN kullanıcısı için şifre Default Tablespace Temporary Tablespace SQLT için ana uygulama kullanıcısı Oracle lisanslama bilgisi [ Tuning | Diagnostics | None ]
SQLT Uninstall Etmek SYS olarak bağlanıp sqlt/install/sqdrop.sql scriptini çalıştırıyoruz.
Demo SQLT kurulumunu gerçekleştirelim.
SQLT Ana Metodları Ana metodlardan istediğimizi seçip kullanabiliriz. Input olarak SQL_ID ya da direk olarak SQL’i sağlıyoruz. SQLT kullanmak isteyen kullanıcıya SQLT_USER_ROLE rolü verilmelidir. - SQLT XTRACT - SQLT XECUTE - SQLT XTRXEC - SQLT XPLAIN - SQLT XTRSBY - SQLT XPREXT - SQLT XPREXC
SQLT Ana Metodları Method Script Features SQLT XTRACT SQLT XECUTE sqlt/run/sqltxtract.sql Most common method Inputs SQL_ID SQL statement is not executed SQLT XECUTE sqlt/run/sqltxecute.sql Inputs a script name which contains ALTER SESSION commands (if applicable) Binds declaration and assignment (if applicable) SQL statement Executes the SQL statement SQLT XTRXEC sqlt/run/sqltxtrxecsql Combines XTRACT and XECUTE SQLT XPLAIN sqlt/run/sqltxplain.sql Inputs a file name which contains a SQL statement What if SQL contains binds? Leave them in place, OR Replace with literals of same data type SQLT XTRSBY sqlt/run/sqltxtrsby.sql For read-only databases Executes in Primary and connects into stand-by Works like XTRACT Inputs SQL_ID and DBLINK
Ana HTML Raporu İçerikleri (1/3) Observations SQL text Parametreler Cursor sharing SQL Tuning Advisor (STA) report Execution plans
Ana HTML Raporu İçerikleri(2/3) Plan stability Active Session History (ASH) SQL performans metrikleri SQL Monitor Segment ve session istatistikleri Tablolar
Ana HTML Raporu İçerikleri(3/3) İndeksler CBO istatistikleri Objeler ve bağımlılıkları Policy’ler Metadata
HTML Raporu İncelenmesi
Demo SQLT XTRACT ve SQLT XECUTE metodlarını aşağıdaki sorguyla çalıştırarak oluşan çıktıyı inceleyelim. select country_name, sum(AMOUNT_SOLD) from sh.sales s, sh.customers c, sh.countries co where s.cust_id=c.cust_id and co.country_id=c.country_id and country_name in ( 'Ireland','Denmark','Poland','United Kingdom', 'Germany','France','Spain','The Netherlands','Italy') group by country_name order by sum(AMOUNT_SOLD);
Test Ortamı Oluşturulması Genellikle problemli SQL ile ilgili iyileştirme çalışmalarımızı çalışan diğer SQL’leri etkilememek için production veritabanı üzerinde yapmak istemeyiz. Optimizer parametrelerini değiştirme, SQL hintleri, indeks ekleme/çıkarma gibi çalışmaları bu kapsamda sayabiliriz.
Test Ortamı Oluşturulması Bu durumda production veritabanıyla aynı objelere, aynı obje istatistiklerine, hatta aynı sistem istatistiklerine sahip bir test veritabanına ihtiyacımız olacak. Bu objeleri taşıma, obje istatistiklerini taşıma, sistem istatistiklerini taşıma ve gerekirse veriyi taşıma işlemlerini SQLT otomatik olarak yapıyor.
Test Ortamı Oluşturulması Test Case oluşturmak için SQLT XTRACT ya da XECUTE metodlarını çalıştırmamız sonucu oluşan sqlt_sNNNNN_tc.zip dosyasını kullanabiliriz. Bu dizindeki xpress.sql dosyasını çalıştırarak test case oluşturmaya başlayabiliriz.
Demo Production veritabanımızdaki bir SQL’in Test Case’ini test veritabanında oluşturalım ve çeşitli parametre değişikliklerinin sorgu üzerindeki etkilerini test edelim.
XPLORE Metodu Her CBO parametresinin ya da bug fix değişikliğinin execution plan üzerindeki etkisini araştırır. Tüm CBO (275 civarı) parametre değişikliklerinin sorgumuza etkisini test eden bir brute-force saldırısına benzetebiliriz. Exadata’ya özgü parametreleri de, ortamımız Exadata ise teste katabiliriz.
XPLORE Metodu XPLORE metodunun çalıştırılabilmesi için daha önceden bir test case oluşturmuş olmamız gerekir. Sqlt/utl/xplore dizinindeki install.sql scripti ile başlatıyoruz. Input olarak test case kullanıcımızı vereceğiz, output olarak biz zip dosyası verecek. Zip dosyasındaki HTML dosyasında CBO parametre değişikliklerinin sonuçlarını görebileceğiz.
Demo XPLORE metodu ile SQL’imizde iyileştirme yapıp yapamayacağımızı test edelim.
SQLHC Nedir? SQLHC (SQL Health Check) stand-alone bir sql scriptidir. SQLT’nin light versiyonu diyebiliriz. SQLT kurma imkanımızın olmadığı durumlarda, kurulum gerektirmeyen ama çıktıları daha sınırlı bu scripti kullanabiliriz. SQLT gibi tek bir SQL üzerinde çalışmaktadır.
SQLHC Kullanımı Metalink 1366133.1 nolu dökümandan indirebiliriz. SYS olarak bağlanıp sqlhc.sql scriptini çalıştırıyoruz. Input olarak SQL ID giriyoruz. SQLT gibi tek bir SQL üzerinde çalışmaktadır.
Demo SQLHC aracını bir SQL için çalıştırarak oluşan çıktıları inceleyelim.
Kaynak Blog: http://carlos-sierra.net/ Kitap: Oracle SQL Tuning with Oracle SQLTXPLAIN Stelios Charalambides 20 Mart 2013 Apress
Teşekkürler Katılımınız için TEŞEKKÜRLER İletişim: borayuret@gmail.com