Κοινή χρήση τεχνολογίας

Περιγραφή ανίχνευσης διακομιστή της κατάστασης περιόδου λειτουργίας πελάτη στη MySQL

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Ο διακομιστής MySQL υλοποιεί αρκετούς ανιχνευτές κατάστασης συνεδρίας. Οι πελάτες μπορούν να επιτρέψουν σε αυτούς τους ιχνηλάτες να λαμβάνουν ειδοποιήσεις για αλλαγές κατάστασης περιόδου λειτουργίας.

1 Σκοπός του Session State Tracker

Οι ανιχνευτές κατάστασης περιόδου λειτουργίας εξυπηρετούν τους ακόλουθους σκοπούς:

  • για τη διευκόλυνση της μετεγκατάστασης συνεδριών.
  • Διευκολύνει την εναλλαγή συναλλαγών.

Ο μηχανισμός παρακολούθησης παρέχει έναν τρόπο για τις συνδέσεις MySQL και τις εφαρμογές-πελάτες να προσδιορίζουν εάν είναι διαθέσιμο οποιοδήποτε πλαίσιο συνεδρίας για να επιτρέπεται η μετεγκατάσταση περιόδου λειτουργίας από έναν διακομιστή σε άλλο. (Για να αλλάξετε τις περιόδους σύνδεσης σε ένα περιβάλλον εξισορρόπησης φορτίου, είναι απαραίτητο να ανιχνεύσετε εάν υπάρχει κατάσταση περιόδου λειτουργίας που πρέπει να λαμβάνεται υπόψη όταν αποφασίζεται εάν είναι δυνατή η αλλαγή.)

Ο μηχανισμός παρακολούθησης επιτρέπει στις εφαρμογές να γνωρίζουν πότε οι συναλλαγές μπορούν να μετακινηθούν από τη μια συνεδρία στην άλλη. Η παρακολούθηση κατάστασης συναλλαγής το επιτρέπει, το οποίο είναι χρήσιμο για εφαρμογές που θέλουν να μετακινήσουν τις συναλλαγές από έναν απασχολημένο διακομιστή σε έναν λιγότερο φορτωμένο διακομιστή. Για παράδειγμα, μια σύνδεση εξισορρόπησης φορτίου που διαχειρίζεται μια ομάδα συνδέσεων πελάτη μπορεί να μετακινεί συναλλαγές μεταξύ των διαθέσιμων περιόδων σύνδεσης στο χώρο συγκέντρωσης.

Ωστόσο, η εναλλαγή συνεδρίας δεν μπορεί να συμβεί ανά πάσα στιγμή. Εάν η περίοδος σύνδεσης βρίσκεται στη μέση μιας συναλλαγής που έχει ολοκληρώσει μια ανάγνωση ή εγγραφή, η μετάβαση σε διαφορετική περίοδο λειτουργίας σημαίνει ότι η συναλλαγή στην αρχική περίοδο λειτουργίας επαναφέρεται. Ο διακόπτης περιόδου λειτουργίας μπορεί να συμβεί μόνο όταν δεν έχουν πραγματοποιηθεί λειτουργίες ανάγνωσης ή εγγραφής στη συναλλαγή.

Παραδείγματα συναλλαγών που ενδέχεται να αλλάξουν εύλογα:

Εκτός από την κατανόηση της κατάστασης συναλλαγής, μπορείτε επίσης να κατανοήσετε τα χαρακτηριστικά της συναλλαγής, ώστε να μπορείτε να χρησιμοποιείτε τα ίδια χαρακτηριστικά όταν η συναλλαγή μετακινείται σε διαφορετική περίοδο λειτουργίας. Τα ακόλουθα χαρακτηριστικά συνδέονται με αυτό:

  1. READ ONLY
  2. READ WRITE
  3. ISOLATION LEVEL
  4. WITH CONSISTENT SNAPSHOT

2 Διαθέσιμα προγράμματα παρακολούθησης κατάστασης περιόδου λειτουργίας

