All Products
Search
Document Center

PolarDB:Melakukan pembaruan penuh pada tampilan yang di-materialisasi

Last Updated:Jun 04, 2026

Tampilan yang di-materialisasi adalah objek database yang mengoptimalkan kueri kompleks dengan melakukan perhitungan awal dan menyimpan hasilnya. Dengan menyimpan hasil tersebut, Anda dapat langsung melakukan kueri terhadap data yang telah dihitung sebelumnya. Pendekatan ini menghindari eksekusi ulang operasi yang memakan banyak sumber daya serta mempercepat kueri dengan menukar ruang penyimpanan demi waktu respons.

Tampilan yang di-materialisasi dalam kluster PolarDB for MySQL mendukung pembaruan penuh. Metode refresh terjadwal maupun manual didukung. Tampilan yang di-materialisasi menggunakan mekanisme tugas latar belakang untuk refresh. Anda dapat menggunakannya bersama IMCI untuk mempercepat kueri, yang meningkatkan efisiensi tugas refresh dan mengurangi beban pada node read-only. Berbasis arsitektur HTAP dari PolarDB, fitur ini lebih lanjut meningkatkan kemampuan pemrosesan analitik (AP).image.png

Berbeda dari tampilan biasa, tampilan yang di-materialisasi berisi salinan fisik data yang dapat langsung dikueri. Tampilan ini terdiri atas tampilan itu sendiri dan tabel dasar fisik yang mendasarinya.

  • Membuat tampilan yang di-materialisasi: Pembuatan tampilan dan materialisasi data merupakan dua langkah terpisah. Proses materialisasi adalah operasi asinkron yang didorong ke tugas latar belakang untuk mengisi tabel dasar fisik. Nama tabel dasar fisik dikaitkan dengan tampilan tersebut. Tugas materialisasi dan refresh mencakup operasi kueri dan insert. Operasi kueri dapat dialihkan ke node read-only dengan IMCI untuk mempercepat kueri dan mengurangi dampak pada node primary.

  • Menjalankan kueri pada tampilan yang di-materialisasi: Kueri pada tampilan yang di-materialisasi dieksekusi terhadap tabel dasar fisik yang mendasarinya.

  • Melakukan refresh pada tampilan yang di-materialisasi: Proses pembaruan penuh membuat tabel dasar fisik baru yang tersembunyi. Setelah pernyataan refresh dieksekusi pada tabel tersembunyi tersebut, sistem menukar tabel dasar asli dan tersembunyi. Aksi ini memperbarui tabel metadata dengan informasi tabel dasar fisik terbaru dan menyinkronkannya dengan struktur dalam memori untuk kueri.

  • Memantau dan mengelola tugas: Anda dapat melakukan kueri terhadap antrian tugas refresh latar belakang untuk melihat detail tugas. Anda juga dapat memantau dan mengelola tugas dengan menjeda atau me-restart tugas refresh terjadwal untuk tampilan yang di-materialisasi pada tingkat tabel, database, atau global.

Persyaratan

Kluster PolarDB for MySQL Anda harus memenuhi salah satu persyaratan berikut:

  • MySQL 8.0.1, dan versi mesin minor harus 8.0.1.1.51 atau lebih baru.

  • MySQL 8.0.2, dan versi mesin minor harus 8.0.2.2.31 atau lebih baru.

Manfaat

  • Menghindari perhitungan berulang: Untuk kueri kompleks yang memakan banyak sumber daya, hasil dihitung sekali dan digunakan berulang kali, sehingga secara signifikan meningkatkan efisiensi kueri.

  • Agregasi data di awal: Anda dapat melakukan agregasi data di awal untuk laporan harian, mingguan, dan bulanan guna mempercepat pembuatan laporan dan analitik data.

  • Kueri yang dioptimalkan pada dataset besar: Mengurangi pemindaian langsung terhadap jumlah besar data mentah dan mempercepat waktu respons untuk kueri analitik.

  • Dukungan untuk analisis multidimensi: Anda dapat melakukan perhitungan awal data agregat untuk berbagai kombinasi dimensi guna memberikan dukungan efisien bagi skenario analisis multidimensi seperti OLAP.

Kasus penggunaan

