Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tampilkan semua kunci saat ini dari get_lock

Dari MySQL 5.7 dan seterusnya, ini dimungkinkan, tetapi harus terlebih dahulu mengaktifkan mdl instrumen di performance_schema.setup_instruments meja. Anda dapat melakukan ini untuk sementara (sampai server dimulai ulang berikutnya) dengan menjalankan:

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

Atau secara permanen, dengan menambahkan mantra berikut ke [mysqld] bagian my.cnf your Anda file (atau file konfigurasi apa pun yang dibaca MySQL dari instalasi Anda):

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

(Secara alami, MySQL perlu di-restart untuk membuat perubahan konfigurasi berlaku jika Anda mengambil pendekatan yang terakhir.)

Kunci yang Anda lepas setelah mdl instrumen telah diaktifkan dapat dilihat dengan menjalankan SELECT terhadap performance_schema.metadata_locks meja. Seperti yang tercantum dalam dokumen, GET_LOCK kunci memiliki OBJECT_TYPE dari 'USER LEVEL LOCK' , sehingga kami dapat memfilter kueri kami ke mereka dengan WHERE klausa:

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> 

Arti kolom dalam hasil ini sebagian besar didokumentasikan secara memadai di https://dev.mysql.com/doc/refman/en/metadata-locks-table.html , tetapi satu hal yang membingungkan perlu diperhatikan:OWNER_THREAD_ID kolom tidak berisi koneksi ID (seperti akan ditampilkan di PROCESSLIST atau dikembalikan oleh CONNECTION_ID() ) dari utas yang menahan kunci. Yang membingungkan, istilah "ID utas" terkadang digunakan sebagai sinonim dari "ID koneksi" dalam dokumentasi MySQL, tetapi ini tidak salah satu dari waktu itu. Jika Anda ingin menentukan koneksi ID koneksi yang mengunci (misalnya, untuk mematikan koneksi tersebut dengan KILL ), Anda harus mencari PROCESSLIST_ID yang sesuai dengan THREAD_ID di performance_schema.threads meja. Misalnya, untuk mematikan koneksi yang menahan kunci saya di atas...

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. Bagaimana cara mendapatkan rekor terbaru di setiap grup menggunakan GROUP BY?

  2. Konversikan tanggal dari yyyy-mm-dd ke dd bulan_nama tahun

  3. Pencarian wildcard di pencarian teks lengkap MySQL

  4. akses mysql di host dari virtualbox tamu

  5. Bagaimana cara mengetahui apakah tabel saya adalah MyISAM atau Innodb