Petunjuk SQL memungkinkan Anda mengganti keputusan perutean default dari titik akhir kluster yang dikonfigurasi dengan Pemisahan Baca/Tulis (Pemisahan Baca/Tulis Otomatis). Petunjuk memiliki prioritas perutean tertinggi dan mengabaikan baik tingkat konsistensi maupun pemisahan transaksi. Evaluasi dampaknya sebelum menggunakannya di lingkungan produksi.
Batasan
Petunjuk hanya berfungsi pada titik akhir kluster yang mode baca/tulis-nya diatur ke Read/Write (Automatic Read/Write Splitting). Petunjuk tidak didukung pada titik akhir kluster atau titik akhir utama yang diatur ke Read-only.
Untuk detail tentang mode baca/tulis titik akhir, lihat bagian "Mode baca/tulis untuk titik akhir kluster" dalam Endpoints.
Petunjuk yang tersedia
| Petunjuk | Rute ke | Penggunaan umum |
|---|---|---|
/*FORCE_MASTER*/ | Node primary | Memaksa operasi baca dijalankan pada node primary |
/*FORCE_SLAVE*/ | Node read-only | Memaksa pernyataan diarahkan ke node read-only pada titik akhir baca/tulis |
/*force_node='<Node ID>'*/ | Node tertentu (satu pernyataan) | Debug atau inspeksi node tertentu |
/*force_proxy_internal*/set force_node = '<Node ID>' | Node tertentu (semua pernyataan berikutnya) | Mengikat sesi ke suatu node — gunakan dengan hati-hati |
/*force_all*/ | Semua node | Kueri tabel sistem di seluruh kluster |
/*FORCE_IMCI_NODES*/ | Node penyimpanan kolom | Memaksa kueri analitis dijalankan pada node Indeks Kolom dalam Memori (IMCI) |
Petunjuk tidak peka huruf besar/kecil dan harus ditempatkan sebelum pernyataan SQL.
Jika Anda menjalankan petunjuk dari client command-line MySQL, gunakan flag-c(atau--comments). Tanpa flag tersebut, client akan menghapus petunjuk sebelum mengirim kueri ke server. Lihat Opsi client MySQL.
Penggunaan
/*FORCE_MASTER*/ — arahkan ke node primary
Tambahkan petunjuk ini sebelum pernyataan SQL apa pun untuk mengirimnya ke node primary, terlepas dari logika perutean default.
/*FORCE_MASTER*/ SELECT * FROM test;Tanpa petunjuk ini, SELECT * FROM test diarahkan ke node read-only. Dengan petunjuk ini, pernyataan tersebut dijalankan pada node primary.
Petunjuk ini tidak berpengaruh pada titik akhir yang diatur ke Read-only—pernyataan tidak dialihkan ke node primary.
/*FORCE_SLAVE*/ — arahkan ke node read-only
Tambahkan petunjuk ini untuk secara eksplisit mengirim pernyataan ke node read-only.
/*FORCE_SLAVE*/ SELECT * FROM orders WHERE status = 'shipped';Jangan menggabungkan petunjuk dengan pernyataan yang mengubah variabel sesi. Misalnya, /*FORCE_SLAVE*/ SET NAMES utf8; dapat menyebabkan error.
/*force_node='<Node ID>'*/ — targetkan node tertentu (satu pernyataan)
Tambahkan petunjuk ini untuk menjalankan satu pernyataan SQL pada node yang Anda tentukan.
/*force_node='pi-bpxxxxxxxx'*/ SHOW PROCESSLIST;Jika node yang ditentukan tidak tersedia, error berikut dikembalikan:
force hint server node is not found, please check./*force_proxy_internal*/set force_node — ikat sesi ke node tertentu
Jalankan pernyataan ini untuk mengarahkan semua pernyataan SQL berikutnya dalam sesi ke node tertentu.
/*force_proxy_internal*/set force_node = 'pi-bpxxxxxxxx';Jika node gagal, error berikut dikembalikan:
set force node 'rr-bpxxxxx' is not found, please check.Hindari penggunaan /*force_proxy_internal*/ kecuali Anda memiliki alasan spesifik untuk mengikat sesi. Hal ini menonaktifkan pemisahan baca/tulis untuk semua pernyataan berikutnya dalam koneksi.
/*force_all*/ — siarkan ke semua node
Tambahkan petunjuk ini untuk menyebarkan pernyataan ke setiap node dalam kluster.
/*force_all*/ SELECT * FROM information_schema.processlist;/*force_all*/ memerlukan PolarProxy versi 2.8.36 atau lebih baru. Untuk memeriksa dan memperbarui versi PolarProxy Anda, lihat Pembaruan versi minor.Hasil yang dikembalikan bergantung pada kueri:
Tabel sistem (
information_schema.processlist,information_schema.innodb_trx,performance_schema.threads,performance_schema.metadata_locks,sys.schema_table_lock_waits): PolarProxy menyebarkan pernyataan ke semua node dan mengembalikan hasil gabungan.Semua tabel dan skenario lainnya: Hanya hasil dari database utama yang dikembalikan.
Tanpa petunjuk ini, SELECT * FROM information_schema.processlist diarahkan ke node acak.
/*FORCE_IMCI_NODES*/ — arahkan ke node penyimpanan kolom
Jika Anda telah mengaktifkan distribusi permintaan otomatis antara node penyimpanan baris dan node penyimpanan kolom, tambahkan petunjuk ini untuk memaksa kueri dijalankan pada node IMCI (Indeks Kolom dalam Memori).
/*FORCE_IMCI_NODES*/ SELECT * FROM large_analytics_table;Untuk detail pengaturan, lihat Distribusi permintaan otomatis di antara node penyimpanan baris dan node penyimpanan kolom.