oracle sql tunning best practices

Post on 19-Jul-2015

179 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SQL TUNNING SEMINERİYAPI KREDİ BANKASI

10 EKİM 2014

Zekeriya Beşiroğlu

AGENDA

SQLTXPLAIN SQL TUNNING BEST PRACTICES

SQLT NASIL ULASIRIZ• MY ORACLE SUPPORT SAYFASINDAN DOWNLOAD

ETMEMIZ GEREKİYOR

• KNOWLEDGE-DIAGNOSTIC TOOLS

NASIL KURULUM YAPARIZ

• Download ettiğimiz zip dosyasını açıyoruz.

• Açılan dosyanın install directorysine gidiyoruz

• SQLPLUS / as sysdba şeklinde bağlanıyoruz

• sqcreate.sql çalıştırıyoruz

• Tablespace,user password gibi bilgiler istiyor.

İLK RAPORUMUZU NASIL ALIYORUZ

• Kurulumu yaptığımız userda bir folder gelecek sqlt/RUN/run gibi o directory gidiyoruz.

• SQL İD buluyoruz.

• sqlplus user/sifre girisi ve

• @sqlxtract sqlid diyoruz.

• sqlt_nnnn_main.html isimli ilk raporumuz hazır.

Raporda Neler Var?

SQL EXECUTION PLANI

Daha Fazla Detay

Daha Fazla Detay

Join Türleri hatırlatma• HASH JOİN

• TABLO büyük değilse kötü

• NESTED LOOP

• Küçük tablolarda daha iyi

• Sort Merge

• Cardinality yüksekse beklenebilir.

• Hangi Join’i neden Tercih ettiği 10053 Trace

CBO etkileyen Faktorler Sistem İstatistikleri

• Sistem istatistiklerinin ihmal edildiği birçok yerde görüyoruz.

• Önemlimidir? Sisteminizin genel davranış şeklini analiz ettiği istatistiktir. İndexlerin davranışını bile etkiler.

• SQLT ile sistem istatistiklerini kolayca anlayabiliriz.

• CBO System statistik diye bir sekme vardır.

Sistem İstatistikleri• Doğru alınıp alınmadığını kontrol edelim.

• Single block read time & multi block read time

CBO Parametreleri

• CBO yu etkileyen parametreleri bulmamız görmemiz son derece kolaydır.

Dün İyiydi Ama …

Örnek Senaryo

• Developer öğlen yemeğe gittiğini ve yemekten dödükten sonra hash join yapan sorgusunun bitmap indexe döndüğünü

• index yaratmadığını

• istatistik almadığını söylüyor.

Örnek Senaryo

Örnek Senaryo• İndexin ne zaman yaratıldığı görüyoruz.

• Eskiden yaratılmış.

Örnek Senaryo• Yeni index yok

• hint yok

• istatistik yok

• plan değişmiş

• Sistem istatistiği değişikliği

• CBO parametre değişikliği

Örnek Senaryo

• Observation Kısmından parametre değişikliği olduğunu görüyoruz.

• Optimizer_index_cost_adj parameters 1 yapılmış. Default 100.

SQLT ve Profile

• kurulum yaptığımız yerde utl diye bir folder var. /SQLT/sqlt/utl

• Bu directory’in altında sqltprofile.sql var.

SQLT ve Profile

