全部产品
Search
文档中心

AnalyticDB:Impor dan ekspor

更新时间:Dec 23, 2025

Topik ini menjelaskan masalah umum dan solusinya terkait impor dan ekspor data di AnalyticDB for MySQL.

Catatan

Jika seri produk tidak ditentukan dalam skenario masalah umum, masalah tersebut hanya berlaku untuk AnalyticDB for MySQL Edisi Data Warehouse.

Ikhtisar masalah umum

Bagaimana cara menghentikan tugas impor atau ekspor asinkron?

Masuk ke AnalyticDB for MySQL console, temukan tugas asinkron target di tab Import/Export Jobs pada halaman Diagnostics and Optimization, periksa Asynchronous Job Name dari tugas asinkron tersebut, lalu jalankan pernyataan CANCEL JOB "${Asynchronous task name}" untuk membatalkan tugas asinkron tersebut. Untuk informasi selengkapnya tentang tugas impor dan ekspor asinkron, lihat Kirim tugas impor asinkron.

Bagaimana cara menggunakan SQL untuk melihat tugas impor yang sedang berjalan di database saat ini?

Gunakan pernyataan SQL berikut untuk mengkueri:

SELECT * FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where status = "RUNNING"

Mengapa kinerja impor buruk saat menggunakan JDBC untuk mengimpor data ke kluster AnalyticDB for MySQL?

  • Pastikan kecepatan produksi data dari sumber data cukup cepat. Jika sumber data berasal dari sistem atau file lain, periksa apakah klien memiliki bottleneck output.

  • Pastikan kecepatan pemrosesan data. Periksa apakah produksi dan konsumsi data tersinkronisasi untuk memastikan ada cukup data yang menunggu untuk diimpor ke AnalyticDB for MySQL.

  • Sambil mempertahankan beban kerja yang sesuai pada host klien, periksa pemanfaatan CPU atau penggunaan I/O disk untuk menentukan apakah sumber daya sistem mencukupi.

Apakah akan ada biaya terpisah untuk titik akhir ingest kluster Edisi Data Lakehouse (APS)?

Tidak, tidak akan ada biaya untuk titik akhir ingest. Namun, tugas APS perlu dijalankan pada kelompok sumber daya kluster, yang akan mengonsumsi sumber daya dan menimbulkan biaya sumber daya.

Haruskah saya memilih alamat jaringan internal atau alamat Internet saat mengimpor atau mengekspor data melalui tabel eksternal OSS?

Anda harus memilih alamat jaringan internal saat membuat tabel eksternal OSS karena node backend AnalyticDB for MySQL mengakses OSS melalui jaringan internal, bukan Internet.

Bagaimana cara mengatasi kesalahan titik akhir tidak dapat dijangkau saat membuat tabel eksternal MaxCompute?

Penyebab: Saat membuat tabel eksternal MaxCompute, titik akhir yang ditentukan tidak dapat diakses, sehingga menyebabkan kesalahan titik akhir tidak dapat dijangkau.

Solusi: Aktifkan jaringan ENI, lalu ganti titik akhir dalam pernyataan pembuatan tabel dengan Titik Akhir jaringan VPC yang sesuai dengan wilayah tempat instans berada, dan eksekusi kembali pernyataan pembuatan tabel.

Penting
  • Mengaktifkan atau menonaktifkan jaringan ENI akan menyebabkan koneksi database terputus selama sekitar 2 menit, di mana pembacaan dan penulisan tidak dimungkinkan. Harap evaluasi dampaknya secara hati-hati sebelum mengaktifkan atau menonaktifkan jaringan ENI.

  • Masuk ke Konsol AnalyticDB for MySQL, buka Cluster Management > Cluster Information, dan di bagian Network Information, aktifkan sakelar jaringan ENI.

Bagaimana cara mengatasi kesalahan Odps external table endpoint should not contain special character saat membuat tabel eksternal MaxCompute?

Penyebab: Saat membuat tabel eksternal MaxCompute, konfigurasi titik akhir salah.

Solusi: Ganti titik akhir dalam pernyataan pembuatan tabel dengan Titik Akhir jaringan VPC yang sesuai dengan wilayah tempat instans berada, dan eksekusi kembali pernyataan pembuatan tabel.

Bagaimana cara mengatasi kesalahan Project not found - 'xxx' saat membuat tabel eksternal MaxCompute?

  • Penyebab 1: Proyek tidak ada di MaxCompute, atau nama proyek salah eja.

    Solusi: Ubah nama proyek dalam pernyataan pembuatan tabel dan buat kembali tabel eksternal tersebut.

  • Penyebab 2: Proyek ada di MaxCompute tetapi tidak berada di wilayah yang sama dengan kluster AnalyticDB for MySQL.

    Solusi: Pastikan kluster AnalyticDB for MySQL dan proyek MaxCompute berada di wilayah yang sama, lalu buat kembali tabel eksternal tersebut.

