Você está na página 1de 4

Analisis Refresh Materialized View in PostgreSQL

Refresh materialized view adalah proses untuk melakukan pembaharuan terhadap materialized view. Fungsi
untuk refresh materialized view pada PostgreSQL versi 11.1 yang terdapat pada file matview.c yang dengan
lokasi file yaitu postgresql-11.1/src/backend/commands/matview.c. Proses melakukan eksekusi perintah
REFRESH MATERIALIZED VIEW menggunakan fungsi ExecRefreshMatView() dengan flow proses
sebagai berikut.

Refresh
Set Materialized Checking
Start materialized view
View as Populated Materialized View
data fill

yes Cocurrently no

Refresh
Refresh
Materialized View Materialized View
by Match Merge by Heap Swap

Materialized View
Incremental
Maintenance

Finish

Penjelasan proses refresh materialized view adalah sebagai berikut.

1. Set Materialized View as Populated

Berikut adalah proses menandai materialized view yang ada pada relasi apakah populated atau
tidak. Sebelum dilakukan pengeksekusian refresh dipastikan materialized view tersebut dapat
dilakukan generate atau tidak, dengan mendapatkan nama relasi dari materialized view
tersebut.
2. Refresh Materialized View Data Fill

Proses ini memastikan bahwa perencanaan terhadap query yang telah mengubah isi basis data
saat dilakukan refresh akan dikirim ke dalam argumen DestReceiver sebagai target tabel
materialized view. DestReceiver adalah tempat persinggahan sementara atau transient data fill.
3. Checking Materialized View
Pada proses ini menjelaskan tentang pengecekan yang terjadi pada materialized view saat dilakukan
eksekusi refresh. Pengecekan yang dilakukan adalah memastikan bahwa query refreshing untuk target
materialized view tersebut merupakan sebuah materialized view, kemudian memastikan refresh yang
dilakukan concurrent adalah materialized view yang populated untuk dapat dilakukan refresh
materialized view. Jika materialized view concurrent maka dilakukan refresh materialized view by
match merge, jika tidak maka dilakukan refresh materialized view by heap swap.

4. Refresh Materialized View by Match Merge

Pada proses ini, fungsi refresh_by_match_merge adalah refresh materialized view dengan
menggunakan statement concurrently karena memiliki Exclusivelock untuk materialized view yang
terlebih dahulu dilakukan refresh. Kemudian menemukan unique index di beberapa tabel
materialized view dengan menggunakan full outer join untuk melakukan refresh materialized
view. Jika index ditemukan kemudian di beberapa tabel tidak ada data duplicate dan null maka
akan di-insert ke tabel temporary kemudian dilakukan refresh materialized view..
5. Refresh Maerialized View by Heap Swap

Pada proses ini, fungsi refresh_by_heap_swap adalah refreh materialized view dengan
menukar target tabel dengan tabel sementara dengan index yang terdapat pada target table,
kemudian tabel sementara dihapus.
Declare setpopulatedstate(tuple)

#fungsi ini bertujuan untuk memilih heap tuple yang valid


Output : heap tuple yang valid
Declare refresh materialized view data fill
Input: heap tuple yang valid
Fungsi refresh materialized view data fill akan dilakukan query rewrite atau menganalisis ulang
query, kemudian melakukan plan untuk query yang akan dilakukan refresh yang akan disimpan
didalam transient yang memiliki Destination receiver yaitu target
Declare function rewrite
Declare function query plan
Check if data effected materialized view then
Declare DestReciever
Declare transient
Declare checking materialized view

1 Declare Setpopulated (tuple)


2 Declare RefreshMatViewDataFill(DestReciever,query)
3 Declare function QueryRewrite
4 Declare function QueryPlan
5 Declare DestReceiver
6 Declare transient
7 Declare CheckingMaterializedView
8 For each Queryplan in query{
9 If (QueryPlan is affected DestReciever) then
10 Return Refresh heap swap
11 Else:
12 Drop
13 Return result

bcakfbwef
1 START:
2 DECLARE QUERY_PLAN AS QUERY
3 GET All_Table_List
4
5 DO CHECKING_TABLE
6 IF (!All_Table_List IS EFFECTED) THEN
7 SET All_Table_List AS NOT EFFECTED
8 ELSE
9 SET All_Table_List AS EFFECTED
10
11 GET All_Table_List From CHECKING_TABLE
12 IF (All_Table_List IS EFFECTED) THEN
13 REFRESH_MATERIALIZED_VIEW
14 ELSE
15 DROP All_Table_List
16
17 RETURN RESULT
List Refresh
All Table Effected Materilized Materialized
Base Table Checking Table Effected Filter Table Materialized
View View
View

Você também pode gostar