Για την υποστήριξη δραστηριοτήτων παρακολούθησης περιόδου σύνδεσης, μπορούν να παρέχονται ειδοποιήσεις για τους ακόλουθους τύπους πληροφοριών κατάστασης περιόδου σύνδεσης πελάτη:

(1) Αλλαγές σε αυτές τις ιδιότητες της κατάστασης περιόδου λειτουργίας πελάτη:

  • Προεπιλεγμένο σχήμα (βάση δεδομένων).
  • Τιμές για συγκεκριμένες περιόδους λειτουργίας για μεταβλητές συστήματος.
  • Μεταβλητές που καθορίζονται από το χρήστη.
  • Προσωρινή μορφή.
  • Έτοιμη ομιλία.

Η μεταβλητή συστήματος session_track_state_change ελέγχει αυτόν τον ιχνηλάτη.

(2) Αλλαγή στο προεπιλεγμένο όνομα σχήματος. Η μεταβλητή συστήματος session_track_schema ελέγχει αυτήν την εφαρμογή παρακολούθησης.

(3) Αλλάξτε την τιμή περιόδου λειτουργίας της μεταβλητής συστήματος. Η μεταβλητή συστήματος session_track_system_variables ελέγχει αυτήν την εφαρμογή παρακολούθησης. Το δικαίωμα SENSITIVE_VARIABLES_OBSERVER απαιτείται για την παρακολούθηση αλλαγών στις τιμές των ευαίσθητων μεταβλητών του συστήματος.

(4) Διαθέσιμο GTID. Η μεταβλητή συστήματος session_track_gtids ελέγχει αυτό το πρόγραμμα παρακολούθησης.

(5) Πληροφορίες σχετικά με την κατάσταση και τα χαρακτηριστικά της συναλλαγής. Η μεταβλητή συστήματος session_track_transaction_info ελέγχει αυτήν την εφαρμογή παρακολούθησης.

Αυτές οι μεταβλητές συστήματος επιτρέπουν τον έλεγχο των ειδοποιήσεων αλλαγής, αλλά δεν παρέχουν τρόπο πρόσβασης στις πληροφορίες ειδοποιήσεων. Η ειδοποίηση λαμβάνει χώρα εντός του πρωτοκόλλου πελάτη/διακομιστή MySQL, το οποίο περιλαμβάνει πληροφορίες παρακολούθησης σε πακέτα ΟΚ, προκειμένου να ανιχνευθούν αλλαγές στην κατάσταση περιόδου λειτουργίας.

Υποστήριξη παρακολούθησης κατάστασης περιόδου λειτουργίας 3 C API

Για να επιτραπεί στις εφαρμογές-πελάτες να εξάγουν πληροφορίες αλλαγής κατάστασης από πακέτα OK που επιστρέφονται από τον διακομιστή, το MySQL C API παρέχει ένα ζεύγος συναρτήσεων:

  • Η mysql_session_track_get_first() λαμβάνει το πρώτο μέρος των πληροφοριών αλλαγής κατάστασης που λαμβάνονται από τον διακομιστή.
  • Η mysql_session_track_get_next() λαμβάνει τυχόν υπολειπόμενες πληροφορίες αλλαγής κατάστασης που λαμβάνονται από τον διακομιστή. Μετά από μια επιτυχημένη κλήση στη mysql_session_track_get_first(), αυτή η συνάρτηση καλείται επανειλημμένα, εφόσον επιστραφεί η επιτυχία.

Υποστήριξη παρακολούθησης κατάστασης 4 δοκιμαστικής σουίτας

Το πρόγραμμα mysqltest έχει τις εντολές disable_session_track_info και enable_sessionutrack_ininfo για να ελέγξει εάν θα προκύψουν ειδοποιήσεις παρακολούθησης περιόδου λειτουργίας. Μπορείτε να χρησιμοποιήσετε αυτές τις εντολές για να προβάλετε ειδοποιήσεις που παράγονται από δηλώσεις SQL από τη γραμμή εντολών. Ας υποθέσουμε ότι ένα αρχείο testscript περιέχει το ακόλουθο σενάριο mysqltest:

  1. DROP TABLE IF EXISTS test.t1;
  2. CREATE TABLE test.t1 (i INT, f FLOAT);
  3. --enable_session_track_info
  4. SET @@SESSION.session_track_schema=ON;
  5. SET @@SESSION.session_track_system_variables='*';
  6. SET @@SESSION.session_track_state_change=ON;
  7. USE information_schema;
  8. SET NAMES 'utf8mb4';
  9. SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
  10. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  11. SET TRANSACTION READ WRITE;
  12. START TRANSACTION;
  13. SELECT 1;
  14. INSERT INTO test.t1 () VALUES();
  15. INSERT INTO test.t1 () VALUES(1, RAND());
  16. COMMIT;