Bagaimana cara mengatasi kesalahan "Roll back this write and commit by writing one row at a time" saat mengimpor data MaxCompute?

Penyebab: Karena keterbatasan pada lapisan koneksi AnalyticDB for MySQL, kesalahan ini dapat terjadi saat menggunakan DataX untuk mengimpor data.

Solusi: Ubah string koneksi JDBC dengan menambahkan parameter rewriteBatchedStatements=false, lalu impor kembali data tersebut.

Bagaimana cara mengatasi kesalahan Query Exceeded Maximum Time Limit saat mengimpor data MaxCompute?

Penyebab: Karena tabel MaxCompute berukuran besar, proses impor data memakan waktu lama, melebihi batas waktu operasi INSERT di AnalyticDB for MySQL.

Solusi: Ubah parameter INSERT_SELECT_TIMEOUT, lalu impor kembali data tersebut. Untuk operasi spesifik, lihat Parameter konfigurasi Config dan Hint.

Bagaimana cara mengatasi kesalahan cant submit job for job queue is full saat mengimpor data MaxCompute?

Penyebab: Jumlah tugas asinkron yang berjalan secara bersamaan di kluster AnalyticDB for MySQL melebihi batas. Anda dapat membuat tiket untuk menghubungi dukungan teknis guna menanyakan batas jumlah tugas asinkron yang dapat berjalan secara bersamaan di kluster.

Solusi:

  • Anda perlu menunggu tugas asinkron yang telah dikirim selesai sebelum mengirim kembali tugas impor asinkron. Untuk informasi tentang cara mengkueri status tugas asinkron, lihat Kirim tugas impor asinkron.

  • Anda dapat membuat tiket untuk menghubungi dukungan teknis guna mengubah batas jumlah tugas asinkron yang dapat berjalan secara bersamaan di kluster.

Bagaimana cara mengatasi kesalahan Query execution error: odps partition num: 191 > 192, specific odps partitions saat mengimpor data MaxCompute?

Penyebab: Jumlah partisi yang diimpor secara bersamaan oleh kluster AnalyticDB for MySQL melebihi batas.

Solusi: Berdasarkan jumlah partisi spesifik di tabel MaxCompute, tambahkan Hint /*RC_INSERT_ODPS_MAX_PARTITION_NUM=<value>*/ sebelum pernyataan SQL untuk menyesuaikan batas partisi.

Bagaimana cara mengatasi kesalahan ODPS Table XXX should be a partitioned table and has at least one partition in max_pt() function saat mengkueri data MaxCompute?

Penyebab: Tabel eksternal MaxCompute adalah tabel eksternal non-partisi, sehingga fungsi MAX_PT menghasilkan kesalahan.

Solusi: Pastikan tabel MaxCompute adalah tabel partisi dan memiliki setidaknya satu partisi. Kemudian buat ulang tabel eksternal MaxCompute dan gunakan fungsi MAX_PT untuk mengkueri data tabel eksternal.

Bagaimana cara mengatasi kesalahan ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist saat mengkueri data MaxCompute?

Penyebab: Tabel eksternal MaxCompute tidak memiliki partisi.

Solusi: Pastikan tabel MaxCompute adalah tabel partisi dan memiliki setidaknya satu partisi. Kemudian buat ulang tabel eksternal MaxCompute dan kueri data tabel eksternal tersebut.

Bagaimana cara mengatasi kesalahan Receive error response with code 500 saat mengkueri data MaxCompute?

Penyebab: AnalyticDB for MySQL menggunakan mesin Native untuk mengeksekusi pernyataan SQL, tetapi mesin Native tidak mendukung tabel eksternal MaxCompute.

Solusi: Tambahkan Hint /*native_engine_task_enabled=false*/ sebelum pernyataan SQL untuk menonaktifkan mesin Native dan menggunakan mesin Java untuk mengeksekusi pernyataan SQL.

Bagaimana cara mengatasi kesalahan Query execution error saat mengkueri data MaxCompute?

  • Penyebab 1: Konfigurasi izin MaxCompute salah, dan AccessKey tidak dapat membaca tabel MaxCompute dengan benar.

    Solusi: Ubah izin baca dan tulis MaxCompute, lalu kueri kembali data tersebut.

  • Penyebab 2: Struktur tabel dan nama kolom di AnalyticDB for MySQL tidak konsisten dengan yang ada di MaxCompute.

    Solusi: Buat ulang tabel eksternal di AnalyticDB for MySQL dengan struktur tabel dan nama kolom yang konsisten dengan tabel MaxCompute, lalu kueri kembali data tersebut.

  • Penyebab 3: Partisi yang sesuai di MaxCompute tidak tersedia.

    Solusi: Ubah partisi MaxCompute yang ditentukan dalam pernyataan kueri data, lalu kueri kembali data tersebut.

  • Penyebab 4: Terlalu banyak file kecil di MaxCompute.

    Solusi: Aktifkan fitur penggabungan file kecil di MaxCompute, lalu kueri kembali data tersebut. Contoh pernyataannya sebagai berikut. Untuk informasi selengkapnya tentang penggabungan file kecil di MaxCompute, lihat Gabungkan file kecil.

    ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;

