的层面看看如何定位MDL的相关问题,再进行数据

2019-08-01 作者:数据库   |   浏览(60)

之前只用phpmyadmin登录本地的mysql,管理另一个远程数据库的时候发现,单纯用命令行处理字符串、换行符实在是不好使,所以配置了远程登录mysql,很简单的问题结果没有搜到合适的方法,所以记录下我的配置方式。

set rowcount 20000
delete from UFSystem..ua_log
set rowcount 0

在上篇文章《MySQL表结构变更,不可不知的Metadata Lock》中,我们介绍了MDL引入的背景,及基本概念,从“道”的层面知道了什么是MDL。下面就从“术”的层面看看如何定位MDL的相关问题。

 

phpmyadmin/libraries/config.default.php

truncate table ua_log_bak20111201

在MySQL 5.7中,针对MDL,引入了一张新表performance_schema.metadata_locks,该表可对外展示MDL的相关信息,包括其作用对象,类型及持有等待情况。

 

$cfg['Servers'][$i]['host'] = 'localhost'; //localhost改为目标地址

truncate table ua_log

 

死锁概述

只修改该文件并不能达到目的,网上某教程只修改了这个文件。从另一个地方找的资料,还需要修改以下:

数据库 属性  选项 模型 改成 简单 然后确定
再进行数据库收缩

开启MDL的instrument

对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象。
当然,在任何一种数据库中,这种僵持的情况不会一直持续下去,因为一直持续下去双方永远都无法执行,没有任何意义,
在SQL Server中,后台线程会以3秒钟一次的频率检测死锁Session,并且选择其中一个回滚代价相对较低的作为牺牲品,从而使解除不同Session相互僵持的现象。
因此SQL Server中死锁的僵持时间不会超过3秒钟。

phpmyadmin/config.inc.php

但是相关instrument并没有开启(MySQL 8.0是默认开启的),其可通过如下两种方式开启,

通常情况下,最简单也是最常见的死锁是发生在不同表级别的,
Session 1 第一步修改A表,第二步修改B表,
Session 2第一步修改B表,第二步修改A表,
当发生Session 1与Session 2推进顺序发生交叉的时候,死锁就发生了,这种结局办法也比较简单,以相同的推进顺序进行操作即可解除死锁。

$cfg['Servers'][$i]['host'] = 'localhost'; //localhost改为目标ip地址;

临时生效

以下演示一种不用于以上情况,稍微特殊一点的死锁。

改完这一步可以登录访问,但每次提示都会提示“使用配置文件中定义的控制用户连接失败”,还需要修改以下:

修改performance_schema.setup_instrume nts表,但实例重启后,又会恢复为默认值。

 

$cfg['Servers'][$i]['controluser'] = ''; //控制用户用户名
$cfg['Servers'][$i]['controlpass'] = ''; //控制用户密码

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/metadata/sql/mdl';

同一张表上发生的死锁演示

对了,phpmyadmin的默认路径在htdocs下边。

 

不过死锁的种类有很多种,上述的仅是一种最简单最常见的一种死锁,
理论上,只要满足死锁发生的条件:不同Session(会话)排他性地持有一部分资源,并且相互申请对方持有的资源
都会产生死锁,并不仅仅是在不同的表上,而是在不同的资源上,这种资源,可以是同一张表,甚至同一行数据上,以下举例说明。

搞定!

永久生效

--TestDeadLock的Id是主键(默认生成聚集索引),Col2字段是唯一性的非聚集索引
create table TestDeadLock
(
    Id int constraint pk_TestDeadLock_id primary key,
    Col2 int constraint uk_TestDeadLock_col2 unique,
    Remark varchar(100)
)

本文由小鱼儿玄机30码发布于数据库,转载请注明出处:的层面看看如何定位MDL的相关问题,再进行数据

关键词: 小鱼儿玄机30码