Teknologian jakaminen

Palvelimen seurantakuvaus asiakkaan istunnon tilasta MySQL:ssä

2024-07-12

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

MySQL-palvelin toteuttaa useita istunnon tilan seurantalaitteita. Asiakkaat voivat ottaa nämä seurantalaitteet vastaan ​​ilmoituksia istunnon tilan muutoksista.

1 Istuntotilan seurannan tarkoitus

Istuntotilan seurantalaitteet palvelevat seuraavia tarkoituksia:

  • istunnon siirron helpottamiseksi.
  • Helpottaa tapahtumien vaihtamista.

Seurantamekanismi tarjoaa MySQL-liittimille ja asiakassovelluksille tavan määrittää, onko istuntokontekstia käytettävissä istunnon siirron mahdollistamiseksi palvelimelta toiselle. (Jotta haluat vaihtaa istuntoja kuormitettuun ympäristöön, on tarpeen havaita, onko istunnon tilaa, joka on otettava huomioon päätettäessä, onko vaihto mahdollista.)

Seurantamekanismin avulla sovellukset voivat tietää, milloin tapahtumat voidaan siirtää istunnosta toiseen. Tapahtuman tilan seuranta mahdollistaa tämän, mikä on hyödyllistä sovelluksille, jotka haluavat siirtää tapahtumat varatulta palvelimelta vähemmän kuormitetulle palvelimelle. Esimerkiksi kuormantasausliitin, joka hallitsee asiakasyhteyksien poolia, voi siirtää tapahtumia poolissa olevien istuntojen välillä.

Istunnon vaihto ei kuitenkaan voi tapahtua milloin tahansa. Jos istunto on kesken luku- tai kirjoitustapahtuman, siirtyminen toiseen istuntoon tarkoittaa, että alkuperäisen istunnon tapahtuma peruutetaan. Istunnon vaihto voi tapahtua vain, kun tapahtumassa ei ole suoritettu luku- tai kirjoitustoimintoja.

Esimerkkejä tapahtumista, jotka voivat järkevästi vaihtaa:

Tapahtuman tilan ymmärtämisen lisäksi voit myös ymmärtää tapahtuman ominaisuuksia, jotta voit käyttää samoja ominaisuuksia, kun tapahtuma siirretään eri istuntoon. Seuraavat ominaisuudet liittyvät tähän:

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

2 Käytettävissä olevat istunnon tilan seurantalaitteet

Istunnonseurantatoimintojen tukemiseksi voidaan tarjota ilmoituksia seuraavan tyyppisistä asiakasistunnon tilatiedoista:

(1) Muutokset näihin asiakasistunnon tilan ominaisuuksiin:

  • Oletusskeema (tietokanta).
  • Istuntokohtaiset arvot järjestelmämuuttujille.
  • Käyttäjän määrittämät muuttujat.
  • Väliaikainen muoto.
  • Valmisteltu puhe.

Järjestelmämuuttuja session_track_state_change ohjaa tätä seurantaa.

(2) Vaihda oletusskeeman nimeen. Järjestelmämuuttuja session_track_schema ohjaa tätä seurantaa.

(3) Muuta järjestelmämuuttujan istuntoarvoa. Järjestelmämuuttuja session_track_system_variables ohjaa tätä seurantaa. SENSITIVE_VARIABLES_OBSERVER-käyttöoikeus tarvitaan arkaluonteisten järjestelmämuuttujien arvojen muutosten seuraamiseen.

(4) Saatavilla oleva GTID. Järjestelmämuuttuja session_track_gtids ohjaa tätä seurantaa.

(5) Tiedot tapahtuman tilasta ja ominaisuuksista. Järjestelmämuuttuja session_track_transaction_info ohjaa tätä seurantaa.

Näiden järjestelmämuuttujien avulla voidaan hallita, mitkä muutosilmoitukset tapahtuvat, mutta ne eivät tarjoa tapaa päästä ilmoitustietoihin. Ilmoitus tapahtuu MySQL-asiakas/palvelin-protokollassa, joka sisältää seurantatiedot OK-paketeissa istunnon tilan muutosten havaitsemiseksi.

3 C API istunnon tilan seurantatuki

MySQL C API tarjoaa pari toimintoa, jotta asiakassovellukset voivat poimia tilanmuutostietoja palvelimen palauttamista OK-paketeista:

  • mysql_session_track_get_first() saa ensimmäisen osan palvelimelta vastaanotetuista tilanmuutostiedoista.
  • mysql_session_track_get_next() saa kaikki palvelimelta saadut jäljellä olevat tilanmuutostiedot. Onnistuneen mysql_session_track_get_first()-kutsun jälkeen tätä funktiota kutsutaan toistuvasti niin kauan kuin onnistuminen palautetaan.

4 testiohjelmiston istunnon tilan seurantatuki

mysqltest-ohjelmassa on disable_session_track_info- ja enable_sessionutrack_ininfo-komennot, jotka ohjaavat istunnonseurannan ilmoituksia. Voit käyttää näitä komentoja nähdäksesi SQL-käskyjen tuottamat ilmoitukset komentoriviltä. Oletetaan, että tiedosto testiskripti sisältää seuraavan mysqltest-komentosarjan:

  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;

Suorita komentosarja seuraavasti nähdäksesi käytössä olevien seurantaohjelmien tiedot. .

  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

Suorita ennen START TRANSACTION -käskyä kaksi SET TRANSACTION -käskyä asettaaksesi eristystason ja pääsytilan ominaisuudet seuraavalle tapahtumalle. SESSION_TRACK_TRANSACTION_CHARACTERISTICS-arvo ilmaisee seuraavan asetetun tapahtumaarvon.

Tapahtuman päättävän COMMIT-käskyn jälkeen SESSION_TRACK_transaction_CHARACTERISTICS-arvo raportoidaan tyhjäksi. Tämä tarkoittaa, että seuraavat tapahtuman ominaisuudet, jotka oli asetettu ennen tapahtuman alkamista, on nollattu ja istunnon oletusarvoja sovelletaan. Seuraa näiden istunnon oletusarvojen muutoksia seuraamalla transaktion_inisolation- ja transaktion_read_only-järjestelmämuuttujien istuntoarvoja.

Jos haluat tarkastella tietoja GTID-tunnisteista, ota SESSION_TRACK_GTIDs-seuranta käyttöön järjestelmämuuttujan SESSION_TRACK_GTIDs avulla.