PL/SQL Subprograms

8.16. Parallelizing Table Functions

Agar sebuah table function di eksekusi secara paralel (bersamaan), ia harus memiliki input parameter terpartisi. Paralelisasi diaktifkan untuk sebuah table function, jika, dan hanya jika, kedua kondisi berikut ini terpenuhi:

Jika klausa PARTITION BY tidak ditetapkan untuk sembarang input klausa REF CURSOR sebagai bagian dari klausa PARALLEL_ENABLE, SQL compiler tidak dapat menentukan bagaimana partisi data secara benar. Perlu diingat bahwa hanya argumen-argumen REF CURSOR bertipe strong yang dapat ditetapkan di dalam klausa PARTITION BY, kecuali kita menggunakan PARTITION BY ANY.

8.16.1. Eksekusi Paralel dari Table Functions

Dengan eksekusi paralel dari sebuah table function yang muncul di dalam daftar SELECT, eksekusi dari function tersebut didorong ke dan diadakan oleh multiple slave scan processes. Hal ini masing-masing mengeksekusi function tersebut pada sebuah segmen input data dari function tersebut.

Sebagai contoh, query

SELECT f(col1) FROM tab;

adalah terparalel jika f merupakan sebuah function yang murni. SQL yang dieksekusi oleh sebuah slave scan process mirip dengan:

SELECT f(col1) FROM tab WHERE ROWID BETWEEN :b1 AND :b2;

Setiap slave scan beroperasi pada sebuah range dari rowids dan mengaplikasikan function f ke setiap baris-baris yang terkandung. Function f kemudian dieksekusi oleh scan processes; ia tidak berjalan secara independen dari mereka.

Tidak seperti sebuah function yang muncul di dalam daftar SELECT, sebuah table function dipanggil dalam klausa FROM dan menghasilkan sebuah collection. Hal ini mempengaruhi cara bahwa input data dari table function dipartisi di antara slave scans karena pendekatan partitioning haruslah sesuai untuk operasi yang dilakukan oleh table function tersebut. (Sebagai contoh, sebuah operasi ORDER BY memerlukan input untuk menjadi range-partitioned, mengigat sebuah operasi GROUP BY memerlukan input untuk menjadi hash partitioned.)

Sebuah table function itu sendiri menentukan di dalam deklarasinya pendekatan partitioning yang sesuai dengannya. Function tersebut kemudian dieksekusi di dalam sebuah operasi two-stage (dua-tingkat). Pertama, satu set dari slave processes mempartisi data sebagai directed dalam deklarasi table function; lalu set keduadari slave processes mengeksekusi table function dalam paralel pada partitioned data.

Sebagai contoh, table function dalam query berikut ini memiliki sebuah parameter REF CURSOR:

SELECT * FROM TABLE(f(CURSOR(SELECT * FROM tab)));

Scan dilakukan oleh satu set dari slave processes, yang mendistribusikan ulang baris-baris data (berdasarkan pada metode partitioning yang ditentukan dalam deklarasi function tersebut) ke set kedua dari slave processes yang secara aktual mengeksekusi function f dalam paralel.

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] PL/SQL Subprograms | Hastinapura […]

[…] Silahkan melanjutkan membaca pembahasan PL/SQL Subprograms […]

[…] Klausa AUTHID menentukan apakah seluruh subprogram-subprogram ter-package dijalankan dengan privileges dari definer (default) atau invoker-nya, dan apakah referensi tak terkualifikasi dari mereka terhadap schema objects ditetapkan di dalam schema dari definer atau invoker tersebut. Untuk informasi lebih, kita dapat membaca kembali pembahasan PL/SQL Subprograms. […]

[…] Dynamic SQLPL/SQL Object TypesPL/SQL PackagesPL/SQL SubprogramsInteraksi PL/SQL dengan […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word