Εκτελέστε το σενάριο ως εξής για να δείτε τις πληροφορίες που παρέχονται από ενεργοποιημένα προγράμματα παρακολούθησης. .

  1. $> mysqltest < testscript
  2. DROP TABLE IF EXISTS test.t1;
  3. CREATE TABLE test.t1 (i INT, f FLOAT);
  4. SET @@SESSION.session_track_schema=ON;
  5. SET @@SESSION.session_track_system_variables='*';
  6. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  7. -- session_track_system_variables
  8. -- *
  9. SET @@SESSION.session_track_state_change=ON;
  10. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  11. -- session_track_state_change
  12. -- ON
  13. USE information_schema;
  14. -- Tracker : SESSION_TRACK_SCHEMA
  15. -- information_schema
  16. -- Tracker : SESSION_TRACK_STATE_CHANGE
  17. -- 1
  18. SET NAMES 'utf8mb4';
  19. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  20. -- character_set_client
  21. -- utf8mb4
  22. -- character_set_connection
  23. -- utf8mb4
  24. -- character_set_results
  25. -- utf8mb4
  26. -- Tracker : SESSION_TRACK_STATE_CHANGE
  27. -- 1
  28. SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
  29. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  30. -- session_track_transaction_info
  31. -- CHARACTERISTICS
  32. -- Tracker : SESSION_TRACK_STATE_CHANGE
  33. -- 1
  34. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  35. --
  36. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  37. -- ________
  38. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  39. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  40. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  41. SET TRANSACTION READ WRITE;
  42. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  43. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE;
  44. START TRANSACTION;
  45. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  46. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE;
  47. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  48. -- T_______
  49. SELECT 1;
  50. 1
  51. 1
  52. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  53. -- T_____S_
  54. INSERT INTO test.t1 () VALUES();
  55. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  56. -- T___W_S_
  57. INSERT INTO test.t1 () VALUES(1, RAND());
  58. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  59. -- T___WsS_
  60. COMMIT;
  61. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  62. --
  63. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  64. -- ________
  65. ok

Πριν από τη δήλωση START TRANSACTION, εκτελέστε δύο προτάσεις SET TRANSACTION για να ορίσετε το επίπεδο απομόνωσης και τα χαρακτηριστικά λειτουργίας πρόσβασης για την επόμενη συναλλαγή. Η τιμή SESSION_TRACK_TRANSACTION_CHARACTERISTICS υποδεικνύει την επόμενη τιμή συναλλαγής που έχει οριστεί.

Μετά από μια δήλωση COMMIT που τερματίζει μια συναλλαγή, η τιμή SESSION_TRACK_transaction_CHARACTERISTICS αναφέρεται ως κενή. Αυτό σημαίνει ότι οι επόμενες ιδιότητες συναλλαγής που ορίστηκαν πριν από την έναρξη της συναλλαγής έχουν επαναφερθεί και εφαρμόζονται οι προεπιλογές της περιόδου λειτουργίας. Για να παρακολουθήσετε αλλαγές σε αυτές τις προεπιλογές περιόδου λειτουργίας, παρακολουθήστε τις τιμές περιόδου λειτουργίας των μεταβλητών συστήματοςtransaction_insolation καιtransaction_read_only.

Για να προβάλετε πληροφορίες σχετικά με τα GTID, ενεργοποιήστε το πρόγραμμα παρακολούθησης SESSION_TRACK_GTIDs χρησιμοποιώντας τη μεταβλητή συστήματος SESSION_TRACK_GTIDs.