Tampilan yang di-materialisasi mengoptimalkan performa kueri dengan melakukan perhitungan awal dan menyimpan hasil kueri. Fitur ini sangat berguna untuk memproses data skala besar dan kueri kompleks. Fitur ini mengurangi overhead komputasi real-time dan menyederhanakan logika kueri kompleks, sehingga ideal untuk pembuatan laporan cepat dan analitik data.

  • Menghindari perhitungan berulang: Cocok untuk menyimpan hasil perhitungan intensif sumber daya yang sering dikueri. Penggunaan tampilan yang di-materialisasi menghindari perhitungan ulang data yang sama, sehingga secara signifikan meningkatkan efisiensi kueri.

  • Agregasi data di awal: Dalam pembuatan laporan dan analitik data, tampilan yang di-materialisasi dapat melakukan agregasi data di awal, seperti data penjualan harian, mingguan, atau bulanan serta data perilaku pengguna. Menyimpan hasil perhitungan di awal mengurangi waktu dan sumber daya yang dibutuhkan untuk komputasi real-time.

  • Kueri yang dioptimalkan pada dataset besar: Melakukan kueri langsung terhadap volume besar data mentah bisa memakan waktu akibat pemindaian skala besar yang sering terjadi. Tampilan yang di-materialisasi dapat mengurangi kebutuhan akses langsung ke data mentah, sehingga mempercepat kueri dan analisis.

  • Dukungan untuk analisis multidimensi: Tampilan yang di-materialisasi dapat melakukan perhitungan awal data agregat untuk berbagai kombinasi dimensi, memungkinkan respons kueri yang cepat dan efisien untuk analisis data multidimensi berbasis skenario.

Parameter

Metode untuk memodifikasi parameter kluster PolarDB berbeda antara konsol dan sesi database. Perbedaannya sebagai berikut:

  • Di PolarDB console

    • Kompatibilitas: Untuk kompatibilitas dengan file konfigurasi MySQL, beberapa parameter kluster di PolarDB console memiliki awalan loose_.

    • Prosedur: Temukan dan modifikasi parameter yang memiliki awalan loose_.

  • Di sesi database (menggunakan command line atau client)

    • Prosedur: Saat Anda menggunakan perintah SET untuk memodifikasi parameter di sesi database, hapus awalan loose_ dan gunakan nama parameter aslinya.

Parameter

Deskripsi

loose_materialized_view_enabled

Menentukan apakah tampilan yang di-materialisasi diaktifkan. Nilai yang valid:

  • ON (default): Mengaktifkan fitur.

  • OFF: Menonaktifkan fitur.

loose_enable_materialized_view_parallel

Menentukan apakah fitur kueri paralel untuk tampilan yang di-materialisasi diaktifkan. Nilai yang valid:

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

Membuat tampilan yang di-materialisasi

Sintaks

CREATE
  MATERIALIZED VIEW view_name [(column_list)]
  [REFRESH [COMPLETE|FAST]]
  [ON [COMMIT|DEMAND]]
  [START WITH now()] [NEXT now() + interval 1 hour]
  [[DISABLE|ENABLE] QUERY REWRITE]
  AS select_statement

Izin

  • Izin CREATE pada database tempat tampilan yang di-materialisasi berada.

  • Izin SELECT pada kolom relevan (atau seluruh tabel) dari semua tabel dasar untuk tampilan yang di-materialisasi.

Parameter

Parameter

Wajib

Deskripsi

view_name

Ya

Nama tampilan yang di-materialisasi.

column_list

Tidak

Kolom yang akan disertakan dalam tampilan yang di-materialisasi. Untuk memberikan nama spesifik pada kolom tampilan, cantumkan dalam column_list, dipisahkan koma (,).

REFRESH

Tidak

Menentukan kebijakan refresh untuk tampilan yang di-materialisasi.

  • COMPLETE (default): Pembaruan penuh.

  • FAST: Pembaruan bertahap.

Catatan

Topik ini menjelaskan kebijakan pembaruan penuh. Untuk informasi tentang kebijakan pembaruan bertahap, lihat Pembaruan bertahap tampilan yang di-materialisasi.

ON

Tidak

Menentukan jenis materialisasi tampilan yang di-materialisasi.

  • COMMIT: Tampilan yang di-materialisasi real-time.

  • DEMAND (default): Tampilan yang di-materialisasi asinkron.

Catatan

Saat ini, hanya jenis tampilan yang di-materialisasi asinkron yang didukung.

START WITH

Tidak

Waktu mulai untuk refresh otomatis tampilan yang di-materialisasi asinkron.

NEXT

Tidak

Interval refresh untuk tampilan yang di-materialisasi asinkron.

Catatan

Jika Anda tidak menentukan NEXT, tampilan hanya dapat direfresh secara manual.

QUERY REWRITE

Tidak

Menentukan apakah tampilan yang di-materialisasi mendukung penulisan ulang kueri.

  • DISABLE (default): Tidak didukung.

  • ENABLE: Didukung.

Catatan

