pt-osc测试
pt-osc测试
1、原表必须存在主键 PRIMARY KEY 或者 UNIQUE KEY
The new table `darren`.`_t_user_new` does not have a PRIMARY KEY or a unique index which is required for the DELETE trigger.
Please check you have at least one UNIQUE and NOT NULLABLE index.
2、支持有外键约束的表,需要加上--alter-foreign-keys-method=rebuild_constraints参数
3、默认原表不能存在触发器。但是需要--preserve-triggers变量,不建议这么做,可能存在风险
The table `test`.`foo` has triggers but --preserve-triggers was not specified.
4、在pt-osc的执行过程中,如果有对主键的更新操作则会出现重复的数据,在3.02版本中已经修复
3.02之前:
更新触发器对应的sql语句:REPLACE INTO $new_tbl->{name} ($qcols) VALUES ($new_vals);
3.02之后:
DELETE IGNORE FROM $new_tbl->{name} WHERE !($upd_index_cols) AND $del_index_cols;
REPLACE INTO $new_tbl->{name} ($qcols) VALUES ($new_vals);
5、innodb_autoinc_lock_mode=1测试
当innodb_autoinc_lock_mode =1:
对于 bulk inserts,使用传统表锁的 AUTO-INC Locking 方式。
------------------------
LATEST DETECTED DEADLOCK
------------------------
2018-10-24 16:44:13 0x7f93585e3700
*** (1) TRANSACTION:
TRANSACTION 275263782, ACTIVE 0 sec setting auto-inc lock
mysql tables in use 2, locked 2
LOCK WAIT 4 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 2
MySQL thread id 190, OS thread handle 140269612435200, query id 20289531 10.126.126.164 darren update
REPLACE INTO `sbtest`.`_sbtest1_new` (`id`, `c4`, `k`, `c`, `pad`, `c3`, `c5`, `c6`, `c7`, `c14`, `c9`, `c10`) VALUES (NEW.`id`, NEW.`c4`, NEW.`k`, NEW.`c`, NEW.`pa
d`, NEW.`c3`, NEW.`c5`, NEW.`c6`, NEW.`c7`, NEW.`c14`, NEW.`c9`, NEW.`c10`)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
TABLE LOCK table `sbtest`.`_sbtest1_new` trx id 275263782 lock mode AUTO-INC waiting
*** (2) TRANSACTION:
TRANSACTION 275263754, ACTIVE 0 sec fetching rows, thread declared inside InnoDB 4212
mysql tables in use 2, locked 2
258 lock struct(s), heap size 41168, 17913 row lock(s), undo log entries 17886
MySQL thread id 204, OS thread handle 140270819489536, query id 20289201 10.126.126.164 darren Sending data
INSERT LOW_PRIORITY IGNORE INTO `sbtest`.`_sbtest1_new` (`id`, `c4`, `k`, `c`, `pad`, `c3`, `c5`, `c6`, `c7`, `c14`, `c9`, `c10`) SELECT `id`, `c4`, `k`, `c`, `pad`
, `c3`, `c5`, `c6`, `c7`, `c14`, `c9`, `c10` FROM `sbtest`.`sbtest1` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '1481317')) AND ((`id` <= '1506548')) LOCK IN SHARE MODE
/*pt-online-schema-change 69839 copy nibble*/
*** (2) HOLDS THE LOCK(S):
TABLE LOCK table `sbtest`.`_sbtest1_new` trx id 275263754 lock mode AUTO-INC
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 15248 page no 25707 n bits 152 index PRIMARY of table `sbtest`.`sbtest1` trx id 275263754 lock mode S locks rec but not gap waiting
Record lock, heap no 40 PHYSICAL RECORD: n_fields 15; compact format; info bits 0
0: len 8; hex 000000000016e050; asc P;;
1: len 6; hex 000010683126; asc h1&;;
2: len 7; hex 01000007722b37; asc r+7;;
3: len 1; hex 30; asc 0;;
4: len 4; hex 00385728; asc 8W(;;
5: len 30; hex 34313331333339383035342d30323832343038383036372d383038353233; asc 41313398054-02824088067-808523; (total 119 bytes);
6: len 30; hex 34393730393732313932382d31333738353836373533322d393836313330; asc 49709721928-13785867532-986130; (total 59 bytes);
7: len 4; hex 80000000; asc ;;
8: len 1; hex 30; asc 0;;
9: len 1; hex 30; asc 0;;
10: len 1; hex 30; asc 0;;
11: len 1; hex 30; asc 0;;
12: len 4; hex 80000000; asc ;;
13: len 4; hex 80000000; asc ;;
14: len 4; hex 80000000; asc ;;
*** WE ROLL BACK TRANSACTION (1)
【分析】
根据死锁信息可以得到 2个信息:
(1)事务1在等待"_sbtest1_new"表的AUTO-INC表锁;
(2)事务2持有"_sbtest1_new"的AUTO-INC表锁,等待"sbtest1"的记录锁。
事务1的replace into语句,明显是跑pt-osc创建的触发器产生的,当原表产生记录更新时,
触发器并将记录以replace方式同步到新表。
事务1:
(1)根据条件更新,对sbtest1持有排他的RECORD LOCKS;
(2)更新后触发器被触发,再以replace的方式插入_sbtest1_new表,需要对_sbtest1_new持有一个隐式的自增锁。
事务2:
(1)insert into select from,首先对_sbtest1_new加上了表级的自增锁;
(2)对新表加上表锁后,再根据条件中主键id的范围区间去申请原表sbtest1的记录锁。
由上,由于事务1先更新原表sbtest1,对更新的记录加上排它锁,触发器还没触发时,
事务2开始执行,这个时候事务2现对新表加表锁,当它再去申请对原表加记录级别的共享锁时,
发现部分记录被加上了排他锁,所以需要等待。这时事务1触发器触发了,需要对新表获取一个自增锁,造成了回环,产生死锁。
pt-osc测试的更多相关文章
- 素数与Miller-Rabin测试
素数及其性质 素数又称质数.指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数. 性质1 有无穷多个素数. 证明: 用反证法.设已知的最大素数为 PPP,考虑 ...
- WCF-复合类型使用;传输图片
一:WCF服务端 IService1.cs中: public interface IService1 { [OperationContract] [WebInvoke(Method = "P ...
- C语言 栈 顺序结构 实现
一个能够自动扩容的顺序结构的栈 ArrStack 实例 (GCC编译). /** * @brief C语言实现的顺序结构类型的栈 * @author wid * @date 2013-10-29 * ...
- C语言 线性表 链式表结构 实现
一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...
- boost::xml——基本操作以及中文乱码解决方案
下面是本人使用boost库的xml部分的基础操作,并且解决对于大家使用boost库读写中文xml内容出现的乱码问题. 1.实现boost库xml基本操作2.解决boost对xml中中文乱码问题3.实现 ...
- 【web安全】第三弹:web攻防平台pentester安装及XSS部分答案解析
web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术. 下载链接及文档说明: http://pentesterlab.com/ex ...
- 不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示
最近工作中需要让CTreeCtrl控件的每一项都有提示信息,于是谷歌百度,爬山涉水,结果是………….在CodeProject里找到一篇文章是把CTreeCtrl派生出新类,重载一些函数自定义内容.使用 ...
- 转:创建编码的WebTest
创建编码的WebTest•通常,通过将现有的已记录Web测试转换为编码的Web测试来创建编码的Web测试.记录的Web测试以“Web测试编辑器”中可见的请求树开头.编码的Web测试是一个生成一系列We ...
- office web apps部署(二)
1.安装composer 参考 http://docs.phpcomposer.com/00-intro.md 根据系统选择安装方式 修改php.ini 去掉extension=php_opens ...
- OpenCV——轮廓特征描述
检测出特定轮廓,可进一步对其特征进行描述,从而识别物体. 1. 如下函数,可以将轮廓以多种形式包围起来. // 轮廓表示为一个矩形 Rect r = boundingRect(Mat(contours ...
随机推荐
- Flash AS 2.0右键菜单问题
这几天都在忙这个右键菜单,因为之前的右键菜单都不能用了,必须做新的. 可是又必须使用原来2.0的接口和方法,真是忙的焦头烂额. 之前2.0的东西太多又太杂. 我头一个右键菜单和二级菜单没有问题了,做第 ...
- python urllib2导出elasticsearch数据时 返回 "urllib2.HTTPError: HTTP Error 500: Internal Server Error"
0.业务场景 将ES中某个index的某个字段的所有数据,导出到文件中 1.ES数据导出方法简述 ES数据导出方法,我主要找到了以下几个方面,欢迎大家补充: ES官方API:snapshot and ...
- (转)java synchronised关键字
转自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html Java 多线程(六) synchronized关键字详解 Java ...
- IOS . -转载-10行代码搞定九宫格
//每个Item宽高 CGFloat W = ; CGFloat H = ; //每行列数 NSInteger rank = ; //每列间距 CGFloat rankMargin = (self.v ...
- SurvivalShooter学习笔记(二.玩家移动旋转)
该案例中:(PC端操作) 1.玩家移动输入控制通过虚拟轴Axis,旋转输入控制通过鼠标位置: 2.玩家始终面朝鼠标停留点,鼠标停留点通过摄像机朝地面的射线获取: 3.玩家待机移动状态切换通过Anima ...
- Eclipse Android 代码自己主动提示功能
Eclipse Android 代码自己主动提示功能 Eclipse for android 实现代码自己主动提示智能提示功能.介绍 Eclipse for android 编辑器中实现两种主要文件 ...
- 一个简单RPC框架是怎样炼成的(VI)——引入服务注冊机制
开局篇我们说了.RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 接下来处理RPC服务的注冊机制.所谓注冊机制,就是Server须要声明支持哪些rpc方法 ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- 第九篇:使用 lstat 函数获取文件信息
前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...
- 51、自定义View基础和原理
一.编写自己的自定义View最简单的自定义View,继承View通过覆盖View的onDraw方法来实现自主显示利用Canvas和paint来绘制显示元素(文字,几何图形等) <com.myvi ...