प्रौद्योगिकी साझेदारी

MySQL मध्ये क्लायन्ट् सत्रस्थितेः सर्वर ट्रेसिंग् वर्णनम्

2024-07-12

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

MySQL सर्वरः अनेकाः सत्रस्थितिनिरीक्षकाः कार्यान्विताः भवन्ति । ग्राहकाः एतान् अनुसरणकर्तारः सत्रस्थितिपरिवर्तनस्य सूचनां प्राप्तुं सक्षमं कर्तुं शक्नुवन्ति ।

१ सत्रराज्यनिरीक्षकस्य उद्देश्यम्

सत्रस्थितिनिरीक्षकाः निम्नलिखितप्रयोजनानां सेवां कुर्वन्ति:

  • सत्रप्रवासस्य सुविधायै।
  • लेनदेन-स्विचिंग्-सुविधां करोति ।

ट्रैकर-तन्त्रं MySQL-संयोजकानाम् क्लायन्ट्-अनुप्रयोगानाम् च कृते एकं मार्गं प्रदाति यत् ते निर्धारयितुं शक्नुवन्ति यत् एकस्मात् सर्वरात् अन्यतमं प्रति सत्र-प्रवासस्य अनुमतिं दातुं कोऽपि सत्र-सन्दर्भः उपलब्धः अस्ति वा इति । (भार-सन्तुलित-वातावरणे सत्रं परिवर्तयितुं, स्विच सम्भवः वा इति निर्णये सत्रस्य स्थितिः अस्ति वा इति ज्ञातुं आवश्यकम् ।)

ट्रैकर-तन्त्रेण अनुप्रयोगाः ज्ञातुं शक्नुवन्ति यत् कदा व्यवहाराः एकस्मात् सत्रात् अन्यस्मिन् सत्रे स्थानान्तरयितुं शक्यन्ते । व्यवहारस्थितिनिरीक्षणम् एतत् सक्षमं करोति, यत् तेषां अनुप्रयोगानाम् उपयोगी भवति ये व्यस्तसर्वरतः न्यूनभारितसर्वरपर्यन्तं लेनदेनं स्थानान्तरयितुम् इच्छन्ति । यथा, क्लायन्ट्-सम्बद्धानां पूल्-प्रबन्धनं कुर्वन् भार-सन्तुलन-संयोजकः पूल्-मध्ये उपलब्ध-सत्रयोः मध्ये व्यवहारान् चालयितुं शक्नोति ।

परन्तु सत्रपरिवर्तनं कदापि न भवितुं शक्नोति । यदि सत्रं पठनं लेखनं वा सम्पन्नं कृतस्य व्यवहारस्य मध्ये अस्ति तर्हि भिन्नसत्रे परिवर्तनस्य अर्थः अस्ति यत् मूलसत्रे व्यवहारः पुनः रोल भवति सत्र-स्विच् तदा एव भवितुम् अर्हति यदा व्यवहारस्य अन्तः पठन-लेखन-क्रियाः न कृताः ।

यथोचितरूपेण स्विच् कर्तुं शक्नुवन्ति व्यवहारानां उदाहरणानि : १.

व्यवहारस्य स्थितिं अवगन्तुं अतिरिक्तं व्यवहारस्य लक्षणं अपि अवगन्तुं शक्नुवन्ति येन व्यवहारस्य भिन्नसत्रे स्थानान्तरणसमये समानलक्षणस्य उपयोगं कर्तुं शक्नुवन्ति एतेन निम्नलिखितलक्षणाः सम्बद्धाः सन्ति ।

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

२ उपलब्धाः सत्रस्थितिनिरीक्षकाः

सत्रनिरीक्षणक्रियाकलापानाम् समर्थनार्थं निम्नलिखितप्रकारस्य ग्राहकसत्रस्थितिसूचनायाः सूचनाः प्रदातुं शक्यन्ते:

(1) क्लायन्ट् सत्रस्थितेः एतेषु गुणेषु परिवर्तनम् :

  • पूर्वनिर्धारित योजना (दत्तांशकोशः)।
  • सिस्टम् चरस्य कृते सत्र-विशिष्टानि मूल्यानि ।
  • उपयोक्तृनिर्धारितचराः।
  • अस्थायी रूप।
  • सज्जीकृतं भाषणम् ।

session_track_state_change सिस्टम् चरः एतत् ट्रैकरं नियन्त्रयति ।

(2) पूर्वनिर्धारितस्कीमानाम परिवर्तनं कुर्वन्तु। session_track_schema सिस्टम् चरः एतत् ट्रैकरं नियन्त्रयति ।

(3) सिस्टम् चरस्य सत्रमूल्यं परिवर्तयन्तु । session_track_system_variables सिस्टम् चरः एतत् ट्रैकरं नियन्त्रयति । संवेदनशीलप्रणालीचरानाम् मूल्येषु परिवर्तनं निरीक्षितुं SENSITIVE_VARIABLES_OBSERVER अनुमतिः आवश्यकी अस्ति ।

(4) उपलब्ध जीटीआईडी। session_track_gtids सिस्टम् चरः एतत् ट्रैकरं नियन्त्रयति ।

(5) व्यवहारस्य स्थितिः लक्षणं च विषये सूचना। session_track_transaction_info सिस्टम् चरः एतत् ट्रैकरं नियन्त्रयति ।

एते प्रणालीचराः कस्य परिवर्तनसूचनाः भवन्ति इति नियन्त्रणं अनुमन्यन्ते, परन्तु सूचनासूचनाः प्राप्तुं मार्गं न ददति । सूचना MySQL क्लायन्ट्/सर्वरप्रोटोकॉलस्य अन्तः भवति, यस्मिन् सत्रस्थितौ परिवर्तनं ज्ञातुं OK पैकेट् मध्ये ट्रैकरसूचना समाविष्टा भवति ।

३ C एपिआइ सत्रस्थितिनिरीक्षकसमर्थनम्

सर्वरेण प्रत्यागतानां OK-पैकेट्-तः राज्यपरिवर्तन-सूचनाः निष्कासयितुं क्लायन्ट्-अनुप्रयोगानाम् सक्षमीकरणाय, MySQL C API एकं कार्ययुगलं प्रदाति:

  • mysql_session_track_get_first() सर्वरतः प्राप्तस्य स्थितिपरिवर्तनसूचनायाः प्रथमभागं प्राप्नोति ।
  • mysql_session_track_get_next() सर्वरतः प्राप्तं किमपि अवशिष्टं राज्यपरिवर्तनसूचनं प्राप्नोति । mysql_session_track_get_first() इत्यस्य सफलस्य आह्वानस्य अनन्तरं, यावत् सफलता प्रत्यागच्छति तावत् एतत् कार्यं पुनः पुनः आह्वानं भवति ।

४ परीक्षणसूटसत्रस्थितिनिरीक्षकसमर्थनम्

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_inisolation तथा transaction_read_only प्रणालीचरानाम् सत्रमूल्यानि निरीक्षयन्तु ।

GTIDs विषये सूचनां द्रष्टुं, SESSION_TRACK_GTIDs प्रणालीचरस्य उपयोगेन SESSION_TRACK_GTIDs ट्रैकरं सक्षमं कुर्वन्तु ।