Bagaimana cara mengimpor data bertipe array dari MaxCompute ke kluster AnalyticDB MySQL?

Penyebab: Tabel eksternal MaxCompute tidak mendukung tipe bersarang, sehingga data bertipe array<string> tidak dapat langsung diimpor ke AnalyticDB for MySQL.

Solusi: Anda dapat mengimpor data dari MaxCompute ke OSS dalam format Parquet, lalu AnalyticDB for MySQL dapat membaca data yang disimpan dalam format Parquet di OSS.

Bagaimana cara mengoptimalkan kecepatan impor data MaxCompute?

  • Jika beban node data rendah, Anda dapat menyesuaikan nilai SQL_OUTPUT_BATCH_SIZE, lalu impor kembali data tersebut. Contoh pernyataannya sebagai berikut:

    set adb_config SQL_OUTPUT_BATCH_SIZE = 6000;
  • Jika terdapat terlalu banyak partisi MaxCompute, Anda dapat mengubah nilai ENABLE_ODPS_MULTI_PARTITION_PART_MATCH menjadi false, lalu impor kembali data tersebut. Contoh pernyataannya sebagai berikut:

    set adb_config ENABLE_ODPS_MULTI_PARTITION_PART_MATCH=false;

Jika Anda masih mengalami masalah, silakan hubungi buat tiket dukungan teknis Alibaba Cloud.

Mengapa data tidak ditimpa saat menggunakan pernyataan INSERT OVERWRITE untuk mengekspor data dari kluster AnalyticDB MySQL ke tabel eksternal MaxCompute?

Tabel eksternal MaxCompute tidak mendukung penimpaan data.

Mengapa saya menerima kesalahan ErrorCode=SlotExceeded, ErrorMessage=Region: cn-hangzhou Project: XXX Slot Quota Exceeded saat menulis data ke tabel eksternal MaxCompute menggunakan pernyataan INSERT INTO SELECT?

Penyebab: Saat menulis data ke tabel eksternal MaxCompute, slot tulis melebihi batas MaxCompute.

Solusi: Pilih salah satu dari dua metode berikut:

  • Anda dapat menggunakan grup sumber daya eksklusif untuk DataService Studio untuk transmisi data. Dibandingkan dengan grup sumber daya layanan transmisi data publik, grup sumber daya layanan transmisi data eksklusif memiliki kuota slot yang lebih banyak.

  • Konkurensi default untuk tugas impor INSERT INTO SELECT adalah 16. Anda dapat menambahkan Hint /*TASK_WRITER_COUNT=<value>*/ sebelum pernyataan SQL untuk mengurangi konkurensi. Rentang nilainya adalah bilangan bulat lebih besar dari 0.

Mengapa saya menerima kesalahan Catalog Service Failed. ErrorCode:202. ErrorMessage:ODPS-0110044: Flow control triggered - Request rejected by catalog server throttling, threshold 8.00, fallback or retry later saat menulis data ke tabel eksternal MaxCompute menggunakan pernyataan INSERT INTO SELECT?

Penyebab: Saat menulis data ke tabel eksternal MaxCompute, jika melibatkan partisi baru, createPartition akan dipanggil di sisi MaxCompute untuk membuat partisi tersebut. Jika frekuensi pembuatan partisi terlalu tinggi, akan memicu mekanisme pengendalian aliran MaxCompute, sehingga menghasilkan kesalahan.

Solusi: Periksa apakah tugas impor INSERT INTO SELECT memiliki beberapa partisi yang ditulis secara bersamaan. Jika ya, tambahkan Hint /*TASK_WRITER_COUNT=<value>*/ sebelum pernyataan SQL untuk mengurangi konkurensi. Rentang nilainya adalah bilangan bulat lebih besar dari 0. Jika tidak, silakan buat tiket untuk menghubungi dukungan teknis guna mendapatkan bantuan.

Mengapa jumlah data MaxCompute yang diimpor tidak konsisten dengan jumlah data di kluster AnalyticDB MySQL?

Penyebab: AnalyticDB for MySQL menghapus data kunci primer duplikat.

