ddl锁表统计
官方文档:
https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html
虽然官方统计了大部分DDL操作时,是否允许DML,但并不是很全,或者有些支持DML,但仅仅只支持查询,不支持增删改操作。
版本:MySQL 5.7
场景一、
修改 varchar 字段长度时,在 utf8mb4 字符集下,varhcar 长度从【1-63】长度变为 【64及以上】长度时,会锁表,只能查询。反之亦然
State:copy to tmp table
场景二、int 类型个性为 decimal(10,2),会锁表,只能查询。
State:copy to tmp table
MySQL [(none)]> show processlist;
+----+------+-----------------+-------+---------+------+---------------------------------+-------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+-------+---------+------+---------------------------------+-------------------------------------------+
| 9 | root | localhost:39614 | ceshi | Sleep | 1604 | | NULL |
| 12 | root | localhost:39620 | NULL | Query | 3 | Waiting for table metadata lock | select * from ceshi.t1 limit 1 for update |
| 13 | root | localhost:39622 | NULL | Query | 0 | starting | show processlist |
| 17 | root | localhost:39630 | ceshi | Query | 5 | copy to tmp table | alter table t1 modify age delimal(10,2) |
+----+------+-----------------+-------+---------+------+---------------------------------+-------------------------------------------+
场景三、
varchar 长度 60 -> 100 ,同时新增加一个 varchar 字段。会锁表,只能查询。
MySQL [(none)]> show processlist;
+----+------+-----------------+-------+---------+------+-------------------+-------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+-------+---------+------+-------------------+-------------------------------------------------------------------------+
| 9 | root | localhost:39614 | ceshi | Sleep | 1903 | | NULL |
| 12 | root | localhost:39620 | NULL | Query | 0 | starting | show processlist |
| 13 | root | localhost:39622 | NULL | Sleep | 299 | | NULL |
| 17 | root | localhost:39630 | ceshi | Query | 6 | copy to tmp table | alter table t1 modify name varchar(100),add column describ varchar(100) |
+----+------+-----------------+-------+---------+------+-------------------+-------------------------------------------------------------------------+
4 rows in set (0.000 sec)
场景四、
varchar 修改为 text。会锁表,只能查询
MySQL [ceshi]> show processlist;
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------+
| 3 | root | 127.0.0.1:33426 | ceshi | Query | 3 | copy to tmp table | alter table t1 modify describ text |
| 4 | root | 127.0.0.1:33428 | ceshi | Query | 0 | starting | show processlist |
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------+
场景五、
varchar2048 -> 2047 减小会锁表
MySQL [ceshi]> show processlist;
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------------+
| 3 | root | 127.0.0.1:33426 | ceshi | Query | 3 | copy to tmp table | alter table t1 modify name varchar(2047) |
| 4 | root | 127.0.0.1:33428 | ceshi | Query | 0 | starting | show processlist |
+----+------+-----------------+-------+---------+------+-------------------+------------------------------------------+
2 rows in set (0.000 sec)
ddl锁表统计的更多相关文章
- mysql DDL 锁表
mysql DDL 锁表 select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.i ...
- MySQL5.6在线DDL不锁表(在线添加字段)
解答你也看一下MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作? 操作如下:1.注意磁盘空间(临时表目录 参数 tmpd ...
- MySQL Online DDL导致全局锁表案例分析
MySQL Online DDL导致全局锁表案例分析 我这边遇到了什么问题? 线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃 ...
- MySQL5.7之在线DDL不会锁表
MySQL5.7在线修改varchar字段不在锁表,测试过程如下: mysql> select version(); +------------+ | version() | +-------- ...
- 查询01_DML锁和DDL锁的处理
一.摘要 Oracle的手册上关于锁的分类说明如下: 1. DML锁:Date lock.执行DML时保护数据的锁.Row Lock(TX)保护特定行,Table Lock(TM)保护整个表,可以通过 ...
- MySQL ddl丢表
MySQL ddl丢表: MySQL server层为了和innodb层保持数据一致性,在写binlog和redo log时,引入了两阶段提交,但不同的变更产生的日志并非都使用这种策略. 下面就来 ...
- oracle学习----DDL锁理解
DDL锁分为三种 1.排他DDL锁 2.共享DDL锁 3.可中断解析锁 大部分DDL都带有排他DDL锁,如一个表被修改中,可以使用select查询数据,但是大多数操作都是不允许执行的,包括所有其他DD ...
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
- Oracle系列-锁表与解锁解决方案(基础版)
[Oracle锁表查询和解锁解决方案] 一.了解原因(借鉴整理) 数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert.delete.upd ...
- 【MySQL 读书笔记】全局锁 | 表锁 | 行锁
全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...
随机推荐
- CCRD总目录(2007年至今,动态更新中)
中信国健临床通讯总目录 (动态更新.末次更新: 2015-07-06) 年份 目录网址 2010年 1.2010年第01期 (或者浏览有备注的目录: 2010年第01期 ) 2. 2010年第02期 ...
- C#计时器 Stopwatch 使用demo
Stopwatch st = new Stopwatch(); st.Start(); for(int i =0; i<100000; i++) { console.writeLine('输出' ...
- css3自动滚动
<!DOCTYPE html> <html lang="en"><div class="wrap"> <ul clas ...
- 轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor
轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor 授人以鱼不如授人以渔,如果说的别人都没明白,说明自己实际也不是太明白 1,下载docker-compose sudo c ...
- Net Core 网关 Ocelot 简单案例
1.什么是Ocelot Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabr ...
- SpringCloud微服务实战——搭建企业级开发框架(四十九):数据字典注解的设计与实现
数据字典是系统中基本的必不可少的功能,在多种多样的系统中,数据字典表的设计都大同小异.但是使用方式确是多种多样,设计好一套易用的数据字典功能模块,可以使开发事半功倍. 常用的数据字典使用方式: 直 ...
- LVS的NAT,TUN,DR原理及区别
原理及其区别 Linux Virtual Server是通过ipvs内核模块和ipvsadm用户空间命令行工具来实现负载均衡的它支持三种工作模式: NAT模式:LVS调度器将请求转发给后端服务器,同时 ...
- 第十一周作业-N67044-张铭扬
1. redis主从复制原理? 1 从节点1.2 2 127.0.0.1:6379> replicaof 10.0.0.157 6379 3 OK 4 127.0.0.1:6379> co ...
- mysql 主次数据库搭建
准备工作:主192.168.200.51 从192.168.200.53 主从服务器需要有相同的初态 1.将主服务器要同步的数据库枷锁,避免同步时数据发生改变 mysql>use db; my ...
- conda创建和启动python虚拟环境
conda与python虚拟环境 创建环境 conda create -n ENV_NAME python=3.9 激活环境 conda activate ENV_NAME 给虚拟环境安装包: con ...