stop slave 卡住模拟--大事务场景

摘要:
下面将演示遇到大事务时,从库stopslave卡住。stopslave;startslaveio_thread;3.在主库上执行大事务再次执行˃insertintoapple_test(a,b)selecta,bfromapple_testlimit8388608;QueryOK,8388608rowsaffectedRecords:8388608Duplicates:0Warnings:0查看数量selectcount(*)fromapple_test;+----------+|count(*)|+----------+|16777216|+----------+1rowinset4.开启复制startslavesql_thread,等待2s,接着stopslave启动sql线程,开始执行事务,接着等待2s,stopslave停止复制。˃startslavesql_thread;selectsleep;stopslave;QueryOK,0rowsaffected+----------+|sleep|+----------+|0|+----------+1rowinsetQueryOK,0rowsaffected可以看到,stopslave后卡住了一段时间,长度与事务大小有关,这里是约26s.查看数量selectcount(*)fromapple_test;+----------+|count(*)|+----------+|16777216|+----------+1rowinset可以看到,数据插入成功,大事务已经执行完成。最后,startslave,stopslave都不会卡住。˃startslave;QueryOK,0rowsaffected˃stopslave;QueryOK,0rowsaffected综上,从库正在执行大事务时,stopslave会卡住,等大事务执行完成后,再次stopslave不会卡住。
目录

上一篇文章stop slave卡住,初步介绍了stop slave的问题现象以及一些原因。

本文介绍另外一种情况:大事务。

下面将演示遇到大事务时,从库stop slave卡住。

MySQL测试集群:一主一从。

主库、从库执行操作如下。

1.主库数据准备

首先,新建表

CREATE TABLE `apple_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL DEFAULT '0' COMMENT 'a',
  `b` int(11) NOT NULL DEFAULT '0' COMMENT 'b',
  `updated_ts` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
  `created_ts` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

首先插入一条记录

> insert into apple_test(`a`, `b`) values(1,1);

接着反复执行如下SQL,直到数量达到8388608

> insert into apple_test(a, b) select a,b from apple_test;

查看数量

> select count(*) from apple_test;
+----------+
| count(*) |
+----------+
|  8388608 |
+----------+
1 row in set (1.87 sec)
2.从库停止复制stop slave,只开启io thread

等数据复制完成后,查看数量

select count(*) from apple_test;
+----------+
| count(*) |
+----------+
| 16777216 |
+----------+
1 row in set (2.92 sec)

大事务执行耗时,实际上,是SQL线程执行时的耗时。

这里接着只开启io 线程,让后续relay log先复制到从库。

stop slave;start slave io_thread;
3.在主库上执行大事务

再次执行

> insert into apple_test(a, b) select a,b from apple_test limit 8388608;
Query OK, 8388608 rows affected (1 min 20.68 sec)
Records: 8388608  Duplicates: 0  Warnings: 0

查看数量

select count(*) from apple_test;
+----------+
| count(*) |
+----------+
| 16777216 |
+----------+
1 row in set (5.53 sec)
4.开启复制start slave sql_thread,等待2s,接着stop slave

启动sql线程,开始执行事务,接着等待2s,stop slave停止复制。

> start slave sql_thread;select sleep(2);stop slave;
Query OK, 0 rows affected (0.02 sec)

+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)

Query OK, 0 rows affected (25.95 sec)

可以看到,stop slave后卡住了一段时间,长度与事务大小有关,这里是约26s.

查看数量

select count(*) from apple_test;
+----------+
| count(*) |
+----------+
| 16777216 |
+----------+
1 row in set (2.92 sec)

可以看到,数据插入成功,大事务已经执行完成。

最后,start slave, stop slave都不会卡住。

> start slave;
Query OK, 0 rows affected (0.01 sec)

> stop slave;
Query OK, 0 rows affected (0.01 sec)

综上,从库正在执行大事务时,stop slave会卡住,等大事务执行完成后,再次stop slave不会卡住。

免责声明:文章转载自《stop slave 卡住模拟--大事务场景》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇冷冻食品微信小程序在线开店的流程Linux压力测试软件Stress安装及使用指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Pytest自动化测试

Allure除了具有Pytest基本状态外,其他几乎所有功能也都支持。 1、严重性 如果你想对测试用例进行严重等级划分,可以使用 @allure.severity 装饰器,它可以应用于函数,方法或整个类。 它以 allure.severity_level 枚举值作为参数,分别为:BLOCKER(中断),CRITICAL(严重),NORMAL(常规),...

记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用

今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在pom文件中引入Maven Assembly Plugin插件 (注意:如果含有其他打包插件,最好先排除掉干扰) 1 <plu...

使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)

1、首先是rabbitmq的配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...

Golang学习笔记(一)-Go语言环境安装以及运行代码

Linux安装 Golang官网下载地址:https://golang.org/dl/ 1、下载安装包 2、解压至 /usr/local 目录 tar -C /usr/local -zxvf go1.11.5.linux-amd64.tar.gz 3、添加 /usr/loacl/go/bin 目录到PATH变量中。添加到/ etc/profile 或 $H...

深入MySQL复制(二):基于GTID复制

相比传统的MySQL复制,gtid复制无论是配置还是维护都要轻松的多。本文对gtid复制稍作介绍。 MySQL基于GTID复制官方手册:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html 1.gtid基本概念 传统的基于binlog position复制的方式有个严重的缺点:如果s...

不修改sql文本情況下,改變其執行計劃

不修改sql文本情況下,改變其執行計劃 可以使用sql profile和spm(sql plan manage),本文主要介紹SPM方式 sql profile參考sql profile固定執行計劃 步驟 1.手動生成SQL Plan Baseline DECLARE V_TEMP NUMBER; BEGIN V_TEMP :=...