SQL> exec dbms_sqltune.pack_stgtab_sqlprof(staging_table_name=>'STAGE', profile_name=>' sqlt_s89915_p3005811457’);

Gerekirse başka bir database göderebiliriz..

Adaptive Cursor Sharing

• İyi ve Kötü SQL planı gösterir

Bazı Önemli Tespitler

SQL> alter system set "_optimizer_use_feedback" = FALSE

SQLTEXECUTE• SQLTEXECUTE sayesinde detaylı compare

yapabiliriz.

BEST PRACTICES• Building Balanced Hardware Configuration

• High Throughput sağlamak You should consider configuring the following hardware components in order to create a balanced system:

• Number and speed of CPUs • Memory size • Number and size of disks • Number and speed of the I/O bandwidth components, such as:

– Host Bus Adapters(HBAs) – Switches – Disk Controllers

Hesap Basit• Cpu Core başına ortalama 100-300 mb/per second

• Core sayısı kadar HBA

• Fiber switch ortalama 800 mb/per second

• Bir Disk Array ortalama 200 mb/per second

• Küçük 15000 rpm disk. 10 tane disk bir arrayde.

• 4 gb memory per core 8 gb Compressde.

Optimizing Third Normal Form: Power, Partitioning, Parallelism

• Power bir önceki slayt

• Partition : Range- Hash partition hedefliyoruz.

• Hash sayısı cpus sayısı X 2

• Paralel degree power X 2 ve hedef parallel partition-wise join

Partition-Wise Join

Optimizing Star Queries: Tuning Star Queries

Data Loading Best Practices• Alter session enable parallel dml ve direct path

yapıp buffer cache pass gecelim.

• Create table as Select

• insert /*+ Append */ into

• External Table kullanıyoruz. SQLloader kullanmıyoruz.

– Allows a flat file to be accessed via SQL and PL/SQL as if it were a table in the database – Enables complex data transformations and data cleansing to occur “on the fly” – Supports parallel operations – Avoids wasted space

Connection Pool• Connection Pool sizeları son derece kritiktir.

• Bugun online application user sayısı yüksek olan bir sistemde

• Örnek vermek gerekirse 50.000 online application users

• 100 Application server

• 2 node rac 128 CPU per node OLMAMALI

• instanse basına 25-30.000 session çok yüksek rakamlar yüksek süreli beklemelere performans problerine neden olurlar.

12c Multitenant&In Memory• Complex OLTP ortamları Analytic indexlerle

beraber çok daha yavaş çalışırlar.

• OLTP den dolayı1-3 index +10-20 civarı Analytic index olduğunu düşünürseniz tabloya yapılan bir insert işleminin maliyetini yüksek ve yavaş olur.

• IN Memory Database Column Store özelliği Analytic indexin yerini alacaktır.Hem daha hızlı analiz hemde daha hızlı OLTP ve batch işlemleri demektir.

IN MEMORY• Uygulamalarınızda hiçbir değişiklik yapmazsınız.

• Bilinen Row formatı Transaction için en iyi formattır

• Insertler hızlı,birkaç row many columns hızlıdır

• Column formatı inmemory özelliğidir. Analytics için idealdir

• Region bazında satış raporu gibi,tek yada az kolon çok satır için idealdir.

• Son derece kolay ayarlanır.

• inmemory_size=xxx GB

• Kullanacağınız tabloda yada kolonda alter yapılır.

• Alter table yyy partition zzz inmemory

Dual Format Database• Row ve Column format aynı tabloda kullanabiliriz

• OLTP Row kullanır

• Analytics ve Raporlamada Column formatı

• Inmemory not persistent and no logging

• 2X -20X compress farkı yaratır.

• Buffer cacheden çok daha hızlıdır.

• Tablo ve Partition level yapılabilir.

• Her hardware platformda vardır.

• Her cpu core local olarak çalışabilir.

• Join tablolarda 10X hızlanma vardır.

In -memory Multitenant • Beraber harika çalışırlar.

• Multitenant ciddi bir konsolidasyon yapar. Memory ve Cpu Cycles

• Inmemory’in isteği memory ve cpu olduğu için daha yüksek performans gösterir.

• Inmemory CDB inherittir

• Örnek vermek gerekirse GL,OE,DW databaselerimiz olsun

• CDB inmemory_size=20gb

• GL 0 gb

• OE 4 db

• DW 16 gb ayarlayabiliriz.

• hatta over subscription bile izin verir. yani oe 10gb dw 16 gb ayarlanabilir.

Sorular & Cevaplar

• kaynaklar: SQLxplain Carlos Sierra

• OTN

top related