随笔分类 - MySQL Transaction
摘要:测试环境 Server version: 5.7.26-29-log Percona Server (GPL) transaction_isolation: REPEATABLE-READ 测试数据 /* 1. 表结构 */ CREATE TABLE t ( id BIGINT UNSIGNED N
阅读全文
摘要:MySQL事务协调器 MySQL支持多种存储引擎,并在MySQL Server层实现Binlog机制来进行主从数据同步。每种存储引擎相互独立,使用不同的数据文件和日志文件,当MySQL实例内部一个事务涉及到多个事务存储引擎表时,需要使用2PC来保证数据一致性。 ## 文件sql\mysqld.cc
阅读全文
摘要:事务回滚标志XID XID作为事务是否回滚的判断数据,在事务Prepare阶段分别写入Undo Log(内存)和Binlog Cache(内存)中,Undo日志会产生Redo日志,并在后续的flush阶段和Sync阶段写到操作系统文件缓存和物理磁盘上,在数据库实例故障恢复时,Undo Log能通过已
阅读全文
摘要:MySQL事务提交流程 MySQL事务提交流程可拆分为下面几个阶段: Prepare阶段 Flush阶段 Sync阶段 Commit阶段 Clean阶段 Prepare阶段 获取MDL_Key::COMMIT Metux。 获取last_committed值,该值为上一次COMMIT队里中最大的se
阅读全文
摘要:当MySQL服务器出现性能问题时,应该优先排查未提交事务,除可以查询相关系统表外,还可以观察SHOW INNODB STATUS的输出结果来确认未提交事务。 首先查看InnoDB事务的History list length,如果该值就大,则很有可能存在未提交事务: 对于未开始的事务,其描述为: 对于
阅读全文
摘要:TCP三次握手(Three-Way Handshake) 建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。 TCP四次挥手(Four-Way Wavehand) 断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 当客户端与MySQL数据库建立连接并开启
阅读全文
摘要:未提交事务 长期未提交事务,指开启事务后,长时间未向MySQL发出SQL执行请求或事务处理(COMMIT/ROLLBACK)请求,在系统表`information_schema`.`INNODB_TRX` 中状态为RUNNING,而在`information_schema`.`PROCESSLIST
阅读全文
摘要:问题表现:系统增删改操作明显变慢(由原来的几十毫秒变为几十秒) 查看未提交事务 发现无未提交事务。 查看执行时间较长的进程 未发现异常 PS1: processlist表中的TIME字段是指进程处理目前状态的时间,而不是进程开始执行到现在的时间。 查看事务版本Purge情况 执行结果为: 从上面可看
阅读全文
摘要:MySQL和SQL Server两种数据库在REPEATABLE-READ事务隔离级别实现方式不同,导致使用上也存在差异。 在MySQL中,默认使用REPEATABLE-READ事务隔离级别,MySQL通过MVCC (Multiversion Concurrency Control)来实现REPEA
阅读全文
摘要:MySQL支持的四种事务隔离级别 READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ SERIALIZABLE 查看全局事务隔离级别和会话事务隔离级别 SHOW GLOBAL VARIABLES LIKE 'tx_isolation'; SHOW SESS
阅读全文
摘要:分布式事务两阶段提交 在分布式事务中,需要协调所有分布式原子事务参与者,并决定提交或回滚分布式事务,因此采用两阶段提交协议: 第一阶段为请求阶段或表决阶段,事务协调者通知事务参与者准备提交或取消事务,然后进入表决过程,事务参与者将表决结果告知协调者是否同意提交事务; 第二阶段是提交阶段,协调者收集到
阅读全文
摘要:问题描述 按照正常情况,从库上只执行查询,但在从库上发现有长时间未提交的事务,联系开发后确认程序的配置问题. 解决办法 修改前代码为(基于spring框架): 修改后的代码为: Spring事务中propagation属性选项: propagation属性默认值REQUIRED会开启事务,会在查询开
阅读全文
摘要:TPS计算规则 在MYSQL 中,TPS(Transaction Per Second)的计算方法为 (com_commit+com_rollback)/time,但com_commit和com_rollback记录的是显式事务的,因此隐式提交的事务不会被算到TPS中,如果程序未使用显示事务,即使在
阅读全文
摘要:按照非索引列更新 ## ## 测试数据: CREATE TABLE `tb4001` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `c1` int(11) DEFAULT NULL, `c2` varchar(200) DEFAULT NULL, `c3`
阅读全文
摘要:MYSQL 支持的事务隔离级别 InnoDB 默认使用REPEATABLE READ 隔离级别,主要用来保证主从复制在STATEMENT语句级别下数据一致。如果在MySQL 5.1版本后二进制日志使用ROW级别,则可将默认事务隔离级别修改为READ COMMITTED以提高事务并发性。 SELECT
阅读全文
摘要:在MySQL读取数据时可以按照是否使用一致性非锁定读来分为快照读和当前读:1、快照读:MySQL使用MVCC (Multiversion Concurrency Control)机制来保证被读取到数据的一致性,读取数据时不需要对数据进行加锁,且快照读不会被其他事物阻塞。2、当前读:也称锁定读(loc
阅读全文
摘要:在MySQL中,事务隔离级别RC(read commit)和RR(repeatable read)两种事务隔离级别基于多版本并发控制MVCC(multi-version concurrency control)来实现。
阅读全文