Solusi: Periksa apakah terdapat data kunci primer duplikat di MaxCompute.

Apakah akan terjadi kesalahan ketika DTS menyinkronkan data ke kluster AnalyticDB MySQL jika database sumber berisi tipe data yang tidak didukung oleh kluster AnalyticDB MySQL?

Jika database sumber berisi tipe data yang tidak didukung oleh AnalyticDB for MySQL (seperti tipe data lokasi geografis), AnalyticDB for MySQL akan membuang kolom dengan tipe data yang tidak didukung selama sinkronisasi skema awal.

Untuk tipe data yang didukung, lihat Tipe data dasar dan Tipe data kompleks

Apakah DTS mendukung modifikasi tipe bidang di tabel sumber saat menyinkronkan data ke kluster AnalyticDB MySQL?

Selama sinkronisasi data, Anda dapat memodifikasi tipe bidang di tabel sumber. Saat ini, hanya perubahan antar tipe data integer dan antar tipe data floating-point yang didukung. Anda hanya dapat mengubah dari tipe data dengan rentang nilai lebih kecil ke tipe data dengan rentang nilai lebih besar, atau dari tipe data presisi tunggal ke tipe data presisi ganda.

  • Tipe data integer: Perubahan dari tipe lebih kecil ke tipe lebih besar didukung di antara Tinyint, Smallint, Int, dan Bigint. Misalnya, perubahan dari Tinyint ke Bigint didukung, tetapi perubahan dari Bigint ke Tinyint tidak didukung.

  • Tipe data floating-point: Perubahan dari Float ke Double didukung, tetapi perubahan dari Double ke Float tidak didukung.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh modifikasi tipe data tabel sumber saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

  • 'id' is LONG type, Can't change column type to DECIMAL
  • modify precision is not supported, col=id, type decimal, old=11, new=21

Penyebab: Untuk informasi detail, lihat Apakah DTS mendukung modifikasi tipe bidang di tabel sumber saat menyinkronkan data ke kluster AnalyticDB for MySQL?

Solusi:

  • Untuk sinkronisasi non-seluruh database: Disarankan untuk menyinkronkan ulang tabel ini (yaitu, pertama-tama hapus dari objek sinkronisasi, lalu hapus tabel di database tujuan, kemudian tambahkan kembali tabel ini ke objek sinkronisasi). DTS akan melakukan sinkronisasi penuh lagi, termasuk pengambilan skema, yang akan melewati DDL jenis ini.

  • Untuk sinkronisasi seluruh database: Buat tabel baru di AnalyticDB for MySQL dengan nama berbeda dari tabel yang menghasilkan kesalahan. Struktur tabel harus konsisten dengan struktur tabel sumber. Gunakan INSERT INTO SELECT untuk menulis data dari tabel sumber ke tabel baru yang dibuat, hapus tabel yang menghasilkan kesalahan, lalu gunakan Rename untuk mengganti nama tabel baru menjadi nama tabel yang menghasilkan kesalahan. Mulai ulang tugas DTS.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh nilai tanggal tidak valid saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

Cannot parse "2013-05-00 00:00:00": Value 0 for dayOfMonth must be in the range [1,31]]

Penyebab: AnalyticDB for MySQL tidak mendukung penulisan nilai tanggal tidak valid.

Solusi:

  • Jika tugas berada dalam fase inisialisasi penuh, ubah nilai di tabel sumber menjadi nilai yang valid (misalnya, ubah nilai kesalahan di atas menjadi 2013-05-01 00:00:00).

  • Jika tugas berada dalam fase sinkronisasi inkremental, hapus tabel ini dari objek sinkronisasi, ubah nilai di tabel sumber menjadi nilai yang valid, tambahkan kembali tabel ke objek sinkronisasi, lalu mulai ulang tugas sinkronisasi.

  • Jika tugas berada dalam fase sinkronisasi inkremental untuk sinkronisasi seluruh database, harap hubungi dukungan teknis Alibaba Cloud untuk mengaktifkan sakelar penulisan nilai tidak valid. Setelah sakelar diaktifkan, semua penulisan nilai tidak valid akan dikonversi menjadi null.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh sinkronisasi tabel tanpa kunci primer saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

DTS-077004: Record Replicator error. cause by [[17003,2020051513063717201600100703453067067] table not exist => xxx_table] 

Penyebab: Saat ini, AnalyticDB for MySQL tidak mendukung sinkronisasi tabel tanpa kunci primer.

Solusi: Ini hanya terjadi selama sinkronisasi seluruh database. Anda perlu terlebih dahulu menentukan apakah tabel database sumber tidak memiliki kunci primer. Jika demikian, buatlah tabel secara manual di database tujuan dan pastikan tabel yang baru dibuat memiliki kunci primer. Setelah membuat tabel, mulai ulang tugas DTS.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh nilai default bidang tabel yang terlalu panjang saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

