Extending the SYS schema to show metadata locks

191 篇文章 86 订阅 ¥9.90 ¥99.00

http://mysqlserverteam.com/extending-the-sys-schema-to-show-metadata-locks/

Starting with MySQL 5.7, performance_schema has been enhanced to instrument metadata locks , and can be turned on by adding the following line to your my.cnf file:

performance-schema-instrument='wait/lock/metadata/sql/%=ON'

(At runtime, it can also be enabled by modifying the setup_instruments table in performance_schema.)

From here, you can now query performance_schema.metadata_locks to reveal all currently open metadata locks on your server:

mysql> select * fromperformance_schema.metadata_locks\G
*************************** 1. row ***************************
          OBJECT_TYPE: TABLE
        OBJECT_SCHEMA: wordpress_tockerca
          OBJECT_NAME: wp_posts
OBJECT_INSTANCE_BEGIN: 139671129331184
            LOCK_TYPE: SHARED_READ
        LOCK_DURATION: TRANSACTION
          LOCK_STATUS: GRANTED
              SOURCE: sql_parse.cc:5920
      OWNER_THREAD_ID: 1817
      OWNER_EVENT_ID: 25
*************************** 2. row ***************************
          OBJECT_TYPE: USERLEVELLOCK
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: abcd
OBJECT_INSTANCE_BEGIN: 139671129776448
            LOCK_TYPE: EXCLUSIVE
        LOCK_DURATION: EXPLICIT
          LOCK_STATUS: GRANTED
              SOURCE: item_func.cc:5636
      OWNER_THREAD_ID: 1817
      OWNER_EVENT_ID: 26
*************************** 3. row ***************************
          OBJECT_TYPE: TABLE
        OBJECT_SCHEMA: performance_schema
          OBJECT_NAME: metadata_locks
OBJECT_INSTANCE_BEGIN: 139672612788784
            LOCK_TYPE: SHARED_READ
        LOCK_DURATION: TRANSACTION
          LOCK_STATUS: GRANTED
              SOURCE: sql_parse.cc:5920
      OWNER_THREAD_ID: 1128
      OWNER_EVENT_ID: 22
3 rowsin set (0.00 sec)

Using SYS

As I have previously demonstrated , SYS is the DBA’s companion toperformance_schema and contains a number of views that are more task-oriented . Seeing the raw locks is not always immediately useful, what is preferable is a view that shows this next to user sessions.

SYS has a view called session , but in this example I am going to join metadata locks to sys.processlist instead. Processlist is a superset of session, that also includes background threads.

mysql> SELECTps.*,  lock_summary.lock_summary  FROMsys.processlistps  INNERJOIN (SELECTowner_thread_id,  GROUP_CONCAT(  DISTINCTCONCAT(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)))  ORDERBYmdl.object_typeASC, mdl.LOCK_STATUSASC, mdl.lock_typeASC  SEPARATOR '\n'  ) as lock_summaryFROMperformance_schema.metadata_locksmdlGROUPBYowner_thread_id) lock_summaryON (ps.thd_id=lock_summary.owner_thread_id)\G
*************************** 1. row ***************************
                thd_id: 1817
              conn_id: 1793
                  user: root@localhost
                    db: wordpress_tockerca
              command: Sleep
                state: NULL
                  time: 317
    current_statement: NULL
    statement_latency: NULL
              progress: NULL
          lock_latency: 0 ps
        rows_examined: 0
            rows_sent: 1
        rows_affected: 0
            tmp_tables: 0
      tmp_disk_tables: 0
            full_scan: NO
        last_statement: selectget_lock('abcd', 10)
last_statement_latency: 315.92 us
        current_memory: 259.14 KiB
            last_wait: NULL
    last_wait_latency: NULL
                source: NULL
          trx_latency: 6.00 m
            trx_state: ACTIVE
        trx_autocommit: NO
                  pid: 21518
          program_name: mysql
          lock_summary: GRANTEDSHARED_READonwordpress_tockerca.wp_posts
GRANTEDEXCLUSIVEonabcd (userlock)
*************************** 2. row ***************************
                thd_id: 1128
              conn_id: 1104
                  user: root@localhost
                    db: NULL
              command: Query
                state: Sendingdata
                  time: 0
    current_statement: SELECTps.*,  lock_summary.loc ... =lock_summary.owner_thread_id)
    statement_latency: 11.04 ms
              progress: NULL
          lock_latency: 4.08 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.97 MiB
            last_wait: NULL
    last_wait_latency: NULL
                source: NULL
          trx_latency: 70.00 ms
            trx_state: ACTIVE
        trx_autocommit: YES
                  pid: 21498
          program_name: mysql
          lock_summary: GRANTEDSHAREDonsys.format_statement
GRANTEDSHAREDonsys.format_time
GRANTEDSHAREDonsys.format_bytes
GRANTEDSHAREDonsys.sys_get_config
GRANTEDSHARED_READonsys.processlist
GRANTEDSHARED_READonperformance_schema.threads
GRANTEDSHARED_READonperformance_schema.events_waits_current
GRANTEDSHARED_READonperformance_schema.events_stages_current
GRANTEDSHARED_READonperformance_schema.events_statements_current
GRANTEDSHARED_READonperformance_schema.events_transactions_current
GRANTEDSHARED_READonsys.x$memory_by_thread_by_current_bytes
GRANTEDSHARED_READonperformance_schema.session_connect_attrs
GRANTEDSHARED_READonperformance_schema.metadata_locks
GRANTEDSHARED_READonsys.sys_config
GRANTEDSHARED_READonperformance_schema.memory_summary_by_thread_by_event_name
2 rowsin set (0.09 sec)

On my testing system I have saved this query as a view calledsys.session_metadata_locks . I have also opened BUG #80823 so that the sys developers can evaluate if this should be included as part of a future release.

It is always interesting to hear from DBAs on what information they find useful to be included in views. Please try it out, and let me know your feedback


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值