Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

get_lock . से सभी मौजूदा लॉक दिखाएं

MySQL 5.7 के बाद से, यह संभव है, लेकिन पहले mdl . को सक्षम करने की आवश्यकता है performance_schema.setup_instruments में इंस्ट्रूमेंट टेबल। आप इसे अस्थायी रूप से कर सकते हैं (जब तक कि सर्वर फिर से चालू न हो जाए):

UPDATE performance_schema.setup_instruments
SET enabled = 'YES'
WHERE name = 'wait/lock/metadata/sql/mdl';

या स्थायी रूप से, निम्न मंत्र को [mysqld] . में जोड़कर आपके my.cnf . का अनुभाग फ़ाइल (या जो भी कॉन्फिग फाइल MySQL आपके इंस्टालेशन से पढ़ता है):

[mysqld]
performance_schema_instrument = 'wait/lock/metadata/sql/mdl=ON'

(स्वाभाविक रूप से, यदि आप बाद वाला तरीका अपनाते हैं, तो कॉन्फ़िगरेशन परिवर्तन को प्रभावी बनाने के लिए MySQL को पुनरारंभ करने की आवश्यकता होगी।)

आपके द्वारा निकाले गए लॉक बाद mdl उपकरण सक्षम किया गया है SELECT . चलाकर देखा जा सकता है performance_schema.metadata_locks के विरुद्ध टेबल। जैसा कि डॉक्स में बताया गया है, GET_LOCK ताले में एक OBJECT_TYPE होता है 'USER LEVEL LOCK' . का , इसलिए हम अपनी क्वेरी को WHERE . से फ़िल्टर कर सकते हैं खंड:

mysql> SELECT GET_LOCK('foobarbaz', -1);
+---------------------------+
| GET_LOCK('foobarbaz', -1) |
+---------------------------+
|                         1 |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM performance_schema.metadata_locks 
    -> WHERE OBJECT_TYPE='USER LEVEL LOCK'
    -> \G
*************************** 1. row ***************************
          OBJECT_TYPE: USER LEVEL LOCK
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: foobarbaz
OBJECT_INSTANCE_BEGIN: 139872119610944
            LOCK_TYPE: EXCLUSIVE
        LOCK_DURATION: EXPLICIT
          LOCK_STATUS: GRANTED
               SOURCE: item_func.cc:5482
      OWNER_THREAD_ID: 35
       OWNER_EVENT_ID: 3
1 row in set (0.00 sec)

mysql> 

इस परिणाम में कॉलम के अर्थ ज्यादातर पर पर्याप्त रूप से प्रलेखित हैं। https://dev.mysql.com/doc/refman/hi/metadata-locks-table.html , लेकिन एक भ्रम की बात ध्यान देने योग्य है:OWNER_THREAD_ID कॉलम नहीं करता है कनेक्शन को शामिल करें आईडी (जैसे PROCESSLIST में दिखाया जाएगा) या CONNECTION_ID() by द्वारा लौटाया गया ) उस धागे का जो ताला रखता है। भ्रामक रूप से, "थ्रेड आईडी" शब्द को कभी-कभी MySQL दस्तावेज़ में "कनेक्शन आईडी" के पर्याय के रूप में प्रयोग किया जाता है, लेकिन यह नहीं है उन समयों में से एक। यदि आप कनेक्शन का निर्धारण करना चाहते हैं उस कनेक्शन की आईडी जिसमें लॉक है (उदाहरण के लिए, KILL ), आपको PROCESSLIST_ID . देखना होगा जो THREAD_ID . से संबंधित है performance_schema.threads में टेबल। उदाहरण के लिए, मेरे लॉक को ऊपर रखने वाले कनेक्शन को खत्म करने के लिए...

mysql> SELECT OWNER_THREAD_ID FROM performance_schema.metadata_locks
    -> WHERE OBJECT_TYPE='USER LEVEL LOCK'
    -> AND OBJECT_NAME='foobarbaz';
+-----------------+
| OWNER_THREAD_ID |
+-----------------+
|              35 |
+-----------------+
1 row in set (0.00 sec)

mysql> SELECT PROCESSLIST_ID FROM performance_schema.threads
    -> WHERE THREAD_ID=35;
+----------------+
| PROCESSLIST_ID |
+----------------+
|             10 |
+----------------+
1 row in set (0.00 sec)

mysql> KILL 10;
Query OK, 0 rows affected (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में टेबल_ए से डिलीट और टेबल टेबल_ए को छोटा करने में क्या अंतर है?

  2. सबडेट () उदाहरण – MySQL

  3. MySQL में स्थिति निष्पादन का क्रम

  4. MySql और अंतिम आईडी डालने की समस्या बनी हुई है

  5. mysqli::query ():mysqli नहीं ला सका