informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Server MySQL mengimplementasikan beberapa pelacak status sesi. Klien dapat mengaktifkan pelacak ini untuk menerima pemberitahuan perubahan status sesi.
Pelacak status sesi memiliki tujuan berikut:
Mekanisme pelacak menyediakan cara bagi konektor MySQL dan aplikasi klien untuk menentukan apakah konteks sesi tersedia untuk memungkinkan migrasi sesi dari satu server ke server lainnya. (Untuk mengubah sesi dalam lingkungan dengan beban seimbang, penting untuk mendeteksi apakah ada status sesi yang perlu diperhitungkan saat memutuskan apakah peralihan dapat dilakukan.)
Mekanisme pelacak memungkinkan aplikasi mengetahui kapan transaksi dapat dipindahkan dari satu sesi ke sesi lainnya. Pelacakan status transaksi memungkinkan hal ini, yang berguna untuk aplikasi yang ingin memindahkan transaksi dari server yang sibuk ke server yang lebih sedikit muatannya. Misalnya, konektor penyeimbang beban yang mengelola kumpulan koneksi klien dapat memindahkan transaksi antar sesi yang tersedia di kumpulan tersebut.
Namun, peralihan sesi tidak dapat terjadi kapan pun. Jika sesi berada di tengah-tengah transaksi yang telah menyelesaikan baca atau tulis, beralih ke sesi lain berarti transaksi pada sesi asli dibatalkan. Peralihan sesi hanya dapat terjadi ketika tidak ada operasi baca atau tulis yang dilakukan dalam transaksi.
Contoh transaksi yang mungkin berubah secara wajar:
Selain memahami status transaksi, Anda juga dapat memahami karakteristik transaksi sehingga Anda dapat menggunakan karakteristik yang sama ketika transaksi dipindahkan ke sesi berbeda. Ciri-ciri berikut ini terkait dengan hal ini:
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
Untuk mendukung aktivitas pelacakan sesi, notifikasi dapat diberikan untuk jenis informasi status sesi klien berikut:
(1) Perubahan pada properti status sesi klien berikut:
Variabel sistem session_track_state_change mengontrol pelacak ini.
(2) Ubah ke nama skema default. Variabel sistem session_track_schema mengontrol pelacak ini.
(3) Ubah nilai sesi variabel sistem. Variabel sistem session_track_system_variables mengontrol pelacak ini. Izin SENSITIVE_VARIABLES_OBSERVER diperlukan untuk melacak perubahan nilai variabel sistem sensitif.
(4) GTID yang tersedia. Variabel sistem session_track_gtids mengontrol pelacak ini.
(5) Informasi mengenai status dan karakteristik transaksi. Variabel sistem session_track_transaction_info mengontrol pelacak ini.
Variabel sistem ini memungkinkan kontrol atas pemberitahuan perubahan mana yang terjadi, namun tidak menyediakan cara untuk mengakses informasi pemberitahuan. Pemberitahuan terjadi dalam protokol klien/server MySQL, yang mencakup informasi pelacak dalam paket OK untuk mendeteksi perubahan status sesi.
Untuk memungkinkan aplikasi klien mengekstrak informasi perubahan status dari paket OK yang dikembalikan oleh server, MySQL C API menyediakan sepasang fungsi:
Program mysqltest memiliki perintahdisable_session_track_info danenable_sessionutrack_ininfo untuk mengontrol apakah pemberitahuan pelacak sesi terjadi. Anda dapat menggunakan perintah ini untuk melihat notifikasi yang dihasilkan oleh pernyataan SQL dari baris perintah. Misalkan file testscript berisi skrip mysqltest berikut:
- DROP TABLE IF EXISTS test.t1;
- CREATE TABLE test.t1 (i INT, f FLOAT);
- --enable_session_track_info
- SET @@SESSION.session_track_schema=ON;
- SET @@SESSION.session_track_system_variables='*';
- SET @@SESSION.session_track_state_change=ON;
- USE information_schema;
- SET NAMES 'utf8mb4';
- SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- SET TRANSACTION READ WRITE;
- START TRANSACTION;
- SELECT 1;
- INSERT INTO test.t1 () VALUES();
- INSERT INTO test.t1 () VALUES(1, RAND());
- COMMIT;
Jalankan skrip sebagai berikut untuk melihat informasi yang disediakan oleh pelacak yang diaktifkan. .
- $> mysqltest < testscript
- DROP TABLE IF EXISTS test.t1;
- CREATE TABLE test.t1 (i INT, f FLOAT);
- SET @@SESSION.session_track_schema=ON;
- SET @@SESSION.session_track_system_variables='*';
- -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
- -- session_track_system_variables
- -- *
-
- SET @@SESSION.session_track_state_change=ON;
- -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
- -- session_track_state_change
- -- ON
-
- USE information_schema;
- -- Tracker : SESSION_TRACK_SCHEMA
- -- information_schema
-
- -- Tracker : SESSION_TRACK_STATE_CHANGE
- -- 1
-
- SET NAMES 'utf8mb4';
- -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
- -- character_set_client
- -- utf8mb4
- -- character_set_connection
- -- utf8mb4
- -- character_set_results
- -- utf8mb4
-
- -- Tracker : SESSION_TRACK_STATE_CHANGE
- -- 1
-
- SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
- -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
- -- session_track_transaction_info
- -- CHARACTERISTICS
-
- -- Tracker : SESSION_TRACK_STATE_CHANGE
- -- 1
-
- -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- --
-
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- ________
-
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-
- SET TRANSACTION READ WRITE;
- -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE;
-
- START TRANSACTION;
- -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE;
-
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- T_______
-
- SELECT 1;
- 1
- 1
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- T_____S_
-
- INSERT INTO test.t1 () VALUES();
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- T___W_S_
-
- INSERT INTO test.t1 () VALUES(1, RAND());
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- T___WsS_
-
- COMMIT;
- -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- --
-
- -- Tracker : SESSION_TRACK_TRANSACTION_STATE
- -- ________
-
- ok
Sebelum pernyataan START TRANSACTION, jalankan dua pernyataan SET TRANSACTION untuk mengatur tingkat isolasi dan karakteristik mode akses untuk transaksi berikutnya. Nilai SESSION_TRACK_TRANSACTION_CHARACTERISTICS menunjukkan nilai transaksi selanjutnya yang telah ditetapkan.
Setelah pernyataan COMMIT yang mengakhiri transaksi, nilai SESSION_TRACK_transaction_CHARACTERISTICS dilaporkan sebagai kosong. Ini berarti properti transaksi berikutnya yang ditetapkan sebelum transaksi dimulai telah diatur ulang dan default sesi diterapkan. Untuk melacak perubahan pada default sesi ini, lacak nilai sesi variabel sistem Transaction_inisolation dan Transaction_read_only.
Untuk melihat informasi tentang GTID, aktifkan pelacak SESSION_TRACK_GTIDs menggunakan variabel sistem SESSION_TRACK_GTIDs.