default value is too long

Solusi: Silakan buat tiket untuk menghubungi dukungan teknis Alibaba Cloud guna meningkatkan kluster AnalyticDB for MySQL Anda ke versi terbaru.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh penulisan catatan lebih besar dari 16 MB saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (120468711 > 33554432). You can change this value on the server by setting the max_allowed_packet' variable.

Solusi: Silakan buat tiket untuk menghubungi dukungan teknis Alibaba Cloud guna meningkatkan kluster AnalyticDB for MySQL Anda ke versi terbaru.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh ruang disk tidak mencukupi saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

disk is over flow

Solusi: Hapus beberapa data untuk membebaskan ruang disk yang cukup, atau hubungi dukungan teknis Alibaba Cloud untuk memperluas kluster AnalyticDB for MySQL Anda. Setelah memastikan ruang disk mencukupi, mulai ulang tugas DTS.

Bagaimana cara mengatasi kesalahan yang disebabkan oleh tabel atau bidang yang hilang saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

table not exist => t1

Solusi: Pertama, periksa apakah Anda memilih semua sinkronisasi DDL (seperti pernyataan pembuatan tabel dan pernyataan DDL lainnya) saat mengonfigurasi DTS. Jika tidak, pilih opsi tersebut.

Bagaimana cara mengatasi masalah tidak mendapatkan nilai dari bidang yang digabung saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Kesalahan:

No value present 

Penyebab: Dalam skenario penggabungan multi-tabel, jika suatu bidang di salah satu tabel sumber diubah (misalnya, bidang baru ditambahkan), hal ini akan menyebabkan ketidakkonsistenan bidang di beberapa tabel sumber. Saat menulis data ke tabel tujuan, terjadi kesalahan di atas.

Solusi: Silakan buat tiket untuk menghubungi dukungan teknis DTS guna mendapatkan bantuan.

Apakah akan terjadi kesalahan jika nama database, nama tabel, atau nama kolom di instans sumber mengandung tanda hubung (-) saat DTS menyinkronkan data ke kluster AnalyticDB MySQL?

Karena AnalyticDB for MySQL tidak mengizinkan nama database, nama tabel, atau nama kolom mengandung tanda hubung (-), untuk memastikan sinkronisasi data berhasil, sistem akan memetakan tanda hubung (-) menjadi garis bawah (_).

Jika Anda mengalami kegagalan sinkronisasi lain yang disebabkan oleh nama database, nama tabel, atau nama kolom selama sinkronisasi data (seperti nama tabel yang mengandung spasi atau karakter Cina), harap hubungi dukungan teknis Alibaba Cloud.

Catatan

Untuk batasan AnalyticDB for MySQL lainnya, lihat Batasan.

Bagaimana cara memecahkan masalah latensi data di kluster AnalyticDB MySQL saat DTS menyinkronkan data ke kluster tersebut?

  • Spesifikasi tautan sinkronisasi DTS default adalah mode menengah. Ketika volume penulisan data database sumber besar, jika Anda ingin mencapai batas kinerja sinkronisasi spesifikasi, Anda perlu meningkatkan konfigurasi instans.

  • Pemilihan kunci primer untuk tabel tanpa kunci primer dapat menyebabkan pembaruan baris panas, dan pembaruan baris panas sangat lambat. Anda dapat membuat tiket ke AnalyticDB for MySQL untuk menyelesaikan masalah ini.

  • Ketika kinerja tulis kluster AnalyticDB for MySQL telah mencapai bottleneck, Anda perlu meningkatkan spesifikasi AnalyticDB for MySQL.

Mengapa TPS tulis tidak sesuai ekspektasi saat DataWorks mengimpor data ke kluster AnalyticDB MySQL?

Ketika tekanan impor klien tidak mencukupi, pemanfaatan CPU kluster, pemanfaatan I/O disk, dan waktu respons tulis akan berada pada level rendah. Meskipun server database dapat segera mengonsumsi data yang dikirim oleh klien, jumlah total yang dikirim kecil, sehingga TPS tulis tidak sesuai ekspektasi. Anda dapat meningkatkan jumlah penyisipan batch untuk satu impor dan meningkatkan Expected Maximum Concurrency Of The Task. Kinerja impor data akan meningkat secara linear seiring peningkatan tekanan impor.

Mengapa terjadi kesenjangan data di tabel target saat DataWorks mengimpor data ke kluster AnalyticDB MySQL?

