Oracle'da Sorgu Optimizasyonu
Yayınlanan: 2023-07-10Sorgu optimizasyonu, kesin bir formülden yoksun, karmaşık ve yaratıcı bir süreçtir. Temel ilkelere dayanmakla birlikte, genellikle herkese uyan tek bir çözüm yoktur. Bu nedenle, göreve dalmadan önce sorgu optimizasyonunun gerekliliğini değerlendirmek çok önemlidir. Aksi takdirde, harcanan zaman, optimizasyonun minimum etkisinden daha ağır basabilir. Öncelikli odak noktası, özellikle veritabanı iş yükünün yüksek olduğu dönemlerde sık sık yürütülen yavaş sorguları optimize etmek olmalıdır. Bunu yapmak, sistemdeki genel yükü azaltır ve performansı artırır.
Oracle'da sorgu optimizasyonu, veritabanı sorgularının verimliliğini ve performansını iyileştirme sürecidir. Bir veritabanı yönetim sisteminde (DBMS) bir sorgu yürüttüğünüzde, DBMS, sorgunun gereksinimlerine göre verileri almanın ve işlemenin en verimli yolunu belirler. Sorgu optimizasyonu, istenen sonuç kümesini sunarken sorgu yürütme süresini ve kaynak tüketimini en aza indirir.
Sorgu optimizasyonu süreci, aşağıdakiler de dahil olmak üzere birkaç adımı içerir:
- Ayrıştırma ve Anlamsal Analiz: DBMS, sorguyu ayrıştırır ve sorgunun sözdizimsel olarak doğru olduğundan ve geçerli veritabanı nesnelerine atıfta bulunduğundan emin olmak için anlamsal analiz gerçekleştirir.
- Maliyet Tahmini: Optimize edici, sorgu için çeşitli yürütme planlarını yürütmenin maliyetini tahmin eder. Maliyet tahmini, G/Ç işlemlerinin sayısı, CPU kullanımı ve ağ iletişimi gibi faktörleri dikkate alır.
- Plan Oluşturma: Optimize edici, farklı yürütme planlarını araştırır ve maliyet tahminlerine dayalı bir dizi potansiyel plan oluşturur. Bu planlar, sorgunun yürütülebileceği farklı yolları temsil eder.
- Plan Seçimi: Optimize edici, oluşturulan planların tahmini maliyetlerini karşılaştırır ve en düşük maliyetli planı seçer. Seçilen plan, sorguyu en verimli şekilde yürütmesi beklenen plandır.
- Yürütmeyi Planla: VTYS, sorgunun gerektirdiği verileri almak ve işlemek için seçilen yürütme planını yürütür.
Sorgu optimizasyon teknikleri, belirli DBMS'ye bağlı olarak değişebilir. Yaygın optimizasyon teknikleri şunları içerir:
- Dizin Kullanımı: Optimize edici, disk okuma sayısını azaltmak ve veri alma performansını iyileştirmek için dizinlerin en etkili kullanımını belirler.
- Birleştirme Optimizasyonu: Optimize edici, birden çok tabloyu birleştirmenin hesaplama maliyetini en aza indirmek için en uygun birleştirme sırasına ve birleştirme yöntemlerine (örn. iç içe döngüler birleştirme, karma birleştirme, birleştirme birleştirme) karar verir.
- Predicate Pushdown: İyileştirici, filtreleme koşullarını veri kaynağına olabildiğince yaklaştırarak işlenmesi gereken veri miktarını azaltır.
- Paralel Yürütme: Bazı durumlarda optimize edici, sorgu yürütmeyi hızlandırmak için birden çok CPU çekirdeği veya dağıtılmış işleme kullanarak bir sorgunun bölümlerini paralel olarak yürütmeyi seçebilir.
- İstatistik Toplama: Optimize edici, bilinçli kararlar vermek için verilerle ilgili doğru istatistiksel bilgilere güvenir. İstatistikleri düzenli olarak güncellemek ve sürdürmek, sorgu optimizasyonunun iyileştirilmesine yardımcı olabilir.
Etkili sorgu optimizasyonu, özellikle karmaşık sorgular veya büyük veri kümeleri için veritabanı sistemlerinin performansını önemli ölçüde artırabilir. Veritabanı şeması, veri dağıtımı ve sorgu modellerinin derinlemesine anlaşılmasını gerektirir.
Oracle'da SQL Sorgusu Nasıl Optimize Edilir?
Oracle'da SQL sorgularını optimize etmek, sorgu yürütme planını anlamanın, sorgu performansını analiz etmenin ve uygun optimizasyon tekniklerini uygulamanın bir kombinasyonunu içerir. Oracle'da SQL sorgularını optimize etmek için izleyebileceğiniz bazı adımlar şunlardır:
- Sorgu Yürütme Planını Analiz Edin: İlk adım, Oracle'ın sorguyu nasıl yürüttüğünü anlamaktır. Sorgu yürütme planını elde etmek için EXPLAIN PLAN deyimini veya SQL Developer aracını kullanın. Yürütme planı, Oracle'ın tablolara nasıl eriştiğini, bunları birleştirdiğini, filtreleri uyguladığını ve diğer işlemleri nasıl gerçekleştirdiğini gösterir. Potansiyel darboğazları veya iyileştirme alanlarını belirlemek için planı analiz edin.
- Dizinlerin Optimize Edildiğinden Emin Olun: Dizinler, sorgu performansında çok önemli bir rol oynar. Sorgunun WHERE, JOIN ve ORDER BY yan tümcelerinde kullanılan sütunlarda uygun dizinlerin oluşturulduğundan emin olun. Birden çok sütun için bileşik dizinler kullanmayı düşünün ve INDEX_STATS görünümünü kullanarak dizin kullanımını analiz edin. Gerekirse, sorgu erişim modelleriyle eşleşmesi için dizinler oluşturun veya değiştirin.
- Bağlama Değişkenlerini Kullanın ve Sabit Değerlerden Kaçının: SQL sorgularında bağ değişkenlerini kullanmak, sorgu planının yeniden kullanılmasını sağlayarak performansı artırmaya yardımcı olur. Bağlama değişkenleri, Oracle'ın sorguları daha verimli bir şekilde ayrıştırmasına ve yürütmesine olanak tanır. Verimsiz, zor ayrıştırma ve yetersiz yürütme planlarına yol açabileceğinden, özellikle birden çok kez yürütülürken sorgularda değişmez değerler kullanmaktan kaçının.
- Birleştirme İşlemlerini Optimize Edin: Birden çok tablo içeren sorgular için, uygun birleştirme yöntemlerinin kullanıldığından emin olarak birleştirme işlemlerini optimize edin. İç içe döngü birleştirmelerinin, karma birleştirmelerin veya birleştirme birleştirmelerinin sorgu için en uygun olup olmadığını değerlendirin. Gerekirse birleştirme yöntemi seçimini etkilemek için ipuçlarını (ör. /*+ USE_HASH */) kullanabilirsiniz.
- Uygun Dizin Erişim Yöntemlerini Kullanın: Oracle, tam dizin taramaları, benzersiz taramalar ve aralık taramaları gibi çeşitli dizin erişim yöntemleri sunar. Sorgu gereksinimlerine ve veri dağıtımına göre uygun dizin erişim yöntemlerinin kullanıldığından emin olun. Sorgu yürütme planını gözden geçirin ve Oracle'a en verimli dizin erişim yöntemini seçmede rehberlik edecek ipuçlarını kullanmayı düşünün.
- Alt Sorguları Optimize Etme: Alt sorgular, sorgu performansını etkileyebilir. Mümkünse, alt sorguları birleştirmeler olarak yeniden yazın veya performansı artırmak için satır içi görünümleri kullanın. Alt sorguların verimli bir şekilde ilişkilendirildiğinden emin olun ve sorgu içinde birden çok kez yeniden kullanılıyorlarsa alt sorgu sonuçlarını somutlaştırma ihtiyacını değerlendirin.
- İstatistikleri Toplayın ve Yenileyin: Doğru istatistikler, sorgu optimizasyonu için çok önemlidir. Optimize edicinin tablo ve dizin önem düzeyi hakkında güncel bilgilere sahip olduğundan emin olmak için DBMS_STATS paketini veya ANALYZE komutunu kullanarak düzenli olarak istatistik toplayın. Çarpık veri dağılımları için histogram kullanmayı düşünün.
Unutmayın, sorgu optimizasyonu herkese uyan tek bir süreç değildir. Optimizasyon tekniklerinin etkinliği, veri hacimleri, sorgu karmaşıklığı ve belirli veritabanı ortamı gibi faktörlere bağlı olarak değişebilir. Temel ilkeleri anlamak ve sorguları sürekli olarak izlemek ve ayarlamak, optimum performansın korunmasına yardımcı olabilir.
Oracle için dbForge Studio kullanarak SQL sorgusunu Optimize etme
Oracle için DbForge Studio, SQL sorgularını optimize etmeye yardımcı olabilecek çeşitli özellikler sağlar. Sorgularınızı optimize etmek için araçtan yararlanmanın bazı yolları şunlardır:
Sorgu Profilcisi
Oracle için DbForge Studio, SQL sorgularınızın performansını analiz etmenize izin veren bir sorgu profili oluşturucu içerir. Profil oluşturucu etkinken bir sorgu çalıştırabilirsiniz ve sorgu yürütme hakkında yürütme süresi, kaynak kullanımı ve sorgu yürütme planı dahil olmak üzere ayrıntılı bilgiler sağlar. Sorgu yürütme planı, darboğazları ve optimizasyon alanlarını belirlemeye yardımcı olabilir. Yetersiz birleştirme yöntemleri, tam tablo taramaları veya eksik dizinler gibi olası performans sorunlarını belirleyebilirsiniz. Ayrıca farklı yürütme planlarını karşılaştırabilir ve çeşitli sorgu optimizasyon tekniklerinin etkisini değerlendirebilirsiniz.
Gösterim için, Stackoverflow2010 adlı SQL Server veritabanının birkaç tablosunu EltechIndia adlı Oracle veritabanına aktardım. dbForge Studio'nun Import external data yardımcı programını kullandım.
EltechIndia, Stackoverflow veritabanını kullanan kullanıcıların verilerini tutan USERS adlı bir tablo içerir. Şimdi, kullanıcıların ayrıntılarını görüntülemek için basit bir SELECT deyimi yürütmeme izin verin.
Sorgu:
u.”Id”, u.”Hakkımda”, u.”Yaş”, u.”Oluşturma Tarihi”, u”GörünenAdı”, u.”EmailHash”, u.”Son Erişim Tarihi”, u”İtibar”, u SEÇİN ”Görüntülemeler”, u.”WebsiteUrl”, u.”AccountId”
NISARG.USERS'TAN u WHERE U.”EmailHash”='[email protected]';
Üst menüden profil oluşturucu modunu etkinleştirin ve sorguyu yürütün.
Profil oluşturucunun ekran görüntüsü:
Yukarıdaki ekran görüntüsünde görebileceğiniz gibi, profil oluşturucu aşağıdaki bilgileri doldurur:
- Sorgu Profil Oluşturucu Oturumu: Sorgu profil oluşturucu oturum bölümü, sorgu yürütme planının ve oturum istatistiklerinin ayrıntılarını içerir. Ayrıca, birden çok sorgu yürütme planını karşılaştırmak için kullanılabilen herhangi bir sorgu yürütme geçmişini de içerir.
- Sorgu yürütme planı: Sorgu profil oluşturucu, sorgu yürütme planını, sonuç kümesi oluşturulurken gerçekleştirilen işlemlerin ayrıntılarıyla tablo biçiminde gösterir. Sorgunun her bir bölümü için yürütme adımlarını, erişim yöntemlerini ve tahmini maliyetleri gösterir.
Oluşturulan yürütme planı, kaynak kullanımını ve IO darboğazını ve performans düşüşüne katkıda bulunabilecek diğer parametreleri belirlemek için kullanılabilir. Sorgu profil oluşturucunun performans sorununun eksik bir dizin ekleyerek veya mevcut dizinde değişiklikler yaparak çözülebileceğini gösterdiğini varsayalım. Bu durumda dbForge studio'nun Index Manager özelliğini kullanabiliriz.
Endeks Yönetimi
Etkili indeksleme, sorgu optimizasyonu için çok önemlidir. Oracle için dbForge Studio, dizinleri oluşturmak, düzenlemek ve bırakmak gibi dizinleri yönetmek için araçlar sağlar. Tablolarınızdaki mevcut dizinleri inceleyebilir ve uygun şekilde yapılandırıldıklarından emin olabilirsiniz. Aracı, sorgu erişim kalıplarına dayalı olarak yeni dizinler oluşturmak veya mevcut dizinleri değiştirmek için de kullanabilirsiniz.
dbForge Studio, bir tabloda herhangi bir dizin oluşturmak/düzenlemek/bırakmak için kullanılabilecek bir özellik sağlar. İndekslerdeki değişiklikler dbForge stüdyosunun nesne yöneticisinden yapılabilir. Bunu yapmak için KULLANICI tablosuna sağ tıklayın ve Tabloyu Düzenle'yi seçin.
USERS tablosunun ayrıntılarını içeren başka bir sekme açılır. Burada herhangi bir dizin, kısıtlama ve sütun eklemek/değiştirmek/silmek gibi mevcut tablolarda değişiklikler yapabilirsiniz. Ayrıca, depolama, geçici geçerlilik vb. gibi diğer yapılandırma parametrelerini ekleyebilir veya değiştirebilirsiniz.
Şimdi, dizini eklemek/değiştirmek için Dizinler sekmesine tıklayın. Aşağıdaki görüntüye benzeyen dizin ayrıntılarını içeren bir pencere açılır:
Yukarıdaki ekran görüntüsünde görebileceğiniz gibi, Dizin yöneticisi üç bölüme ayrılmıştır.
- Mevcut dizinlerin listesi: Burada, bir tablo üzerinde oluşturulmuş olan dizinlerin ayrıntılarını (Dizin Adı ve Anahtar Sütunları) görebilirsiniz.
- Yeni Dizin: Burada, dizinin adı, dizin türü ve dizinin anahtar sütunları gibi dizin özelliklerini belirleyebilirsiniz.
- Dizin Beyanı Oluşturma: Bu bölümde, CREATE ifadesini görüntüleyebilirsiniz.
- İndeks eklediğimiz tablo.
- Mevcut dizinler.
- Yeni Dizin.
Komut dosyasının tamamı, nesneyi başka bir şema veya tabloda yeniden oluşturmak için kullanılabilir.
SQL Hata Ayıklama
Oracle için dbForge Studio'daki SQL hata ayıklama özelliği, sorgu yürütme sırasında SQL kodunuz üzerinde adım adım ilerlemenize, kesme noktaları belirlemenize ve değişkenleri incelemenize olanak tanır. Bu özellik, Dizin Yöneticisi ve sorgu profil oluşturucuya kıyasla çok fazla değer katmaz. Yine de bazen bir saklı yordamda hangi sorgunun performans sorunlarına neden olduğunu belirlemek yararlı olabilir. Sorguda hata ayıklayarak, optimizasyona ihtiyaç duyan alanları belirleyebilir ve gerekli ayarlamaları yapabiliriz.
Oracle için dbForge Studio'yu kullanırken, SQL sorgu optimizasyon teknikleri ve en iyi uygulamaları iyi anlamanın önemli olduğunu unutmayın. Araç, sorguları optimize etmeye yardımcı olacak değerli bilgiler ve özellikler sağlar. Yine de, sonuçları doğru bir şekilde yorumlamak ve özel veritabanınıza ve sorgu gereksinimlerinize göre uygun optimizasyonları uygulamak çok önemlidir.
Çözüm
Veritabanı Performans Ayarı, herhangi bir veritabanı yöneticisi için en önemli işlerden biridir ve veritabanı sunucusunun performansını yönetmek ve izlemek için en iyi veritabanı izleme aracını seçmek de önemli bir husustur. Bu makalede, performans ayarlamanın temellerini ve Oracle için dbForge Studio'nun veritabanı performansını geliştirmemize nasıl yardımcı olabileceğini öğrendik.