Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiển thị tất cả các khóa hiện tại từ get_lock

Từ MySQL 5.7 trở đi, điều này có thể thực hiện được, nhưng trước tiên yêu cầu bật mdl trong performance_schema.setup_instruments bàn. Bạn có thể thực hiện việc này tạm thời (cho đến khi máy chủ được khởi động lại lần sau) bằng cách chạy:

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

Hoặc vĩnh viễn, bằng cách thêm câu chú sau vào [mysqld] phần my.cnf của bạn tệp (hoặc bất kỳ tệp cấu hình nào mà MySQL đọc từ khi cài đặt của bạn):

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

(Đương nhiên, MySQL sẽ cần được khởi động lại để thay đổi cấu hình có hiệu lực nếu bạn thực hiện phương pháp sau.)

Các khóa bạn lấy ra sau mdl Có thể thấy công cụ đã được kích hoạt bằng cách chạy SELECT chống lại performance_schema.metadata_locks bàn. Như đã lưu ý trong tài liệu, GET_LOCK ổ khóa có OBJECT_TYPE trong số 'USER LEVEL LOCK' , do đó, chúng tôi có thể lọc truy vấn của mình xuống chúng bằng WHERE mệnh đề:

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> 

Ý nghĩa của các cột trong kết quả này hầu hết được ghi lại đầy đủ tại https://dev.mysql.com/doc/refman/en/metadata-locks-table.html , nhưng có một điểm nhầm lẫn đáng lưu ý:OWNER_THREAD_ID cột không không chứa kết nối ID (giống như được hiển thị trong PROCESSLIST hoặc được trả lại bởi CONNECTION_ID() ) của sợi giữ khóa. Thật khó hiểu, thuật ngữ "ID luồng" đôi khi được sử dụng như một từ đồng nghĩa của "ID kết nối" trong tài liệu MySQL, nhưng điều này không phải một trong những thời điểm đó. Nếu bạn muốn xác định kết nối ID của kết nối giữ khóa (ví dụ:để loại bỏ kết nối đó bằng KILL ), bạn sẽ cần tra cứu PROCESSLIST_ID tương ứng với THREAD_ID trong performance_schema.threads bàn. Ví dụ:để loại bỏ kết nối đang giữ khóa của tôi ở trên ...

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. Mẹo nhanh về MySQL:Sử dụng hàm LENGTH và TRIM

  2. Cách hiển thị số tuần tự trong kết quả truy vấn MySQL

  3. MySQL LOAD_FILE () tải các giá trị rỗng

  4. mật khẩu gốc mysql quên

  5. Trường ORDER BY ENUM trong MYSQL