Saat ini, penulisan ulang kueri tidak didukung.

select_statement

Ya

Pernyataan kueri yang mendefinisikan data untuk tampilan yang di-materialisasi. Pernyataan ini mengambil data dari tabel dasar dan menyimpan hasilnya dalam tampilan yang di-materialisasi.

Contoh

  1. Buat tabel table1 dan table2 sebagai tabel dasar untuk tampilan yang di-materialisasi.

    -- Buat tabel dasar.
    CREATE TABLE table1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    CREATE TABLE table2 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    
    -- Masukkan data ke tabel dasar.
    INSERT INTO table1 VALUES (1, 'A', 100), (2, 'B', 200), (3, 'C', 300), (4, 'D', 400);
    INSERT INTO table2 VALUES (1, 'X', 10), (2, 'Y', 20), (3, 'Z', 30), (5, 'W', 50);
  2. Buat tampilan yang di-materialisasi.

    CREATE MATERIALIZED VIEW mv1 
    REFRESH COMPLETE 
    ON DEMAND 
    START WITH now() NEXT now() + INTERVAL 1 hour 
    AS 
    SELECT 
        SUM(t1.col3) AS sum_value, 
        AVG(t1.col3) AS avg_value 
    FROM table1 t1 
    JOIN table2 t2 ON t1.col1 = t2.col1;

Menjalankan kueri pada tampilan yang di-materialisasi

Catatan

Menjalankan kueri pada tampilan yang di-materialisasi memerlukan izin SELECT untuk tampilan tersebut. Anda tidak memerlukan izin SELECT pada tabel dasar yang mendasari tampilan tersebut.

Menjalankan kueri pada tampilan yang di-materialisasi

SELECT * FROM mv1;

Output yang diharapkan adalah:

+-----------+-----------+
| sum_value | avg_value |
+-----------+-----------+
|       600 |  200.0000 |
+-----------+-----------+

Definisi tampilan kueri

SHOW CREATE VIEW mv1;

Output yang diharapkan adalah:

+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View                                                                                                                                                                                                                                                                    | character_set_client | collation_connection |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| mv1  | CREATE MATERIALIZED VIEW `mv1` REFRESH COMPLETE ON DEMAND START WITH ('2025-10-15 11:20:15') NEXT (now() + interval 1 hour)  AS select sum(`t1`.`col3`) AS `sum_value`,avg(`t1`.`col3`) AS `avg_value` from (`table1` `t1` join `table2` `t2` on((`t1`.`col1` = `t2`.`col1`))) | utf8mb4              | utf8mb4_0900_ai_ci   |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

Menjalankan kueri dari tabel sistem

SELECT * FROM mysql.view_materialized_info;

Deskripsi field

Field

Deskripsi

TABLE_SCHEMA

Nama database tempat tampilan yang di-materialisasi berada.

TABLE_NAME

Nama tampilan yang di-materialisasi.

IS_DROPPED

Menunjukkan apakah tampilan telah di-drop.

  • 0: Tidak

  • 1: Ya

FIRST_REFRESH_TIME

Jika refresh otomatis dikonfigurasi, ini adalah waktu refresh pertama.

TIME_ZONE

Pengaturan zona waktu.

REFRESH_CONDITION

Mekanisme pemicu refresh.

  • DEMAND: Refresh asinkron, yang dipicu secara otomatis sesuai jadwal atau secara manual.

  • COMMIT: Refresh real-time.

REFRESH_STRATEGY

Kebijakan refresh untuk tampilan yang di-materialisasi.

  • COMPLETE: Pembaruan penuh.

  • FAST: Pembaruan bertahap.

REFRESH_START_TIME

Waktu mulai yang dikonfigurasi untuk refresh pertama.

NEXT_TIME_EXPRESSION

Definisi untuk waktu refresh berikutnya dari tampilan yang di-materialisasi asinkron.

LAST_START_TIME

Waktu saat refresh terakhir benar-benar dimulai.

LAST_END_TIME

Waktu saat refresh terakhir benar-benar selesai.

CONTAINER_TABLE_POSTFIX

Akhiran tabel fisik yang digunakan untuk penyimpanan data.

EXPIRED_TABLE_POSTFIX

Akhiran tabel fisik yang menyimpan data kedaluwarsa setelah refresh.

IS_STOPPED

Menunjukkan apakah refresh terjadwal dihentikan.

  • 0: Tidak

  • 1: Ya

CREATE_TIME

Waktu saat metadata tampilan yang di-materialisasi dibuat.

UPDATE_TIME

Waktu saat metadata tampilan yang di-materialisasi terakhir diperbarui.

