All Products
Search
Document Center

PolarDB:Ekspor tabel lokal ke mesin OSS secara paralel

Last Updated:Mar 29, 2026

PolarDB for MySQL memungkinkan Anda mengekspor tabel lokal ke Object Storage Service (OSS) menggunakan beberapa parallel worker, yang secara signifikan mengurangi waktu ekspor untuk dataset besar.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster PolarDB for MySQL yang menjalankan Enterprise Edition, dengan nomor revisi 8.0.1.1.38 atau lebih baru (versi 8.0.1) atau 8.0.2.2.25 atau lebih baru (versi 8.0.2)

  • Bucket OSS dan server OSS yang telah dikonfigurasi di kluster Anda. Untuk petunjuk pengaturan, lihat Use OSS foreign tables to access OSS data

  • (Disarankan) Koneksi ke node read-only. Jalankan tugas ekspor pada node read-only untuk menghindari dampak terhadap node primary. Tambahkan hint /*FORCE_SLAVE*/ ke pernyataan SQL Anda, atau hubungkan langsung ke node read-only

Batasan

  • Hanya kueri tabel tunggal (SELECT * FROM table) yang dapat diekspor secara paralel. Kueri yang mengandung JOIN, ORDER BY, atau GROUP BY tidak memenuhi syarat untuk ekspor paralel.

Sintaksis

