Hologres menyediakan log kueri lambat. Secara default, Hologres mengumpulkan kueri Data Manipulation Language (DML) yang memakan waktu lebih dari 100 ms dan semua kueri Data Definition Language (DDL). Data log ini digunakan oleh fitur diagnosis SQL untuk menganalisis tren dan detail guna membantu Anda memahami penggunaan instans dan melakukan optimasi. Topik ini menjelaskan cara menggunakan fitur diagnosis SQL.
Fitur dan saran
Fitur diagnosis SQL menyediakan informasi berikut:
Item diagnosis | Deskripsi |
Total kueri | Jumlah total kueri dalam rentang waktu yang dipilih. |
Kueri berhasil | Jumlah total kueri yang berhasil dalam rentang waktu yang dipilih. |
Kueri gagal | Jumlah total kueri yang gagal dalam rentang waktu yang dipilih. |
Detail kueri gagal | Menampilkan kode kesalahan dan jumlah kegagalan terkait untuk membantu Anda mengelola kueri yang gagal. Bagian ini juga menunjukkan kueri khas dan detail kesalahan. Anda dapat menuju ke Query Insight untuk melihat detail lebih lanjut. Anda juga dapat melihat Tabel referensi kode kesalahan untuk mengetahui penyebab kesalahan secara rinci guna meningkatkan stabilitas instans. |
Tren kueri berhasil dan gagal | Menunjukkan rasio antara kueri berhasil dan gagal dalam rentang waktu yang dipilih. Hal ini membantu Anda memahami status eksekusi kueri secara keseluruhan pada instans tersebut. |
Tren rasio konsumsi waktu kueri | Menunjukkan tren rasio konsumsi waktu kueri dalam rentang waktu yang dipilih. Secara default, analisis ini hanya mencakup rasio konsumsi waktu untuk kueri |
Tren DML | Menunjukkan tren eksekusi untuk kueri DML. Secara default, analisis ini hanya mencakup kueri |
Tren DDL | Menunjukkan tren eksekusi untuk kueri DDL. Analisis ini hanya mencakup pernyataan DDL berikut: |
Rasio atau tren sumber aplikasi kueri | Menunjukkan rasio atau tren kueri berdasarkan Anda dapat menganalisis aplikasi yang memiliki rasio tinggi. Kami merekomendasikan menetapkan |
Rasio atau tren kueri berdasarkan pengguna | Menunjukkan rasio atau tren kueri berdasarkan Hal ini memungkinkan Anda menganalisis eksekusi kueri pengguna dengan lebih jelas. Kami merekomendasikan menggunakan username berbeda untuk tugas yang berbeda, bukan satu akun tunggal. Praktik ini mempermudah troubleshooting masalah. |
Tren kueri berdasarkan mesin eksekusi | Menunjukkan tren eksekusi kueri untuk mesin eksekusi berbeda dalam rentang waktu yang dipilih. Hologres menggunakan mesin eksekusi berbeda berdasarkan karakteristik kueri, seperti HQE, PQE, SDK, atau FixedQE. Untuk informasi selengkapnya, lihat Arsitektur layanan. Kami merekomendasikan menghindari kueri PQE. Anda dapat menulis ulang kueri tersebut menjadi kueri HQE untuk mendapatkan performa yang lebih baik. |
Catatan
Data diagnosis SQL tidak mencakup pernyataan SQL yang terkait sistem. Kondisi filternya adalah sebagai berikut:
WHERE usename != 'system' AND client_addr != '127.0.0.1' AND (application_name IS NULL OR application_name NOT IN ('AutoPartition', 'holoweb_system', 'HgGenInQuery'))Secara default, tabel
hologres.hg_query_loghanya mencatat kueri DML dan DDL yang memakan waktu lebih dari1 s, sedangkan diagnosis SQL menganalisis semua kueri DML dan DDL yang memakan waktu lebih dari100 ms. Jika Anda menemukan bahwa tabelhologres.hg_query_logberisi data lebih sedikit dibandingkan diagnosis SQL, hal ini biasanya karena tabelhologres.hg_query_loghanya mencatat kueri yang memakan waktu lebih dari1 s. Anda dapat mengubah parameterlog_min_duration_statementuntuk mengumpulkan kueri yang memakan waktu lebih dari100 ms. Untuk informasi selengkapnya, lihat Lihat dan analisis log kueri lambat.Seperti halnya log kueri lambat, data diagnosis SQL hanya tersedia untuk bulan terakhir.
Data diperbarui dengan basis T+1. Anda dapat mengkueri data dari hari sebelumnya (T-1) dan bulan sebelumnya. Secara default, data dari hari sebelumnya ditampilkan. Anda dapat memfilter data berdasarkan waktu sesuai kebutuhan.
Izin yang diperlukan untuk mengkueri data diagnosis SQL sama dengan izin untuk log kueri lambat. Untuk memberikan izin tampilan, lihat Berikan izin tampilan.
Prosedur
Anda dapat menggunakan HoloWeb untuk melihat data diagnosis SQL.
-
Masuk ke konsol HoloWeb. Untuk informasi selengkapnya, lihat Hubungkan ke HoloWeb dan jalankan kueri.
-
Pada bilah navigasi atas, klik Diagnostics and Optimization.
Pada panel navigasi di sebelah kiri, pilih Instance Diagnosis > SQL Diagnosis.
Di bagian atas halaman SQL Diagnosis, tentukan kondisi kueri.
Parameter kueri:
Parameter
Wajib
Deskripsi
Instance name
Yes
Nama instans yang ingin Anda kueri kueri lambatnya. Instans saat ini digunakan secara default.
Time range
Yes
Rentang waktu untuk kueri lambat. Default-nya adalah Previous Day. Anda dapat memilih data hingga satu bulan terakhir.
Klik Submit untuk melihat hasil kueri.
Diagnosis kesalahan SQL cerdas
Untuk kueri yang gagal, HoloWeb SQL Editor menampilkan informasi dari SQL Diagnosis. Fitur Query Insight mendukung diagnosis SQL cerdas dan secara otomatis mengembalikan penyebab kegagalan beserta solusi yang direkomendasikan ke SQL Editor. Fitur ini membantu Anda menangani kueri yang gagal dengan lebih mudah.
Tabel referensi kode kesalahan
Kode kesalahan | Deskripsi | Pesan kesalahan lengkap umum | Solusi |
HG_ERRCODE_FDW_ERROR | Terjadi kesalahan saat mengimpor metadata dari tabel eksternal MaxCompute ke Hologres. Kesalahan ini biasanya disebabkan oleh tipe tabel yang tidak didukung. |
| Untuk informasi selengkapnya, lihat HG_ERRCODE_FDW_ERROR. |
ERRCODE_FDW_ERROR | Terjadi kesalahan saat mengkueri tabel eksternal. |
| Selesaikan masalah berdasarkan pesan kesalahan spesifik. Untuk informasi selengkapnya, lihat ERRCODE_FDW_ERROR. |
| Kendala unik dilanggar. Kesalahan ini sering terjadi ketika menulis kunci primer duplikat. |
|
|
| Konstraint CHECK dilanggar. Kesalahan ini sering terjadi ketika Anda menulis data ke tabel partisi Hologres dan nilai partisi tidak sesuai dengan partisi yang ditentukan. Misalnya, data untuk partisi |
| Periksa apakah data partisi sesuai dengan nilai partisi yang ditentukan. Jika tidak sesuai, modifikasi datanya. |
| Kendala NOT NULL dilanggar. Kesalahan ini sering terjadi ketika data null ditulis ke bidang yang memiliki kendala NOT NULL. |
| Bersihkan data kotor. |
ERRCODE_UNDEFINED_TABLE | Tabel tidak ada. Kesalahan ini biasanya terjadi ketika metadata belum diperbarui setelah tabel dibuat, atau ketika tabel dipotong (truncate) atau dihapus (drop) selama eksekusi kueri. |
| Gunakan Query Insight untuk memeriksa adanya tugas TRUNCATE atau DROP konkuren, lalu coba ulang tugas tersebut. Untuk informasi selengkapnya, lihat Query Insight. |
| Terjadi kesalahan internal yang tidak terduga. Instans mungkin mati, atau kueri terputus secara tak terduga. |
| Tidak ada. |
| Kueri dibatalkan. Kesalahan ini biasanya disebabkan oleh timeout klien, atau karena tabel dipotong (truncate) atau dihapus (drop). |
| Untuk solusinya, lihat Kelola kueri. |
| Fitur yang diminta tidak didukung. |
| Untuk solusinya, lihat FAQ tentang pernyataan SQL Hologres. |
ERRCODE_UNDEFINED_OBJECT | Objek tidak didefinisikan. Kesalahan ini biasanya terjadi ketika kolom atau kelompok tabel yang ditentukan tidak ada. |
|
|
| Akun saat ini memiliki izin yang tidak mencukupi. Anda harus memberikan izin yang diperlukan kepada akun tersebut. |
| Untuk solusinya, lihat Masalah izin Hologres. |
| Kueri menyebabkan kesalahan kehabisan memori (OOM) karena memori tidak mencukupi. |
| Untuk solusinya, lihat Panduan troubleshooting kesalahan OOM. |
| Terjadi ketidaksesuaian tipe data. Kesalahan ini biasanya terjadi ketika tipe data aktual suatu bidang tidak sesuai dengan tipe data yang dibutuhkan oleh ekspresi. |
| Periksa apakah kolom dalam pernyataan SQL sesuai. |
| Pernyataan SQL berisi pembagian dengan |
| Bersihkan data kotor atau gunakan parameter GUC untuk mencegah kesalahan akibat pembagian dengan nol. Untuk informasi selengkapnya, lihat Penggunaan fungsi. |
ERRCODE_STRING_DATA_RIGHT_TRUNCATION | Data string terpotong. Kesalahan ini sering terjadi ketika nilai bidang VARCHAR melebihi panjang yang ditentukan saat tabel dibuat. |
| Buat ulang tabel dan ubah panjang bidang VARCHAR, atau atur tipe bidang menjadi TEXT. |
| Batas Hologres terlampaui. Kesalahan ini biasanya terjadi ketika jumlah partisi yang dipindai dari tabel eksternal, jumlah baris yang dibaca, atau jumlah byte yang dibaca melebihi batas yang ditentukan. |
| Kueri tabel eksternal melebihi batas. Untuk solusinya, lihat FAQ dan diagnosis untuk koneksi ke MaxCompute. |
ERRCODE_SYNTAX_ERROR | Pernyataan SQL berisi kesalahan sintaksis. |
| Periksa sintaksis SQL. |
ERRCODE_UNDEFINED_FUNCTION | Fungsi yang tidak didukung digunakan. Kesalahan ini dapat terjadi karena sintaksis fungsi salah, ekstensi yang diperlukan belum dibuat, atau fungsi tersebut tidak didukung. |
| Ikuti sintaksis fungsi untuk menghindari kesalahan akibat sintaksis salah atau ekstensi yang hilang. Untuk informasi selengkapnya, lihat Referensi fungsi. |
ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED | Akun tidak memiliki izin baca pada tabel eksternal. |
| Untuk solusinya, lihat Masalah izin MaxCompute. |
| Objek duplikat ada. Kesalahan ini biasanya terjadi ketika Anda mencoba membuat ekstensi, publikasi, atau role yang duplikat. |
| Jika objek sudah ada, Anda tidak perlu membuatnya lagi. |
| Representasi teks tidak valid. Kesalahan ini sering terjadi ketika mengonversi string ke tipe data lain dan data string tidak valid, seperti mengonversi string kosong ("") ke INT. |
| Bersihkan data kotor. |
ERRCODE_BAD_COPY_FILE_FORMAT | Format file atau data salah untuk perintah COPY. Kesalahan ini sering terjadi ketika data berisi delimiter yang ditentukan oleh perintah COPY, seperti spasi, sehingga menyebabkan ketidaksesuaian jumlah kolom. |
| Bersihkan data kotor. |
ERRCODE_UNDEFINED_COLUMN | Kueri berisi kolom yang tidak ada. |
| Periksa sintaksis SQL. |
ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE | Nilai numerik di luar jangkauan:
|
| Periksa data kotor atau definisi tipe yang salah dan ubah tipe kolom jika perlu. |
ERRCODE_DATETIME_FIELD_OVERFLOW | Terjadi overflow nilai pada bidang terkait waktu, seperti timestamp, timestamptz, date, time, atau timetz. Misalnya, menulis |
| Bersihkan data kotor. |
ERRCODE_INVALID_PARAMETER_VALUE | Nilai parameter tidak valid digunakan. Kesalahan ini biasanya terjadi ketika parameter tidak memenuhi persyaratan. Anda dapat menyelesaikan masalah berdasarkan pesan kesalahan spesifik. Misalnya, kesalahan |
| Periksa sintaksis SQL. |
ERRCODE_INVALID_DATETIME_FORMAT | Format tanggal tidak valid digunakan. Data tanggal tidak memenuhi persyaratan format. Misalnya, |
| Bersihkan data kotor. |
ERRCODE_CHARACTER_NOT_IN_REPERTOIRE | Karakter tidak termasuk dalam repertoar. Kesalahan ini sering terjadi ketika ada karakter tidak valid yang bukan bagian dari encoding UTF-8. |
| Bersihkan data kotor. |
ERRCODE_DUPLICATE_TABLE | Tabel duplikat ada. Kesalahan ini sering terjadi ketika Anda mencoba membuat tabel dengan nama yang sama dengan tabel yang sudah ada. |
| Jika tabel sudah ada, Anda tidak perlu membuatnya lagi. |
ERRCODE_UNTRANSLATABLE_CHARACTER | Karakter tidak dapat dikonversi ke format target. |
Catatan Ini menunjukkan bahwa karakter dalam encoding UTF-8 tidak memiliki padanan dalam format target GBK. | Bersihkan data kotor. |
ERRCODE_GROUPING_ERROR | Terjadi kesalahan pengelompokan. Kesalahan ini terkait dengan klausa GROUP BY. |
| Periksa sintaksis SQL. Saat menggunakan fungsi agregat, semua bidang lain harus dimasukkan dalam klausa |
| Terjadi status transaksi tidak valid. Operasi terkait transaksi tidak valid. Misalnya, saat Anda menggunakan CALL SET_TABLE_PROPERTY untuk membuat kunci distribusi, operasi tersebut tidak berada dalam transaksi yang sama dengan pembuatan tabel. |
| Pernyataan |
ERRCODE_AMBIGUOUS_COLUMN | Referensi kolom ambigu dibuat. Kesalahan ini biasanya terjadi ketika nama kolom yang sama dalam pernyataan SQL dapat merujuk ke kolom berbeda. Misalnya, dalam pernyataan |
| Periksa sintaksis SQL. |
ERRCODE_DUPLICATE_COLUMN | Kolom duplikat didefinisikan. Kesalahan ini sering terjadi ketika bidang yang sama dideklarasikan beberapa kali saat pembuatan tabel. |
| Periksa sintaksis SQL. |
ERRCODE_AMBIGUOUS_FUNCTION | Pemanggilan fungsi ambigu dilakukan. Kesalahan ini biasanya terjadi ketika fungsi mendukung beberapa tipe parameter input, tetapi tipe data parameter yang dilewatkan tidak ditentukan secara jelas. | Fungsi `to_char` memiliki bentuk seperti
| Periksa sintaksis SQL. |
ERRCODE_INVALID_COLUMN_DEFINITION | Definisi kolom tidak valid digunakan. Di Hologres, kesalahan ini sering disebabkan oleh tidak menentukan presisi untuk tipe data Numeric atau Decimal. |
| Anda dapat memproses data kotor. |
ERRCODE_INVALID_CATALOG_NAME ERRCODE_UNDEFINED_DATABASE | Database yang ditentukan tidak ada. | None | Periksa apakah database tersebut ada. |
ERRCODE_CANNOT_COERCE | Terjadi kesalahan karena data tidak dapat dikonversi antara dua tipe data. |
| Periksa sintaksis SQL. |
ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST | Objek dependen masih ada. Kesalahan ini sering terjadi ketika Anda mencoba menghapus objek yang masih digunakan oleh objek lain. Misalnya, Anda tidak dapat menghapus skema jika masih berisi tabel. | None | Atasi dependensi terkait. Untuk informasi selengkapnya, lihat Hapus akun. |
ERRCODE_UNDEFINED_SCHEMA atau ERRCODE_INVALID_SCHEMA_NAME | Skema yang ditentukan tidak ada. |
| Periksa apakah skema tersebut ada. Jika tidak ada, buatlah. |
ERRCODE_DUPLICATE_DATABASE | Database duplikat ada. Kesalahan ini terjadi ketika Anda mencoba membuat database yang sudah ada. | None | Jika database sudah ada, Anda tidak perlu membuatnya lagi. |
AutoAnalyze-Failed | Tugas Auto Analyze gagal. |
| Tugas Auto Analyze gagal, yang biasanya disebabkan oleh masalah backend. Kirim tiket untuk troubleshooting masalah tersebut. |
Import Foreign Table Not Found | Tabel eksternal tidak ditemukan. |
| Periksa apakah tabel eksternal yang ingin Anda akses ada. |
Cannot Acquire Lock In Time | Kesalahan ini biasanya disebabkan oleh kegagalan memperoleh lock. Ketika kueri konkurensi tinggi dan operasi drop menargetkan tabel yang sama, deadlock dapat terjadi pada node backend. Hal ini menyebabkan semua operasi pada tabel tersebut macet dan melaporkan kesalahan. |
| Untuk solusinya, lihat Lock dan troubleshooting lock. |
| Kesalahan tak terduga. |
| Ini adalah kesalahan tak terduga. Anda dapat mengirim tiket untuk troubleshooting masalah tersebut. |