Oracle Parallel Statement Queue (PSQ)

Herkese Selam,

Bugün sizlerle Oracle’ın 11g Release 2 ile berabergelen yeni özelliklerinden Parallel Statement Queue (PSQ) yapısını incelicez. Bu yapı ile bir önceki yazımda anlattığım Auto DoP konusu birbirlieri ile ilintili olduğundan dolayı öncesinde o yazıyı okumak bu yazıyı anlama bağlamında faydalı olacaktır.

Öncelikle PSQ ya girmeden Oracle 11g ‘nin statementları ne şekilde çalıştırmak istediğinden bahsedicem. Oracle 11g Release 2 nin karakteri; eğer bir SQL statement için parallel çalıştırma kararı çıktıysa ve bu statement için Oracle bir parallelik seviyesi hesaplayıp execution planı çıkardıysa, Oracle bu sorguyu mutlaka hesapladığı parallelikte çalıştırmak isteme karakterini göstermektedir. Ama öte yandan sistemimizdeki donanım kaynaklarımız sınırsız olmadığından dolayı aynı anda parallel çalışacak birden çok statement  sistemimizde olduğu durumda yeterli kaynak kalmadığı takdirde parallel çalışacak statementların bir kısmının seri çalışması gibi bir durum ortaya çıkacaktır. Oracle 10g’de parallel execution planı çıkarılan bir statement ihtiyacı olan yeterli kaynağı alamadığı zaman seri bir şekilde çalıştırıldığına çoğu zaman şahit olmuşuzdur. Aslında parallel bir şekilde çok daha hızlı bir şekilde çalışacak  statementımızın kaynak yetersizliğinden dolayı seri çalışarak çok daha uzun sürede bitmesi sorgu performansımızı ve cevap sürelerini kötü yönde etkileyecektir. Oracle 11g R2’de bu durumu engelleme adına Parallel Statement Queue özelliğini sistemine entegre etti.

kaynak:https://blogs.oracle.com/datawarehousing/entry/auto_dop_and_parallel_statemen

Parallel çalışma kararı çıkan ve buna istinaden Oracle’ın parallelik seviyesi hesapladığı   (Auto DoP) statement sistemimimizde yeteri kadar available kaynak varsa ihtiyacı olan yeterli kaynağı alır ve çalışmaya başlar. Bundan sonra gelen parallel çalışacak sorgu yine sistemde kendisi için hesaplanan parallelik seviyesi için yeterli kaynak varmı diye kontrol eder varsa oda kaynağı alır ve çalışır eğer ihtiyacı olan kaynağı bulamaz ise FIFO ile yönetilen bir kuyruğa gönderilir ve burada ihtiyacı olan yeterli kayanak available olana kadar bekletilir.  Yeterli kaynak oluştuğundan kuyruğun başından ilgili statement çekilir ve kendisi için hesaplanan parallellik seviyesinde çalıştırılmaya başlanır. Burada akıllara kuyrukta statement’ın beklemesi ile ilgili bir extra zaman kaybı oluşuyormuş gibi görünsede parallel çalışan işlerdeki performans kazancının katlar mertebesinde olacağı düşünüldüğünde kuyrukta bekleme zamanını küçük bir ayrıntı olmaya başlıyor. Örneğin  seri olarak 1 saat süren bir extraction işleminin paralel çalıştığında 20 dk da bitmesi kuyrukta bekleyeceği 1-2-3…10… dk yı önemsizleştirmektedir. Ama illa statement’ın kuyrukta beklemesini istemiyorsak sorguya NO_STMT_QUEUING hinti verilmesi yeterlidir.

PSQ özelliğini kullanabilmek için PARALLEL_DEGREE_POLICY parametresinin Auto olarak set edilmesi yeterlidir. Limited veya Manual olarak set edildiği takdirde database’in bu özelliğini kullanamamaktayız.

PSQ ile ilgili önemli olan diğer bir konuda sistemimzin parallel açabileceği available proses sayısıdır. Bu değer default olarak ( PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT x INSTANCE_COUNT)DoP*4 kadardır.  Bu bilgi PARALLEL_SERVERS_TARGET parametresinde tutulur. Eğer sistemimde 64 tane maximum active server proses bulunabiliyorsa(paralel çalışabilecek server proses sayısı) ve bunların 60 tanesi şuan kullanılıyorsa yeni gelen ve 16 parallel prosese ihtiyaç duyan bir istek için yeteri kadar server olmadığı için bu gelen yeni istek kuyruğa yollanacaktır. Birde sistemde PARALLEL_MAX_SERVERS parametresi vardır. Bu parametre PARALLEL_SERVERS_TARGET parametresinden daha büyüktür, bunun nedeni paralel çalışacak işlerin seri çalışacak işlerin kaynağından yemesini engellemektir. Eğer bu 2 parametre(PARALLEL_SERVERS_TARGET , PARALLEL_MAX_SERVERS ) birbirine eşit olsaydı tüm kaynaklar paralel işlemler tarafından alınabilirdi böylelikle seri çalışacak işlere kaynak kalmazdı. Queue da ne kadar iş beklerse beklesin seri işler hiç bir zaman bekletilmez ve hemen çalıştırılır. Bu yüzden bu parametrelerin değerleri Queue’yu aktif ettiğimizde dikkatli ayarlanmalıdır.

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Root, Uncategorized and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s