Oracle
11.2 sürümü ile yeni gelen DBMS_PARALLEL_EXECUTE prosedürü, büyük veri
setlerini artalan şekilde güncellemeye izin veren bir pakettir. Temel olarak,
ROWID veya nümerik kolon veya kullanıcı tabanlı SQL komutuna dayalı satırlara
ayırarak daha küçük veri yığınları oluşturulur, ardından bu yığınlar paralel
şekilde güncellenir. Bu paketin avantajları
ise; bu yığınlar bireysel olarak commit edilmektedir ve ROWID’e dayalı yığınlar
olduğunda daha iyi performansa ulaşılmaktadır.
DBMS_PARALLEL_EXECUTE neden önemlidir?
1. Büyük bir tekil işlem birçok işlem
yığınına bölünebilmektedir.
2. Golden Date veya Streams gibi bağlı
sistemlerde daha az etki yapmaktadır.
3. Yığınlar ROWID ve bloklara bağlı
olduğunda paralel DML işlemleri ile kıyaslandığında daha iyi performans
göstermektedir.
4. Daha az undo alanına ihtiyaç duyar ve
bu sebeple ORA-01555 hatası ile karşılaşma ihtimali daha düşük olmaktadır.
5. Hata ile karşılaşıldığında rollback
işlemine etkisi şiddetli olmamaktadır.
6. Kilit süresi daha düşüktür.
7. Hatalı yığın işlemlerini yeniden
başlatabilmektedir.
8. Diğer paralel özelliklerin aksine, DBMS_PARALLEL_EXECUTE paketi Enterprise Edition lisansına şimdilik ihtiyaç
duymamaktadır.
9. Manuel kodlama gereksinimini
azaltmakta ve paralel işlemler üzerinden daha iyi tekdüze dağıtım
yapabilmektedir.
DBMS_PARALLEL_EXECUTE işlem adımları
1. CREATE_TASK ile yeni bir görev
oluşturulur.
2. Aşağıdakilerden birini kullanarak
istenilen boyutlarda yığınlar oluşturulur.
CREATE_CHUNKS_BY_ROWID
CREATE_CHUNKS_BY_NUMBER_COL
CREATE_CHUNKS_BY_SQL
3. Update komutu tanımlanır.
4. Paralel çalışacak görev RUN_TASK komutu
ile yürütülür.
5. Hata işleme gerçekleştirilir ve
RESUME_TASK ile hatalı yığınlar tekrardan çalıştırılır.
Aşağıdaki
örnekte ilk adımda ilgili görev oluşturulmaktadır.
DBMS_PARALLEL_EXECUTE.CREATE_TASK
(dbms_prl_task1);
Ardından
ROWID’ye dayalı yığınlar oluşturulur. Örne şema HR ve tablo ise EMP tablosudur.
DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID
(task_name =>
dbms_prl_task1
, table_owner
=> HR
, table_name
=> 'EMP'
, by_row =>
TRUE
, chunk_size
=> 1000);
Son adımda
ise oluşturulan yığınlar üzerinden 4 paralel proses ile çalışanların maaşlarını
%10 artıran UPDATE işlemi alttaki gibi yapılmaktadır.
DBMS_PARALLEL_EXECUTE.
RUN_TASK
(task_name => dbms_prl_task1
, sql_stmt =>
'UPDATE HR.EMP e
SET e.salary = e.salary *0.10
WHERE rowid BETWEEN 1 AND 12000’
, language_flag
=> DBMS_SQL.native
, parallel_level
=> 4);
0 yorum:
Yorum Gönder