Description:
MDL instrumentation is not enabled by default, but when enabled there are not any helpful SyS views. What might be helpful is a session-like view that summarizes either:
a) All locks (as shown below), or;
b) All exclusive locks and pending locks (less verbose)
This requires the following configuration:
performance-schema-instrument='wait/lock/metadata/sql/%=ON'
How to repeat:
mysql> SELECT ps.*, lock_summary.lock_summary FROM sys.processlist ps INNER JOIN (SELECT owner_thread_id, GROUP_CONCAT( DISTINCT CONCAT(mdl.LOCK_STATUS, ' ', mdl.lock_type, ' on ', IF(mdl.object_type='USER LEVEL LOCK', CONCAT(mdl.object_name, ' (user lock)'), CONCAT(mdl.OBJECT_SCHEMA, '.', mdl.OBJECT_NAME))) ORDER BY mdl.object_type ASC, mdl.LOCK_STATUS ASC, mdl.lock_type ASC SEPARATOR '\n' ) as lock_summary FROM performance_schema.metadata_locks mdl GROUP BY owner_thread_id) lock_summary ON (ps.thd_id=lock_summary.owner_thread_id)\G
*************************** 1. row ***************************
thd_id: 10841
conn_id: 10816
user: root@localhost
db: sys
command: Query
state: Sending data
time: 0
current_statement: SELECT ps.*, lock_summary.loc ... =lock_summary.owner_thread_id)
statement_latency: 2.20 ms
progress: NULL
lock_latency: 1.16 ms
rows_examined: 0
rows_sent: 0
rows_affected: 0
tmp_tables: 6
tmp_disk_tables: 2
full_scan: YES
last_statement: NULL
last_statement_latency: NULL
current_memory: 2.94 MiB
last_wait: NULL
last_wait_latency: NULL
source: NULL
trx_latency: 1.08 ms
trx_state: ACTIVE
trx_autocommit: YES
pid: 3585
program_name: mysql
lock_summary: GRANTED SHARED on sys.sys_get_config
GRANTED SHARED on sys.format_bytes
GRANTED SHARED on sys.format_time
GRANTED SHARED on sys.format_statement
GRANTED SHARED_READ on sys.sys_config
GRANTED SHARED_READ on performance_schema.metadata_locks
GRANTED SHARED_READ on performance_schema.session_connect_attrs
GRANTED SHARED_READ on performance_schema.memory_summary_by_thread_by_event_name
GRANTED SHARED_READ on sys.x$memory_by_thread_by_current_bytes
GRANTED SHARED_READ on performance_schema.events_transactions_current
GRANTED SHARED_READ on performance_schema.events_statements_current
GRANTED SHARED_READ on performance_schema.events_stages_current
GRANTED SHARED_READ on performance_schema.events_waits_current
GRANTED SHARED_READ on performance_schema.threads
GRANTED SHARED_READ on sys.processlist
1 row in set (0.06 sec)
Suggested fix:
CREATE VIEW session_metadata_locks as SELECT ps.*, lock_summary.lock_summary FROM sys.processlist ps INNER JOIN (SELECT owner_thread_id, GROUP_CONCAT( DISTINCT CONCAT(mdl.LOCK_STATUS, ' ', mdl.lock_type, ' on ', IF(mdl.object_type='USER LEVEL LOCK', CONCAT(mdl.object_name, ' (user lock)'), CONCAT(mdl.OBJECT_SCHEMA, '.', mdl.OBJECT_NAME))) ORDER BY mdl.object_type ASC, mdl.LOCK_STATUS ASC, mdl.lock_type ASC SEPARATOR '\n' ) as lock_summary FROM performance_schema.metadata_locks mdl GROUP BY owner_thread_id) lock_summary ON (ps.thd_id=lock_summary.owner_thread_id);