Ketika terjadi kesenjangan data di tabel target, beberapa node kluster kelebihan beban, sehingga memengaruhi kinerja impor. Dalam kasus ini, pemanfaatan CPU kluster dan pemanfaatan I/O disk berada pada level rendah, tetapi waktu respons tulis tinggi. Secara bersamaan, Anda dapat menemukan tabel target di tabel diagnosis kesenjangan pada halaman Diagnostics And Optimization Data Modeling Diagnostics. Anda dapat mendesain ulang struktur tabel, lalu mengimpor data tersebut. Untuk informasi selengkapnya, lihat Desain skema.

Bagaimana cara memeriksa apakah klien atau servernya memiliki bottleneck beban saat mengimpor data lokal menggunakan adb-import.sh?

Jika klien memiliki bottleneck, klien tidak akan dapat melakukan uji stres maksimal pada database. Anda dapat memeriksa apakah klien atau servernya memiliki bottleneck beban dengan dua metode berikut:

  • Masuk ke Konsol AnalyticDB for MySQL, klik Monitoring Information dan Diagnostics And Optimization di panel navigasi sebelah kiri untuk memeriksa apakah klien itu sendiri atau servernya memiliki bottleneck beban.

  • Gunakan perintah umum berikut untuk memeriksa apakah klien itu sendiri atau servernya memiliki bottleneck beban.

Perintah

Deskripsi

top

Lihat pemanfaatan CPU.

free

Lihat penggunaan memori.

vmstat 1 1000

Lihat beban komprehensif.

dstat -all --disk-util atau iostat 1 1000

Lihat bandwidth baca disk dan pemanfaatannya.

jstat -gc <pid> 1000

Lihat detail pengumpulan sampah (Garbage Collection, GC) dari proses Java alat impor. Jika GC sering terjadi, Anda dapat mencoba memperluas ukuran memori heap secara tepat dalam parameter JVM jvmopts, misalnya memperluasnya menjadi -Xmx16G -Xms16G.

Bagaimana cara memparameterisasi skrip impor saat mengimpor data lokal menggunakan adb-import.sh?

Jika Anda memastikan bahwa pemisah baris dan kolom file impor konsisten, Anda dapat mengubah parameter tableName dan dataPath dalam skrip impor. Dengan meneruskan parameter nama tabel dan jalur file yang berbeda, Anda dapat mencapai persyaratan mengimpor beberapa tabel dengan satu skrip.

Contoh:

tableName=$1
dataPath=$2

Jalankan impor menggunakan parameterisasi.

# sh adb-import.sh table_name001 /path/table_001
# sh adb-import.sh table_name002 /path/table_002
# sh adb-import.sh table_name003 /path/table_003

Bagaimana cara menjalankan program impor di latar belakang saat mengimpor data lokal menggunakan adb-import.sh?

Anda dapat menjalankan perintah berikut untuk menjalankan program impor di latar belakang:

# nohup sh adb-import.sh &

Setelah program impor mulai berjalan di latar belakang, Anda dapat menjalankan perintah berikut untuk memeriksa log. Jika informasi stack pengecualian dicetak, berarti terjadi kesalahan dalam impor, dan Anda perlu memecahkan masalah berdasarkan informasi pengecualian tersebut. Perintahnya sebagai berikut:

# tail -f nohup.out

Anda juga dapat menggunakan perintah berikut untuk memeriksa apakah proses impor masih berjalan normal:

# ps -ef|grep import

Bagaimana cara mengabaikan baris kesalahan dalam program impor saat mengimpor data lokal menggunakan adb-import.sh?

Baris kesalahan dalam program impor dapat dibagi menjadi dua kategori berikut:

  • Kesalahan eksekusi SQL.

    Untuk jenis kesalahan ini, Anda dapat mengabaikan baris kesalahan dengan mengatur parameter ignoreErrors=true. Dalam hal ini, file kesalahan detail, nomor baris awal (karena batchSize diatur, baris kesalahan akan berada dalam rentang batchSize baris setelah nomor baris awal), dan SQL yang gagal dieksekusi akan dicetak dalam hasil eksekusi.

  • Jumlah kolom dalam file tidak sesuai ekspektasi.

    Ketika jumlah kolom dalam file tidak sesuai ekspektasi, sistem akan segera menghentikan impor file dan mencetak pesan kesalahan. Namun, karena kesalahan ini disebabkan oleh file yang tidak valid, kesalahan ini tidak akan diabaikan, dan Anda perlu memeriksa kebenaran file secara manual. Jenis kesalahan ini akan mencetak pesan kesalahan berikut:

    [ERROR] 2021-03-22 00:46:40,444 [producer- /test2/data/lineitem.csv.split00.100-41] analyticdb.tool.ImportTool
    (ImportTool.java:591) -bad line found and stop import! 16, file = /test2/data/tpch100g/lineitem.csv.split00.100, rowCount = 7, current row = 3|123|179698|145|73200.15|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-
    23|NONE|AIR|ongside of the furiously brave acco|