Output yang diharapkan adalah:

+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| id  | table_schema | table_name | is_dropped | first_refresh_time  | time_zone | refresh_condition | refresh_strategy | refresh_start_time  | next_time_expression      | last_start_time     | last_end_time       | container_table_postfix | expired_table_postfix | is_stopped | create_time         | update_time         |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| 471 | testmv       | mv1        |          0 | 2025-10-15 11:20:16 | +08:00    | DEMAND            | COMPLETE         | 2025-10-15 11:20:15 | (now() + interval 1 hour) | 2025-10-15 11:20:15 | 2025-10-15 11:20:16 |           2022929596417 |         2022929596417 |          0 | 2025-10-15 11:20:16 | 2025-10-15 11:20:16 |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+

Refresh tampilan yang di-materialisasi

Saat ini, tampilan yang di-materialisasi hanya mendukung pembaruan penuh. Proses ini menggunakan metode out-of-place: membuat tabel dasar fisik tersembunyi, menjalankan pernyataan refresh di atasnya, lalu menukar tabel dasar asli dan tersembunyi. Oleh karena itu, pembaruan penuh memerlukan ruang penyimpanan tambahan. Keunggulan utamanya adalah dukungan terhadap kueri SQL apa pun.

Tampilan yang di-materialisasi mendukung dua metode refresh: refresh manual dan refresh terjadwal.

Penyegaran Manual

Jika tampilan yang di-materialisasi tidak dikonfigurasi untuk refresh terjadwal, atau jika interval refresh panjang, Anda dapat menggunakan perintah REFRESH MATERIALIZED VIEW untuk merefresh data secara manual.

REFRESH MATERIALIZED VIEW <view_name>;

Contoh

  1. Masukkan data uji baru.

    INSERT INTO table1 VALUES (5, 'E', 500), (6, 'F', 600);
    INSERT INTO table2 VALUES (7, 'U', 60), (8, 'V', 70);
  2. Refresh manual tampilan yang di-materialisasi.

    REFRESH MATERIALIZED VIEW mv1;
  3. Lakukan kueri pada tampilan yang di-materialisasi.

    SELECT * FROM mv1;

    Output yang diharapkan adalah:

    +-----------+-----------+
    | sum_value | avg_value |
    +-----------+-----------+
    |      1100 |  275.0000 |
    +-----------+-----------+

Refresh terjadwal

Saat membuat tampilan yang di-materialisasi, Anda dapat menentukan waktu mulai untuk refresh terjadwal menggunakan START WITH dan mengonfigurasi interval refresh otomatis menggunakan NEXT. Sistem secara otomatis menjadwalkan tugas refresh berdasarkan pengaturan yang ditentukan.

CREATE MATERIALIZED VIEW mv1 
REFRESH COMPLETE 
ON DEMAND 
START WITH now() NEXT now() + INTERVAL 1 hour 
AS 
SELECT 
    SUM(t1.col3) AS sum_value, 
    AVG(t1.col3) AS avg_value 
FROM table1 t1 
JOIN table2 t2 ON t1.col1 = t2.col1;

Hapus tampilan yang di-materialisasi

Catatan

Menghapus tampilan yang di-materialisasi memerlukan izin DROP pada database tempat tampilan tersebut berada.

Sintaks

DROP MATERIALIZED VIEW <view_name>;

Contoh

DROP MATERIALIZED VIEW mv1;

Memantau dan mengelola tugas

Refresh terjadwal tampilan yang di-materialisasi bergantung pada mekanisme penjadwalan otomatis sistem. Anda mungkin perlu memantau dan mengelola sejumlah besar tugas terjadwal. Anda dapat menjeda atau me-restart tugas refresh terjadwal untuk tampilan yang di-materialisasi pada tingkat tabel, database, atau global.

Menampilkan antrian tugas

Anda dapat melakukan kueri terhadap tampilan sistem information_schema.materialized_view_refresh_queue untuk melihat antrian refresh.

SELECT * FROM information_schema.materialized_view_refresh_queue;

Menjeda antrian tugas

Berdasarkan tabel

STOP MATERIALIZED VIEW task FOR TABLE mv1;

Berdasarkan database

STOP MATERIALIZED VIEW task FOR DATABASE mv1;

Global

STOP MATERIALIZED VIEW task FOR ALL;

Mulai ulang antrian tugas

Berdasarkan tabel

RESTART MATERIALIZED VIEW task FOR TABLE mv1;

Berdasarkan database

RESTART MATERIALIZED VIEW task FOR DATABASE mv1;

Global

RESTART MATERIALIZED VIEW task FOR ALL;