Hologres menyediakan log kueri lambat yang mencatat pernyataan DML yang membutuhkan lebih dari 100 ms untuk dieksekusi dan semua pernyataan DDL. Fitur diagnosis SQL membantu Anda menganalisis tren dan detail kueri dari berbagai dimensi, memahami penggunaan instance, serta mengoptimalkan performa. Topik ini menjelaskan cara menggunakan fitur diagnosis SQL.
Item diagnostik dan saran
Tabel berikut menjelaskan item diagnostik yang disediakan oleh fitur diagnosis SQL.
Item diagnostik | Deskripsi |
Jumlah total kueri | Menampilkan jumlah total kueri yang dilakukan dalam periode waktu tertentu. |
Kueri Berhasil | Menampilkan jumlah total kueri yang berhasil dilakukan dalam periode waktu tertentu. |
Kueri Gagal | Menampilkan jumlah total kueri gagal dalam periode waktu tertentu. |
Detail Kueri Gagal | Menampilkan kode kesalahan, jumlah kegagalan untuk setiap jenis kode kesalahan, kueri tipikal, dan detail kegagalan untuk memudahkan pemecahan masalah kueri gagal. Anda dapat menggunakan fitur Query Insight untuk melihat lebih banyak detail kueri. Anda juga dapat mengidentifikasi penyebab masalah berdasarkan kode kesalahan. Untuk informasi lebih lanjut tentang fitur Query Insight, lihat Query Insight. Untuk informasi lebih lanjut tentang kode kesalahan, lihat Kode kesalahan dalam topik ini. |
Tren Kueri Berhasil dan Gagal | Menampilkan tren jumlah kueri berhasil dan gagal dalam periode waktu tertentu. Ini memungkinkan Anda mendapatkan status keseluruhan kueri yang sedang berjalan pada instance saat ini. |
Tren persentase konsumsi waktu Kueri | Menampilkan tren durasi eksekusi kueri dalam periode waktu tertentu. Secara default, hanya durasi eksekusi pernyataan berikut yang dikumpulkan: |
Tren DML | Menampilkan tren jumlah kali berbagai jenis kueri DML dilakukan dalam periode waktu tertentu. Secara default, statistik hanya dikumpulkan untuk jenis pernyataan DML berikut: |
Tren DDL | Menampilkan tren jumlah kali berbagai jenis kueri DDL dilakukan dalam periode waktu tertentu. Secara default, statistik hanya dikumpulkan untuk jenis pernyataan DDL berikut: |
Persentase sumber aplikasi kueri | Menampilkan proporsi atau tren kueri berdasarkan parameter Anda dapat menganalisis aplikasi yang memulai sebagian besar kueri. Untuk membantu Anda lebih baik mengamati tugas-tugas abnormal, kami sarankan Anda menentukan nilai |
Persentase kueri dalam dimensi pengguna | Menampilkan proporsi atau tren kueri berdasarkan parameter Anda dapat melihat jumlah kueri yang dilakukan dengan menggunakan setiap akun secara visual. Untuk memudahkan pemecahan masalah, kami sarankan Anda menggunakan akun yang berbeda untuk menjalankan tugas yang berbeda. |
Tren mesin eksekusi kueri | Menampilkan tren jumlah kueri yang dilakukan menggunakan mesin yang berbeda dalam periode waktu tertentu. Hologres menggunakan mesin yang berbeda untuk kueri yang berbeda berdasarkan karakteristik kueri. Mesin-mesin tersebut termasuk Hologres Query Engine (HQE), PostgreSQL Query Engine (PQE), SDK, dan FixedQE. Untuk informasi lebih lanjut tentang mesin-mesin tersebut, lihat Arsitektur. Kami sarankan Anda tidak melakukan kueri PQE. Anda dapat melakukan kueri HQE sebagai gantinya untuk mencapai performa yang lebih baik. |
Catatan penggunaan
Fitur diagnosis SQL tidak mengumpulkan data pernyataan SQL terkait sistem. Kode berikut menunjukkan kondisi filter:
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_logmencatat pernyataan DML yang memerlukan lebih dari1suntuk dieksekusi serta semua pernyataan DDL. Sementara itu, fitur diagnosis SQL mengumpulkan data semua pernyataan DML dan DDL yang membutuhkan lebih dari100 msuntuk dieksekusi. Akibatnya, jumlah data dalam tabelhologres.hg_query_logmungkin lebih sedikit dibandingkan dengan jumlah data yang dikumpulkan oleh fitur diagnosis SQL. Untuk menyelesaikan masalah ini, Anda dapat mengubah nilai parameterlog_min_duration_statementmenjadi100 ms. Untuk informasi lebih lanjut, lihat bagian "log_min_duration_statement" di Kueri dan analisis log kueri lambat.Baik fitur diagnosis SQL maupun log kueri lambat hanya memungkinkan Anda menanyakan data dalam bulan sebelumnya.
Data diperbarui pada hari berikutnya. Oleh karena itu, Anda hanya dapat menanyakan data dalam bulan sebelumnya mulai dari hari sebelumnya. Secara default, data hari sebelumnya ditampilkan. Anda dapat memfilter data berdasarkan waktu sesuai kebutuhan bisnis.
Kebijakan izin untuk data diagnosis SQL sama dengan kebijakan izin untuk log kueri lambat. Untuk informasi lebih lanjut, lihat bagian "Berikan izin kueri kepada pengguna" di Kueri dan analisis log kueri lambat.
Prosedur
Bagian ini menjelaskan cara menggunakan HoloWeb untuk melihat data diagnosis SQL secara visual.
Masuk ke konsol HoloWeb. Untuk informasi lebih lanjut, lihat Hubungkan ke HoloWeb dan lakukan kueri.
Di bilah navigasi atas, klik Diagnostics and Optimization.
Di panel navigasi sebelah kiri, pilih Instance diagnosis > SQL diagnosis.
Di bagian atas halaman SQL diagnosis, konfigurasikan kondisi kueri.
Tabel berikut menjelaskan parameter kondisi kueri.
Parameter
Diperlukan
Deskripsi
Nama Instance
Ya
Nama instance yang ingin Anda kueri kueri lambatnya. Secara default, instance yang terhubung dipilih.
Waktu
Ya
Rentang waktu kueri lambat. Secara default, Yesterday dipilih. Rentang waktu terpanjang adalah bulan sebelumnya.
Klik Submission. Hasil kueri akan ditampilkan.
Diagnosis SQL cerdas
Tab SQL Editor di konsol HoloWeb menampilkan informasi SQL diagnosis jika kueri gagal. Halaman Query Insight juga menyediakan fitur diagnosis SQL cerdas, yang memungkinkan sistem secara otomatis mengembalikan penyebab dan solusi kueri gagal ke tab SQL Editor. Dengan cara ini, Anda dapat menangani kueri gagal dengan lebih nyaman.
Kode kesalahan
Kode kesalahan | Deskripsi | Pesan kesalahan umum | Solusi |
HG_ERRCODE_FDW_ERROR | Pesan kesalahan dilaporkan ketika metadata tabel MaxCompute diimpor ke Hologres. Masalah ini sering terjadi karena tabel MaxCompute dari tipe tersebut tidak didukung oleh Hologres. |
| Untuk informasi lebih lanjut, lihat HG_ERRCODE_FDW_ERROR. |
ERRCODE_FDW_ERROR | Pesan kesalahan dilaporkan selama kueri menggunakan tabel asing. |
| Untuk informasi lebih lanjut, lihat ERRCODE_FDW_ERROR. |
| Ada pelanggaran batasan unik. Kode kesalahan ini sering dikembalikan ketika ada nilai kunci utama duplikat selama penulisan data. |
|
|
| Ada pelanggaran batasan cek. Kode kesalahan ini sering dikembalikan ketika Anda menulis catatan data yang nilai kunci partisinya berbeda dari nilai kunci partisi yang ditentukan dalam pernyataan. Misalnya, Anda menulis data yang nilai kunci partisinya adalah |
| Pastikan Anda menulis data yang nilai kunci partisinya sama dengan nilai kunci partisi yang ditentukan dalam pernyataan. |
| Ada pelanggaran batasan NOT NULL. Kode kesalahan ini sering dikembalikan ketika Anda menulis data NULL ke kolom NOT NULL. |
| Proses data kotor. |
ERRCODE_UNDEFINED_TABLE | Tabel tidak ada. Kode kesalahan ini sering dikembalikan ketika tabel dibuat tetapi metadata belum diperbarui atau operasi TRUNCATE atau DROP dilakukan pada tabel selama kueri. |
| Gunakan fitur Query Insight untuk memeriksa apakah operasi TRUNCATE atau DROP dilakukan pada tabel selama kueri. Lalu, coba lagi tugas tersebut. Untuk informasi lebih lanjut, lihat Query Insight. |
| Kesalahan internal tak terduga terjadi. Misalnya, instance rusak atau kueri terganggu secara tak terduga. |
| Tidak ada. |
| Kueri dibatalkan. Kode kesalahan ini sering dikembalikan ketika klien habis waktu atau operasi TRUNCATE atau DROP dilakukan pada tabel. |
| Untuk informasi lebih lanjut, lihat Kelola kueri. |
| Fitur tertentu tidak didukung. |
| Untuk informasi lebih lanjut, lihat FAQ tentang pernyataan SQL. |
ERRCODE_UNDEFINED_OBJECT | Objek yang tidak ditentukan ditentukan dalam pernyataan SQL. Kode kesalahan ini sering dikembalikan ketika kolom atau grup tabel yang ditentukan dalam pernyataan SQL tidak ada. |
|
|
| Izin yang diperlukan tidak diberikan kepada akun. Otorisasi diperlukan. |
| Untuk informasi lebih lanjut, lihat Izin pada instance Hologres. |
| Kesalahan memori habis (OOM) terjadi karena memori tidak cukup untuk kueri. |
| Untuk informasi lebih lanjut, lihat FAQ tentang OOM. |
| Tipe data tidak cocok. Kode kesalahan ini sering dikembalikan ketika tipe data bidang yang ditentukan dalam pernyataan SQL tidak cocok dengan tipe data aktual dari bidang tersebut. |
| Pastikan tipe data yang ditentukan dalam pernyataan SQL cocok dengan tipe data aktual dari bidang tersebut. |
| Pernyataan SQL menentukan pembagian dengan |
| Proses data kotor, atau konfigurasikan parameter Grand Unified Configuration (GUC) untuk mengizinkan pembagian dengan 0. Untuk informasi lebih lanjut, lihat bagian "Fungsi" di Migrasi data dari MySQL ke Hologres. |
ERRCODE_STRING_DATA_RIGHT_TRUNCATION | String dipotong dari kanan. Kode kesalahan ini sering dikembalikan ketika panjang nilai bidang tipe VARCHAR melebihi batas atas yang ditentukan saat tabel dibuat. |
| Buat tabel lain dan modifikasi batas atas panjang bidang tipe VARCHAR. Anda juga dapat mengatur tipe data menjadi TEXT. |
| Batas atas yang ditentukan di Hologres dilampaui. Misalnya, jumlah partisi yang ingin Anda pindai, jumlah baris data yang ingin Anda baca, atau jumlah byte yang ingin Anda baca dalam tabel asing melebihi batas atas. |
| Untuk informasi lebih lanjut tentang cara memperbaiki masalah bahwa batas atas dilampaui ketika Anda menanyakan data menggunakan tabel asing, lihat FAQ tentang integrasi dengan MaxCompute. |
ERRCODE_SYNTAX_ERROR | Sintaks SQL tidak valid. |
| Periksa sintaks pernyataan SQL. |
ERRCODE_UNDEFINED_FUNCTION | Sintaks fungsi tidak valid, ekstensi belum dibuat, atau fungsi tidak didukung. |
| Gunakan fungsi berdasarkan sintaks fungsi untuk mencegah masalah seperti sintaks tidak valid atau tidak ada ekstensi. Untuk informasi lebih lanjut, lihat Fungsi. |
ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED | Anda tidak diberikan izin membaca pada tabel asing. |
| Untuk informasi lebih lanjut, lihat Izin pada MaxCompute. |
| Objek duplikat ada. Kode kesalahan ini sering dikembalikan ketika Anda membuat ekstensi, publikasi, atau peran duplikat. |
| Jangan buat objek duplikat. |
| Ekspresi teks tidak valid. Kode kesalahan ini sering dikembalikan ketika Anda mengonversi string yang tidak valid menjadi tipe data lain. Misalnya, Anda mengonversi string kosong ("") menjadi tipe data INT. |
| Proses data kotor. |
ERRCODE_BAD_COPY_FILE_FORMAT | Format file atau data tempat operasi COPY dilakukan tidak valid. Kode kesalahan ini sering dikembalikan ketika data sumber mengandung pemisah, seperti spasi, yang ditentukan dalam pernyataan COPY. Akibatnya, jumlah kolom dalam tabel sumber berbeda dari jumlah kolom dalam tabel tujuan. |
| Proses data kotor. |
ERRCODE_UNDEFINED_COLUMN | Pernyataan kueri mendefinisikan kolom yang tidak ada. |
| Periksa sintaks pernyataan SQL. |
ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE | Nilai data di luar rentang yang ditentukan.
|
| Periksa data kotor atau kesalahan definisi tipe dan modifikasi tipe data kolom. |
ERRCODE_DATETIME_FIELD_OVERFLOW | Terjadi overflow nilai pada kolom tipe TIMESTAMP, TIMESTAMPZ, DATE, TIME, atau TIMETZ. Misalnya, nilai |
| Proses data kotor. |
ERRCODE_INVALID_PARAMETER_VALUE | Nilai parameter tidak valid. Anda dapat menangani kesalahan berdasarkan pesan kesalahan. Misalnya, pesan kesalahan |
| Periksa sintaks pernyataan SQL. |
ERRCODE_INVALID_DATETIME_FORMAT | Format tanggal tidak valid. Misalnya, format tanggal dalam pernyataan |
| Proses data kotor. |
ERRCODE_CHARACTER_NOT_IN_REPERTOIRE | Beberapa karakter tidak didukung oleh format pengkodean. Kode kesalahan ini sering dikembalikan ketika sebuah karakter tidak didukung oleh UTF-8. |
| Proses data kotor. |
ERRCODE_DUPLICATE_TABLE | Tabel duplikat ada. Kode kesalahan ini sering dikembalikan ketika Anda membuat tabel yang memiliki nama sama dengan tabel yang sudah ada. |
| Jangan buat tabel yang memiliki nama sama dengan tabel yang sudah ada. |
ERRCODE_UNTRANSLATABLE_CHARACTER | Beberapa karakter tidak dapat dikonversi ke format tertentu. |
Catatan Karakter yang dikodekan dalam UTF-8 tidak memiliki padanan dalam GBK. | Proses data kotor. |
ERRCODE_GROUPING_ERROR | Klausa GROUP BY tidak valid. |
| Periksa sintaks pernyataan SQL dan pastikan kolom dalam fungsi agregat termasuk dalam klausa GROUP BY. |
| Status transaksi tidak valid. Kode kesalahan ini muncul ketika operasi terkait transaksi tidak valid. Contohnya, pernyataan CALL SET_TABLE_PROPERTY yang digunakan untuk membuat kunci distribusi tabel dan pernyataan pembuatan tabel tidak termasuk dalam transaksi yang sama. |
| Eksekusi pernyataan |
ERRCODE_AMBIGUOUS_COLUMN | Nama kolom dalam pernyataan ambigu. Kode kesalahan ini sering dikembalikan ketika nama kolom dalam pernyataan SQL dapat merujuk ke kolom di lebih dari satu tabel. Sebagai contoh, dalam pernyataan |
| Periksa sintaks pernyataan SQL untuk memastikan kolom dirujuk secara eksplisit. |
ERRCODE_DUPLICATE_COLUMN | Kolom duplikat ada. Kode kesalahan ini sering dikembalikan ketika bidang dideklarasikan beberapa kali selama pembuatan tabel. |
| Periksa sintaks pernyataan SQL. |
ERRCODE_AMBIGUOUS_FUNCTION | Fungsi tidak valid. Fungsi mendukung parameter input dari berbagai tipe data. Kode kesalahan ini sering dikembalikan ketika tipe data parameter input tidak didukung. | Misalnya, fungsi to_char mendukung
| Periksa sintaks pernyataan SQL. |
ERRCODE_INVALID_COLUMN_DEFINITION | Definisi kolom tidak valid. Kode kesalahan ini biasanya dikembalikan ketika presisi tidak ditentukan untuk kolom tipe NUMERIC atau DECIMAL dalam tabel Hologres. |
| Proses data mentah. |
ERRCODE_INVALID_CATALOG_NAME ERRCODE_UNDEFINED_DATABASE | Database yang ditentukan tidak tersedia. | Tidak ada. | Pastikan database sudah ada. |
ERRCODE_CANNOT_COERCE | Konversi antara dua tipe data tidak didukung. |
| Periksa sintaks pernyataan SQL. |
ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST | Kode kesalahan ini sering dikembalikan ketika Anda mencoba menghapus objek yang masih bergantung pada satu atau lebih objek lain yang ada. Misalnya, ketika Anda menghapus skema, tabel dalam skema tersebut masih ada. | Tidak ada. | Proses dependensi. Untuk informasi lebih lanjut, lihat Hapus akun. |
ERRCODE_UNDEFINED_SCHEMA atau ERRCODE_INVALID_SCHEMA_NAME | Skema yang ditentukan tidak ada. |
| Periksa apakah skema ada. Jika skema tidak ada, buat skema. |
ERRCODE_DUPLICATE_DATABASE | Database duplikat ada. Kode kesalahan ini dikembalikan ketika Anda membuat database duplikat. | Tidak ada. | Jangan buat database duplikat. |
AutoAnalyze-Failed | Fitur auto-analyze gagal. |
| Dalam banyak kasus, kode kesalahan ini disebabkan oleh masalah backend. Kirim tiket untuk pemecahan masalah. |
Import Foreign Table Not Found | Tabel asing tidak dapat ditemukan. |
| Periksa apakah tabel asing ada. |
Cannot Acquire Lock In Time | Kode kesalahan ini sering dikembalikan karena kegagalan dalam memperoleh kunci. Misalnya, jika Anda melakukan kueri konkurensi tinggi dan operasi drop pada tabel yang sama, deadlock terjadi pada node backend. Akibatnya, semua operasi pada tabel macet dan kode kesalahan dikembalikan. |
| Untuk informasi lebih lanjut, lihat Kunci dan pemecahan masalah kunci. |
| Kesalahan tak terduga terjadi. |
| Kirim tiket untuk pemecahan masalah. |