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/en/metadata-locks-table.html , но си струва да се отбележи един момент на объркване:OWNER_THREAD_ID колона не съдържа връзката Идентификатор (като да се показва в PROCESSLIST или върнати от CONNECTION_ID() ) на конеца, който държи ключалката. Объркващо е, че терминът "идентификатор на нишка" понякога се използва като синоним на "идентификатор на връзката" в документацията на 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. Как да избера фиксиран брой редове за всяка група?

  2. Как да възстановя от команда за отпадане на база данни с помощта на двоичен дневник на mysql?

  3. Изберете данни от показване на таблици MySQL заявка

  4. Максимален брой едновременни връзки към MySQL

  5. PHP PDO как да стартирате заявка за множество заявки?