MySQL使用元数据锁管理并发访问数据库对象和确保数据一致性;看到元数据锁定。元数据锁不仅适用于表,而且模式、存储程序(过程、函数、触发器、预定事件),表空间、用户与获得的锁GET_LOCK ()
函数(见锁定功能),锁了锁服务描述锁定服务。
性能模式暴露通过元数据锁信息metadata_locks
表:
锁已经授予(显示会话的当前元数据锁)。
锁已经要求但尚未授予(显示哪些会议是等待哪些元数据锁)。
锁请求已经被死锁检测器。
锁请求超时,正在等待请求会话锁的请求被丢弃。
这些信息使您能够理解元数据锁会话之间的依赖关系。你不仅可以看到等待锁定一个会话,但会话目前持有锁。
的metadata_locks
表是只读的,无法更新。它在默认情况下是autosized;配置表的大小,设置performance_schema_max_metadata_locks
在服务器启动系统变量。
仪器使用元数据锁等待/锁定/ / sql / mdl元数据
乐器,这是默认启用。
控制元数据锁在服务器启动时,仪表状态在你使用这样的线my.cnf
文件:
启用:
(mysqld) performance-schema-instrument = '等待/锁定/元数据/ sql / mdl = '
禁用:
(mysqld) performance-schema-instrument = '等待/锁定/元数据/ sql / mdl =了'
控制在运行时元数据锁仪器状态,更新setup_instruments
表:
启用:
更新performance_schema。setup_instrumentsSET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
禁用:
更新performance_schema。setup_instrumentsSET ENABLED = 'NO', TIMED = 'NO' WHERE NAME = 'wait/lock/metadata/sql/mdl';
性能模式维护metadata_locks
表内容如下,使用LOCK_STATUS
列显示每个锁的状态:
当一个元数据锁请求,并立即获得,一行的状态
授予
被插入。当一个元数据锁请求,而不是立即获得,一行的状态
等待
被插入。当请求元数据锁之前,它的行状态更新
授予
。当一个元数据锁被释放时,它的行被删除。
当等待锁请求取消死锁检测器来打破僵局(
ER_LOCK_DEADLOCK
),它的行状态更新等待
来受害者
。当等待锁请求超时(
ER_LOCK_WAIT_TIMEOUT
),它的行状态更新等待
来超时
。当授予锁或等待锁请求死亡,其行状态更新
授予
或等待
来杀了
。的
受害者
,超时
,杀了
状态值是短暂和表明锁行即将被删除。的
PRE_ACQUIRE_NOTIFY
和POST_RELEASE_NOTIFY
状态值是短暂和表示元数据锁定subsubsystem通知感兴趣的存储引擎,而进入锁获取操作或离开锁释放操作。
的metadata_locks
表有这些列:
OBJECT_TYPE
锁的类型中使用元数据锁子系统。是价值
全球
,模式
,表
,函数
,过程
,触发
(目前未使用),事件
,提交
,用户级锁
,表空间
,或锁定服务
。的值
用户级锁
显示一个锁了GET_LOCK ()
。的值锁定服务
显示一个锁获得的锁定服务描述锁定服务。OBJECT_SCHEMA
模式包含对象。
OBJECT_NAME
检测对象的名称。
OBJECT_INSTANCE_BEGIN
检测对象的内存地址。
LOCK_TYPE
元数据锁的锁类型子系统。是价值
INTENTION_EXCLUSIVE
,共享
,SHARED_HIGH_PRIO
,SHARED_READ
,SHARED_WRITE
,SHARED_UPGRADABLE
,SHARED_NO_WRITE
,SHARED_NO_READ_WRITE
,或独家
。LOCK_DURATION
锁的持续时间从元数据锁子系统。是价值
声明
,事务
,或显式的
。的声明
和事务
值表示锁隐式声明或事务结束时发布。的显式的
值意味着锁生存发布的声明或事务,明确的行动,比如全球锁了刷新表读锁
。LOCK_STATUS
锁锁子系统状态的元数据。是价值
等待
,授予
,受害者
,超时
,杀了
,PRE_ACQUIRE_NOTIFY
,或POST_RELEASE_NOTIFY
。性能模式如前所述指定这些值。源
源文件的名称包含的代码产生的事件和文件中的行号的仪器。这使您能够检查源确定什么代码。
OWNER_THREAD_ID
线程请求元数据锁。
OWNER_EVENT_ID
事件请求元数据锁。
的metadata_locks
这些索引表有:
主键(
OBJECT_INSTANCE_BEGIN
)指数(
OBJECT_TYPE
,OBJECT_SCHEMA
,OBJECT_NAME
)指数(
OWNER_THREAD_ID
,OWNER_EVENT_ID
)
截断表
是不允许的吗metadata_locks
表。