Bagaimana cara mempersempit cakupan pemecahan masalah kegagalan impor saat mengimpor data lokal menggunakan adb-import.sh?

Untuk membantu menemukan penyebab kegagalan impor lebih cepat, Anda dapat mempersempit cakupan penyebab kegagalan dari aspek-aspek berikut:

  • Ketika impor gagal, alat impor AnalyticDB for MySQL akan mencetak log kesalahan dan alasan kesalahan detail. Secara default, pernyataan SQL dipotong (maksimal 1.000 karakter). Untuk mencetak informasi SQL yang lebih lengkap, Anda dapat menggunakan perintah berikut untuk memperluas parameter failureSqlPrintLengthLimit ke nilai yang wajar (misalnya 1.500):

    printErrorSql=true
    failureSqlPrintLengthLimit=1500;
  • Karena SQL telah mengatur batchSize, biasanya mengeksekusi SQL dalam batch ribuan baris, yang tidak kondusif untuk mengidentifikasi baris kesalahan. Anda dapat mengurangi parameter batchSize (misalnya, atur menjadi 10) untuk membantu menemukan baris kesalahan. Perintah modifikasi parameternya sebagai berikut:

    batchSize=10;
  • Jika file telah dibagi dan Anda mengetahui potongan file mana yang berisi baris kesalahan, untuk mereproduksi masalah, Anda dapat mengubah parameter dataPath untuk mengimpor satu file tunggal yang berisi baris kesalahan dan memeriksa pesan kesalahan. Pernyataannya sebagai berikut:

    dataPath=/u01/this/is/the/directory/where/product_info/stores/file007;

Bagaimana cara menjalankan program impor di lingkungan Windows saat mengimpor data lokal menggunakan adb-import.sh?

Lingkungan Windows tidak menyediakan skrip pemrosesan batch. Anda dapat langsung menggunakan metode berikut untuk memanggil file JAR guna mengeksekusi:

usage: java -jar adb-import-tool.jar [-a <arg>] [-b <arg>] [-B <arg>] [-c <arg>] 
      [-D <arg>] [-d <arg>] [-E <arg>] [-f <arg>] [-h <arg>] [-I <arg>] 
      [-k <arg>] [-l <arg>] [-m <arg>] [-n <arg>] [-N <arg>] [-O <arg>]
      [-o <arg>] [-p <arg>] [-P <arg>] [-Q <arg>] [-s <arg>]  [-S <arg>]
      [-t <arg>] [-T <arg>] [-u <arg>] [-w <arg>][-x <arg>] [-y <arg>] [-z <arg>]

Parameter

Wajib

Deskripsi

-h,--ip <arg>

Wajib

Alamat koneksi kluster AnalyticDB for MySQL.

-u,--username <arg>

Akun database kluster AnalyticDB for MySQL.

-p,--password <arg>

Kata sandi yang sesuai dengan akun database kluster AnalyticDB for MySQL.

-P,--port <arg>

Port yang digunakan oleh kluster AnalyticDB for MySQL.

-D,--databaseName <arg>

Nama database kluster AnalyticDB for MySQL

-f,--dataFile <arg>

Jalur absolut file atau folder yang akan diimpor. Skenario impor berikut didukung:

  • Hanya mengimpor satu file atau satu folder.

  • Mengimpor beberapa file secara bersamaan, dengan jalur beberapa file dipisahkan oleh koma (,).

-t,--tableName <arg>

Nama tabel yang akan diimpor.

-a,--createEmptyFinishFilePath <arg>

Opsi

Apakah akan menghasilkan file flag setelah impor selesai. Nilai default adalah string kosong, yang berarti tidak menghasilkan file flag. Untuk menghasilkan file flag, cukup masukkan nama file tersebut. Misalnya, Anda dapat mengatur -a file_a untuk menghasilkan file flag bernama file_a.

-b,--batchSize <arg>

Atur jumlah VALUES yang akan ditulis dalam batch di INSERT INTO tablename VALUES (..),(..). Nilai default: 1.

Catatan

Untuk mencapai efek penulisan data batch yang lebih baik, disarankan mengatur nilai ini antara 1024 dan 4096.

-B,--encryptPassword <arg>

Apakah akan menggunakan algoritma enkripsi untuk mengenkripsi kata sandi database. Nilai default: false, yang berarti kata sandi database tidak dienkripsi menggunakan algoritma enkripsi.

-c,--printRowCount <arg>

Apakah akan mencetak jumlah baris aktual di tabel target setelah setiap file diimpor. Nilai default: false, yang berarti tidak mencetak.

-d,--skipHeader <arg>

Apakah akan melewatkan header tabel. Nilai default: false, yang berarti tidak melewatkan header tabel.

