全部产品
Search
文档中心

PolarDB:Gunakan IMCI untuk mempercepat ETL

更新时间:Jul 06, 2025

PolarDB mendukung fitur Extract Transform Load (ETL). Setelah fitur ETL dari IMCI diaktifkan, Anda dapat menggunakan Indeks Kolom Memori (IMCIs) pada node utama. Permintaan SELECT dalam pernyataan yang dijalankan pada node utama dikirim ke node penyimpanan kolom hanya-baca. Kemudian, Anda dapat memanfaatkan fitur IMCI untuk mempercepat kueri. Setelah data dibaca, PolarDB mengirimkan data kembali ke node utama melalui jaringan internal dan menulisnya ke tabel tujuan.

Cara kerjanya

Membaca data dari node penyimpanan kolom hanya-baca dan menulis ke tabel

Prasyarat

Kluster PolarDB Anda harus menggunakan salah satu versi berikut:

  • Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.29 atau lebih baru.

  • Kluster PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.12 atau lebih baru.

Untuk informasi tentang cara memeriksa versi, lihat bagian "Query the engine version" dalam topik Versi Mesin.

Batasan

Fitur ini hanya berlaku untuk pernyataan SQL berikut:

  • CREATE TABLE nama_tabel [AS] SELECT ...

  • INSERT ... SELECT ...

Penggunaan

Anda dapat mengonfigurasi parameter dalam database untuk menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca dan apakah akan mengompres file saat membaca data dari node tersebut. Tabel berikut menjelaskan parameter tersebut.

Parameter

Deskripsi

etl_from_imci

Menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca. Nilai valid:

  • ON: membaca data dari node penyimpanan kolom hanya-baca.

  • OFF (default): tidak membaca data dari node penyimpanan kolom hanya-baca.

  • FORCED: membaca data dari node penyimpanan kolom hanya-baca meskipun kueri SQL merupakan bagian dari transaksi yang sedang berlangsung.

etl_from_imci_compress

Menentukan apakah akan mengompres file saat membaca data dari node penyimpanan kolom hanya-baca. Nilai valid:

  • ON

  • OFF (default)

Saat mengubah nilai parameter, Anda dapat mengatur setiap parameter pada salah satu tingkat berikut: global, sesi, atau pernyataan. Dalam contoh berikut, parameter etl_from_imci digunakan.

  • Atur parameter pada tingkat global.

    SET GLOBAL etl_from_imci = ON;

    Setelah mengatur parameter pada tingkat global, semua permintaan CREATE TABLE new_tbl [AS] SELECT .. dan INSERT ... SELECT ... dalam kluster saat ini akan membaca data dari node penyimpanan kolom hanya-baca.

  • Atur parameter pada tingkat sesi.

    SET etl_from_imci = ON;

    Setelah mengatur parameter pada tingkat sesi, hanya permintaan CREATE TABLE new_tbl [AS] SELECT .. dan INSERT ... SELECT ... dalam sesi saat ini yang membaca data dari node penyimpanan kolom hanya-baca.

  • Atur parameter pada tingkat pernyataan.

    Anda dapat menggunakan hints untuk menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca untuk pernyataan SQL tertentu. Contoh:

    CREATE TABLE t2 SELECT /*+ SET_VAR(etl_from_imci=ON) */ * from t1 where 'A' = 'a';

Saat parameter etl_from_imci disetel ke ON, data dibaca dari node penyimpanan kolom hanya-baca. Setelah data dibaca dari node tersebut dan dikirim kembali ke node utama, Anda dapat menjalankan pernyataan SHOW processlist untuk melihat status proses saat ini, yang diharapkan menjadi ETL FROM IMCI.ETL FROM IMCI

Catatan penggunaan

Jika kondisi kueri kompleks ditentukan dan waktu eksekusi pernyataan SQL lama tetapi hanya sejumlah kecil data yang dikembalikan, Anda dapat mengaktifkan fitur ETL dari IMCI untuk meningkatkan performa secara signifikan.

Namun, fitur ETL dari IMCI dapat menurunkan performa dalam skenario berikut:

  • Untuk kueri sederhana, membaca data dari node penyimpanan kolom hanya-baca jarak jauh menyebabkan overhead tambahan untuk transmisi jaringan dan penguraian set hasil. Oleh karena itu, performa mungkin menurun.

  • Saat set hasil kueri berisi sejumlah besar data, membaca data dari node penyimpanan kolom hanya-baca jarak jauh, mengirim data kembali ke node utama, dan menulis data ke tabel pada node utama dapat menyebabkan penurunan performa.

Perbandingan performa

Tes berikut menggunakan 10 GB data yang dihasilkan berdasarkan TPC Benchmark H (TPC-H) untuk menguji performa kueri kompleks.

  • Hasil kueri berisi satu baris data.

    select
        sum(l_extendedprice * l_discount) as revenue
    from
        lineitem
    where
        l_shipdate >= date '1994-01-01'
        and l_shipdate < date '1994-01-01' + interval '1' year
        and l_discount between .06 - 0.01 and .06 + 0.01
        and l_quantity < 24

    Bandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi satu baris data.

    Kueri data pada node penyimpanan kolom hanya-baca

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    0.05

    >60

    0.17

    >60

    0.08

  • Hasil kueri berisi empat baris data.

    select
        l_returnflag,
        l_linestatus,
        sum(l_quantity) as sum_qty,
        sum(l_extendedprice) as sum_base_price,
        sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
        sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
        avg(l_quantity) as avg_qty,
        avg(l_extendedprice) as avg_price,
        avg(l_discount) as avg_disc,
        count(*) as count_order
    from
        lineitem
    where
        l_shipdate <= date '1998-12-01' - interval '90' day
    group by
        l_returnflag,
        l_linestatus
    order by
        l_returnflag,
        l_linestatus

    Bandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi empat baris data.

    Kueri data pada node penyimpanan kolom hanya-baca

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    0.58

    >60

    0.64

    >60

    0.58

  • Hasil kueri berisi 27.840 baris data.

    select
        p_brand,
        p_type,
        p_size,
        count(distinct ps_suppkey) as supplier_cnt
    from
        partsupp,
        part
    where
        p_partkey = ps_partkey
        and p_brand <> 'Brand#45'
        and p_type not like 'MEDIUM POLISHED%'
        and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
        and ps_suppkey not in (
            select
                s_suppkey
            from
                supplier
            where
                s_comment like '%Customer%Complaints%'
        )
    group by
        p_brand,
        p_type,
        p_size
    order by
        supplier_cnt desc,
        p_brand,
        p_type,
        p_size

    Bandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi 27.840 baris data.

    Kueri data pada node penyimpanan kolom hanya-baca

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan CREATE TABLE new_tbl [AS] SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI tidak diaktifkan

    Jalankan pernyataan INSERT ... SELECT ... pada node utama saat fitur ETL dari IMCI diaktifkan

    0.55

    >60

    0.92

    >60

    0.82