Paralel Sorgu Nedir?
Oracle veritabanında, Paralel Query (Paralel Sorgu) mekanizması, büyük ölçekli veri işleme iş yüklerini, tek bir işlemi alt görevlere bölerek ve bu görevleri birden fazla CPU çekirdeği üzerinde eşzamanlı olarak yürüterek hızlandıran temel bir performans özelliğidir. Bu yaklaşım, geleneksel seri işlemenin getirdiği darboğazları ortadan kaldırmayı hedefler. Özellikle full table scan, büyük tablo birleştirmeleri (join), indeks oluşturma ve veri yükleme (DML) gibi operasyonların yürütülme sürelerini kritik ölçüde azaltır. Paralellik, donanım kaynaklarının etkin kullanımını sağlayarak, sistemdeki toplam işlem gücünden (CPU, I/O) tam verimle yararlanılmasını mümkün kılar.
Tek bir Query Coordinator (QC) prosesi, işin paralelleştirilmesinden ve sonuçların birleştirilmesinden sorumludur. Çalışan prosesler (parallel execution servers - PX server) ise iş parçalarını eşzamanlı işler. Bu mimari, yalnızca sorgu (SELECT) işlemleriyle sınırlı değildir; DDL (CREATE TABLE AS SELECT) ve DML (INSERT, UPDATE, DELETE) operasyonlarında da etkin şekilde kullanılabilir.
Paralel Çalışmanın Temel Bileşenleri
Oracle Parallel Query mimarisinin verimli işleyişi, birbirleriyle uyum içinde çalışan birkaç kritik bileşene dayanır. Bu bileşenler, iş dağıtımını, yürütmeyi ve koordinasyonu yönetir. Query Coordinator (QC veya Paralel Koordinatör İşlemi), kullanıcı oturumunu temsil eden ve tüm paralel işlemi kontrol eden ana işlemdir. QC, işi alt görevlere böler, paralel sunuculara dağıtır, onların çalışmasını yönlendirir ve nihai sonuç kümesini toplar ve istemciye döndürür. Paralel yürütme sunucuları (Parallel Execution (PX) Servers), gerçek işi yüklenen ve paralel olarak çalışan arka plan işlemleridir.
- Parallel Execution Coordinator (QC): İş planını oluşturur, PX sunucularını yönetir ve sonuçları birleştirir.
- Parallel Execution Servers (PX Servers): Gerçek veri tarama, filtreleme, birleştirme ve sıralama işlemlerini paralel olarak yürütür.
- Producer ve Consumer İşlemler: Paralel işlem hattı (pipeline) oluşturmak için, bir grup PX sunucusu (producer) veriyi işler ve diğer bir grup (consumer) bu veriyi tüketir. Bu, veri akışını sürekli kılar ve bekleme sürelerini minimize eder.
Parallel Query İşleyiş Modeli
Oracle veritabanında bir paralel sorgunun yürütülmesi, belirli ve sıralı aşamalardan oluşan sofistike bir model izler. İlk aşamada, Query Coordinator (QC), sorgunun yürütme planını analiz eder ve optimizasyon sürecinde paralellik fırsatlarını belirler. Sorgu, bir paralel yürütme planına dönüştürülür. Bu plan, işin paralel sunucular arasında nasıl bölüneceğini (granülasyon), veri akış yönünü (producer-consumer) ve dağıtım yöntemlerini (distribution method) tanımlar. İkinci aşamada, gerekli sayıda PX sunucusu process havuzundan (örneğin, tanımlı parallel_max_servers) tahsis edilir.
Paralel sunucular genellikle ikili setler halinde (producer/consumer) organize edilir ve bir veri akış hattı (pipeline) oluşturur. Örneğin, bir tablo taraması yapan producer sunucular, buldukları satırları hemen sıralama veya birleştirme işlemi yapan consumer sunuculara iletir. Bu dağıtım, çoğunlukla P->C Dağıtımı olarak adlandırılır ve QC'nin dahil olmadığı doğrudan bir sunucudan-sunucuya (inter-process communication - IPC) iletişim sağlar, böylece koordinatör üzerindeki yükü ve veri taşıma maliyetni azaltır.
Dağıtım mekanizmalarının anlaşılması için aşağıdaki tablo, yaygın kullanılan dağıtım yöntemlerini özetlemektedir:
| Dağıtım Yöntemi | Açıklama | Tipik Kullanım Alanı |
|---|---|---|
| Hash | Her satır, bir hash fonksiyonunun çıktısına göre belirli bir PX sunucusuna yönlendirilir. Aynı değere sahip satırlar aynı sunucuya gider. | GROUP BY, JOIN, DISTINCT işlemleri için ideal. |
| Range | Veriler, belirli bir sütunun değer aralıklarına göre sunucular arasında bölünür. | Sıralı veri işleme veya partition bazlı paralellik. |
| Round Robin | Satırlar, her yeni satır bir sonraki sunucuya gelecek şekilde sırayla dağıtılır. | Hızlı ve basit dağıtım gerektiren full scan operasyonları. |
| Broadcast | Bir küçük tablonun tüm satırları, her bir PX sunucusunun bir kopyasını alması için kopyalanır. | Büyük-küçük tablo birleştirmelerinde (broadcast join). |
Paralellik Derecesinin (DOP) Belirlenmesi
Paralellik Derecesi (Degree of Parallelism - DOP), belirli bir işlem için kaç adet paralel yürütme sunucusunun kullanılacağını tanımlayan kritik bir parametredir. DOP'un uygun belirlenmesi, kaynak kullanımı ve performans arasında optimal dengeyi sağlamak açısından hayati öneme sahiptir. Yüksek bir DOP, işi daha fazla CPU'ya yayar ancak aşırı yüksek değerler, koordinasyon yükünü artırarak, kaynak çekişmesine ve performans düşüşüne yol açabilir.
Oracle, DOP değerini belirlemek için esnek bir yapı sunar. Değer, sorgu, nesne veya sistem seviyesinde tanımlanabilir. Otomatik Paralellik Derecesi (Auto DOP), Oracle 11g R2 ile gelen ve Oracle'ın iş yükünü ve sistem kaynaklarını analiz ederek dinamik olarak uygun bir DOP önermesini sağlayan gelişmiş bir özelliktir. Bu mekanizma, paralel_i/o_cap_enabled ve parallel_degree_policy gibi parametrelerle kontrol edilir. Auto DOP, karmaşık iş yüklerinde manuel ayarlamalara göre daha etkili sonuçlar verebilir.
DOP ayarında temel yaklaşımlar şunlardır:
- Manuel (Hints ve Tanımlamalar): Geliştirici, sorguya /*+ PARALLEL(table_name, degree) */ gibi bir hint ekleyerek veya DBA, tablo veya indeksi `ALTER TABLE ... PARALLEL degree;` komutuyla değiştirerek sabit bir DOP belirleyebilir.
- Otomatik (Auto DOP): Oracle Optimizer, sorgunun maliyetini ve mevcut kaynakları değerlendirir. İşin paralel çalışmaya değer olduğuna karar verirse (parallel_min_threshold'u aşarsa), uygun bir DOP hesaplar.
- Adaptive Paralellik: Daha ileri seviyede, paralel_i/o_cap_enabled parametresi ile Oracle, depolama alt sisteminin (örneğin, Exadata) I/O kapasitesini ölçerek DOP'u buna göre ayarlayabilir.
Paralel İşlem Tipleri ve Dağıtım Yöntemleri
Oracle veritabanı, sorgu işlemenin çeşitli aşamalarında paralelliği etkinleştirir, bu da farklı işlem tiplerinin ortaya çıkmasına neden olur. Paralel Full Table Scan (FTS), belki de en bilinen tiptir; büyük bir tablonun blokları, paralel sunucular arasında bölünerek aynı anda taranır. Paralel İndeks Taraması ise, özellikle partitioned indekslerde veya fast full index scan operasyonlarında kullanılabilir. Paralel sunucular, indeksin farklı dallarını veya partition'larını tarayabilir.
Daha karmaşık işlemler için Paralel Join teknikleri kritik öneme sahiptir. Hash Join, Sort Merge Join ve Nested Loop Join gibi birleştirme yöntemleri paralel olarak yürütülebilir. Burada anahtar nokta, birleştirilecek veri kümelerinin (build table ve probe table) sunucular arasında, birleştirme anahtarına göre yeniden dağıtılması (hash redistribution) veya küçük olan tablonun tüm sunuculara kopyalanmasıdır (broadcast). Paralel Sıralama (ORDER BY) ve Gruplama (GROUP BY) işlemlerinde ise, her paralel sunucu kendi veri parçasını sıralar/gruplar, ardından QC veya başka bir sunucu seti bu kısmi sonuçları birleştirerek (parallel merge) nihai sonucu üretir.
Dağıtım yöntemleri, verinin paralel sunucular arasında nasıl hareket ettiğini belirleyen ve performansı doğrudan etkileyen algoritmalardır. Hash Dağıtım, eşit yük dağılımı sağlamak ve aynı anahtar değerine sahip satırları aynı sunucuda toplamak için bir hash fonksiyonu kullanır. Bu, grup veya birleştirme işlemleri için mükemmeldir. Broadcast Dağıtım, küçük bir tablonun tamamının her bir paralel sunucuya kopyalanmasıdır. Bu yöntem, büyük bir tablo ile küçük bir tablo birleştirilirken verinin yeniden dağıtılmasının maliyetinden kaçınır, ancak küçük tablo boyutunun kontrolü şarttır.
Veri yönetimi işlemleri de paralellikten büyük fayda sağlar. Paralel DML (PDML), INSERT, UPDATE, DELETE ve MERGE işlemlerinin hızlandırılmasını sağlar. PDML'de, her paralel sunucu, işlem yapılacak tablonun farklı bir bölümünü (örneğin, farklı bir partition) işler. Bu, ayrıca yüksek seviyede kilitleme gerektirir ve genellikle partition'lanmış tablolarda daha etkilidir. Benzer şekilde, Paralel DDL, CREATE TABLE AS SELECT (CTAS) veya CREATE INDEX gibi nesne oluşturma işlemlerini hızlandırr. Örneğin, büyük bir tablodan veri seçerek yeni bir tablo oluştururken, hem okuma (SELECT) hem de yazma (CREATE) işlemleri paralel olarak yürütülebilir.
- Veri Paralelliği (Data Parallelism): Veri kümesinin farklı bölümlerinin farklı işlemcilerde işlenmesi. (Örn: Partition'lar üzerinde paralel tarama).
- Görev Paralelliği (Task Parallelism): Sorgu planındaki farklı operasyonların (örn: tarama ve birleştirme) farklı işlemci setleri tarafından eşzamanlı yürütülmesi.
- Pipeline Paralelliği: Bir operasyonun çıktısının, bir sonraki operasyona, ilk operasyon bitmeden aktarılması. (Producer-Consumer modeli).
Performans ve Kullanım İpuçları
Oracle Parallel Query'in sunduğu performans avantajlarından tam olarak yararlanmak ve olası tuzaklardan kaçınmak için bir dizi kritik faktöre dikkat edilmelidir. İlk ve en önemli prensip, paralelliğin her sorgu için otomatik bir çözüm olmadığının anlaşılmasıdır. Küçük tablolar veya hızlı birincil anahtar sorguları için paralel işlem, koordinasyon yükü nedeniyle seri işlemden daha yavaş olacaktır. Paralelliğin fayda sağlayacağı iş yükleri, tipik olarak verinin büyük bir yüzdesine erişen, yüksek I/O veya CPU gerektiren operasyonlardır.
Sistem kaynaklarının doğru yapılandırılması elzemdir. parallel_max_servers parametresi, sistem genelinde aynı anda çalışabilecek maksimum paralel sunucu sayısını sınırlar ve aşırı yüksek değerler bellek ve CPU çekişmesine yol açabilir. parallel_adaptive_multi_user parametresi etkinleştirildiğinde, Oracle, sisteme bağlı eşzamanlı kullanıcı sayısını dikkate alarak DOP'u dinamik olarak düşürerek, sistemin genel verimliliğini artırabilir. Ayrıca, paralel sunucular arasındaki veri alışverişi için kullanılan bellek miktarı, parallel_execution_message_size parametresi ile optimize edilmelidir.
Performans izleme ve sorun giderme için, Oracle'ın dinamik performans görünümleri (Dynamic Performance Views) vazgeçilmez araçlardır. V$PQ_TQSTAT görünümü, paralel bir sorgunun yürütülmesi sırasındaki veri dağıtım istatistiklerini sunarak, her bir paralel sunucuya kaç satır gönderildiğini ve dağıtımın dengeli olup olmadığını gösterir. Dengesiz bir dağıtım ("parallel skew"), bazı sunucuların diğerlerinden çok daha fazla çalışmasına neden olarak genel sorgu süresni uzatır. V$PQ_SESSTAT ise, paralel sorgu oturumu genelindeki çeşitli istatistikleri sağlar.