-E,--escapeSlashAndSingleQuote <arg>

Apakah akan meng-escape simbol \ dan ' di kolom. Nilai default: true, yang berarti perlu melakukan escape.

Catatan

Escape memiliki dampak kinerja tertentu pada penguraian string klien. Jika Anda memastikan tidak ada karakter escape di file yang akan diimpor, Anda dapat mengatur parameter ini menjadi false.

-I,--ignoreErrors <arg>

Apakah akan mengabaikan batch yang gagal saat mengalami kesalahan selama impor data. Nilai default: false, yang berarti tidak mengabaikan.

-k,--skipLineNum <arg>

Jumlah baris yang dilewati, mirip dengan parameter IGNORE number {LINES | ROWS}. Nilai default: 0, yang berarti tidak melewatkan.

-l,--delimiter <arg>

Pemisah kolom. AnalyticDB for MySQL menggunakan karakter terlihat \\| sebagai pemisah kolom secara default. Juga mendukung penggunaan karakter tak terlihat sebagai pemisah. Untuk menggunakan karakter tak terlihat, Anda perlu menggunakan representasi heksadesimal. Misalnya, \x07\x07 perlu direpresentasikan dalam heksadesimal sebagai hex0707.

-m,--maxConcurrentNumOfFilesToImport <arg>

Ketika dataFile adalah folder, jumlah file yang dibaca secara paralel. Nilai default: Integer.MAX_VALUE, yang berarti membaca semua file.

-n,--nullAsQuotes <arg>

Ketika ada || di file yang akan diimpor, apakah akan mengaturnya sebagai ''. Nilai default: false, yang berarti tidak mengatur || sebagai '', tetapi sebagai null.

-N,--printErrorSql <arg>

Apakah akan mencetak SQL yang menyebabkan kesalahan saat mengalami kesalahan selama impor data. Nilai default: true, yang berarti mencetak SQL kesalahan.

-O,--connectionPoolSize <arg>

Ukuran kolam koneksi database AnalyticDB for MySQL. Nilai default: 2.

-o,--encoding <arg>

Encoding file. Nilai yang valid: GBK atau UTF-8 (default).

-Q,--disableInsertOnlyPrintSql <arg>

Apakah tidak mengeksekusi INSERT tetapi hanya mencetak perintah SQL INSERT saat mengimpor data ke database. Opsional. Nilai default: false, yang berarti mengeksekusi INSERT.

-s,--lineSeparator <arg>

Pemisah baris. AnalyticDB for MySQL menggunakan karakter terlihat \\n sebagai pemisah baris secara default. Juga mendukung penggunaan karakter tak terlihat sebagai pemisah. Untuk menggunakan karakter tak terlihat, Anda perlu menggunakan representasi heksadesimal. Misalnya, \x0d\x06\x08\x0a perlu direpresentasikan dalam heksadesimal sebagai hex0d06080a.

-S,--printErrorStackTrace <arg>

Ketika mengalami kesalahan selama impor data dan printErrorSql=true, apakah akan mencetak informasi stack kesalahan. Nilai default: false, yang berarti tidak mencetak.

-w,--windowSize <arg>

Ukuran buffer INSERT SQL. Ini memfasilitasi akselerasi pipeline dan pemisahan IO dan komputasi saat mengirim perintah INSERT SQL ke AnalyticDB for MySQL, sehingga meningkatkan kinerja klien. Nilai default: 128.

-x,--insertWithColumnNames <arg>

Apakah akan menyertakan nama kolom saat mengeksekusi perintah INSERT INTO, yaitu apakah akan mengeksekusi perintah INSERT INTO tb(column1, column2) untuk mengimpor data. Nilai default: true, yang berarti nama kolom diperlukan saat mengimpor.

-y,--failureSqlPrintLengthLimit <arg>

Ketika perintah INSERT gagal dan SQL kesalahan perlu dicetak, gunakan parameter ini untuk mengatur panjang pemotongan SQL kesalahan yang akan dicetak. Nilai default: 1000.

-z,--connectionUrlParam <arg>

Parameter koneksi database. Nilai default: ?characterEncoding=utf-8.

Contoh: ?characterEncoding=utf-8&autoReconnect=true.

Contoh:

  • Contoh 1: Impor satu file menggunakan konfigurasi parameter default. Perintahnya sebagai berikut:

    java -Xmx8G -Xms8G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/lineitem.sample --tableName LINEITEM
  • Contoh 2: Ubah parameter terkait untuk memaksimalkan throughput saat mengimpor semua file dalam folder. Perintahnya sebagai berikut:

    java -Xmx16G -Xms16G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/tpch100g --tableName LINEITEM --concurrency 64 --batchSize 2048