SELECT [/*+parallel(N)*/] * FROM table_name
INTO OSSOUTFILE 'outfile_path'
[COLUMNS TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[NULL_MARKER BY 'string' | ESCAPED BY 'char']
[LINES TERMINATED BY 'string'];

Untuk memicu ekspor paralel, tambahkan hint /*+parallel(N)*/, di mana N adalah jumlah parallel worker. Atau, aktifkan fitur elastic parallel query agar database secara otomatis menentukan tingkat paralelisme. Untuk informasi selengkapnya, lihat Ikhtisar.

Untuk sintaksis SELECT lengkap yang diperluas oleh klausa INTO OSSOUTFILE, lihat dokumentasi MySQL.

Klausa

KlausaDeskripsi
COLUMNS TERMINATED BY 'string'Pembatas antar bidang.
OPTIONALLY ENCLOSED BY 'char'Karakter yang ditempatkan di kedua ujung bidang. Dengan OPTIONALLY, karakter tersebut hanya diterapkan pada bidang bertipe string. Tanpa itu, diterapkan pada semua tipe bidang.
NULL_MARKER BY 'string'Representasi teks untuk nilai NULL. Memiliki prioritas tertinggi. Dapat berupa string apa pun.
ESCAPED BY 'char'Awalan escape berupa satu karakter. Output NULL menjadi karakter escape diikuti oleh N — misalnya, ESCAPED BY '\' menghasilkan \N. Memiliki prioritas kedua setelah NULL_MARKER. Jika keduanya tidak diatur, NULL ditampilkan sebagai string literal NULL tanpa karakter pembungkus.
LINES TERMINATED BY 'string'Pembatas antar baris.

Parameter

ParameterDeskripsi
outfile_pathJalur tujuan di OSS. Terdiri dari tiga bagian yang dipisahkan oleh garis miring maju (/): nama server OSS, jalur tugas opsional (yang dapat berisi beberapa / untuk jalur multi-level), dan nama file output. Jalur lengkap OSS setelah upload adalah: jalur server OSS + jalur tugas. Nama file harus disertakan.
table_nameNama tabel lokal yang akan diekspor.

Parameter global

ParameterDefaultRentang validDeskripsi
loose_oss_outfile_buffer_size134217728 byte (128 MiB)102400–536870912 byteMemori yang dialokasikan per thread pekerja ekspor paralel. Meningkatkan nilai ini umumnya meningkatkan throughput ekspor.

Pertimbangan

Ambang batas data minimum untuk ekspor paralel

Setiap pekerja harus menulis setidaknya 1.024 KB (pq_oss_min_worker_write_size) data. Jika estimasi output per pekerja berada di bawah ambang batas ini, ekspor paralel tidak digunakan. Gunakan langkah troubleshooting di bawah untuk memastikan apakah ekspor paralel telah diaktifkan.

Memantau ekspor yang sedang berjalan

Jalankan perintah berikut di session terpisah saat ekspor sedang berlangsung. Saat terhubung melalui cluster endpoint, jalankan perintah ini pada node yang sama dengan pernyataan ekspor.

  • Total memori yang digunakan oleh tugas ekspor saat ini (dalam byte):

    SHOW STATUS LIKE "%Oss_outfile_memory_used%";
  • Jumlah total thread pekerja ekspor aktif:

    SHOW STATUS LIKE "%Oss_outfile_threads_running%";

Ekspor tabel secara paralel

Contoh berikut mengekspor tabel lineitem dengan 4 parallel worker.

  1. Periksa apakah kueri mendukung eksekusi paralel. Jalankan EXPLAIN untuk memverifikasi bahwa planner dapat melakukan pemindaian paralel:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem;

    Output yang diharapkan:

    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+
    | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra                     |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+
    |  1 | SIMPLE      | <gather1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 5392844 |   100.00 | NULL                      |
    |  1 | SIMPLE      | lineitem  | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1348211 |   100.00 | Parallel scan (4 workers) |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+

    Eksekusi paralel tersedia ketika kolom Extra menampilkan Parallel scan.

  2. Buat server OSS. Lewati langkah ini jika Anda sudah memiliki server OSS yang dikonfigurasi.

    CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS (
      EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou.aliyuncs.com",
                          "oss_bucket": "polardb",
                          "oss_access_key_id": "<your-access-key-id>",
                          "oss_access_key_secret": "<your-access-key-secret>",
                          "oss_prefix": "B_outfile"}'
    );

    Ganti nilai placeholder dengan kredensial OSS dan informasi bucket Anda.

  3. Verifikasi bahwa ekspor paralel didukung untuk kueri ini. Jalankan EXPLAIN pada pernyataan ekspor lengkap untuk memastikan planner akan menggunakan ekspor paralel:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem
    INTO OSSOUTFILE 'outserver/t1.CSV'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';

    Output yang diharapkan:

    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+
    | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra                                                  |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+
    |  1 | SIMPLE      | <gather1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 5805759 |   100.00 | Parallel export OSS outfile                            |
    |  1 | SIMPLE      | lineitem  | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1451439 |   100.00 | Parallel scan (4 workers); Parallel export OSS outfile |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+

    Ekspor paralel aktif ketika kolom Extra menampilkan Parallel export OSS outfile. Jika tidak muncul, lihat Troubleshooting.

  4. Jalankan ekspor.

    SELECT /*+parallel(4)*/ * FROM lineitem
    INTO OSSOUTFILE 'outserver/t1.CSV'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';

    Saat ekspor berjalan, pantau penggunaan sumber daya dari session lain menggunakan perintah SHOW STATUS yang dijelaskan dalam Pertimbangan.

Troubleshooting

Jika output EXPLAIN tidak menampilkan Parallel export OSS outfile, gunakan jejak pengoptimal (optimizer trace) untuk menemukan alasannya.

  1. Aktifkan jejak pengoptimal:

    SET optimizer_trace="enabled=on";
  2. Jalankan pernyataan berikut untuk melihat rencana eksekusi pernyataan SQL yang hasilnya diekspor secara paralel:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem WHERE l_orderkey < 100
    INTO OSSOUTFILE 'default_oss_server/t1'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';
  3. Kueri hasil jejak:

    SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
  4. Dalam output, temukan objek considered_parallel_outfile dan baca bidang cause:

    "considered_parallel_outfile": {
      "choose": false,
      "storage": "OSS",
      "format": "CSV",
      "mean_outfile_record_length": "79 B",
      "estimate_single_worker_outfile_size": "8 KB",
      "cause": "The data written by each worker should be greater than 1024 KB (pq_oss_min_worker_write_size)."
    }

    Bidang cause menjelaskan mengapa ekspor paralel tidak digunakan.

Langkah berikutnya