MySQL精选问题杂记
文章平均质量分 81
主要介绍MySQL基础知识和原理,以及各种线上碰到的复杂问题和优化思路。
Mergades
专注于应用架构设计。
展开
-
Using filesort
Using filesort简介当我们使用order by语句的时候,经常会看到执行计划存在Using filesort。那么什么是Using filesort呢?先看官方定义:https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.htmlThis section describes when MySQL can use an index to satisfy an ORDER BY clause, the filesort o原创 2021-01-20 14:17:27 · 1474 阅读 · 0 评论 -
MySQL RR 级别行锁问题
现象因为RR级别下为可重复读,可能会造成部分事务提交后并发问题,从而导致数据出现问题,如下两个事务T1T2start TRANSACTION;SELECT * from black_user where id = 1;start TRANSACTION;SELECT * from black_user where id = 1 for update;SELECT * from black_user where id = 1 for update;upda原创 2020-08-31 09:49:01 · 449 阅读 · 0 评论 -
InnoDB磁盘数据结构
InnoDB磁盘数据结构主要包含:Tables 表结构Indexes 索引结构Tablespaces 表空间InnoDB Data Dictionary InnoDB数据字典Doublewrite Buffer 双写缓存Redo LogUndo LogsTablescreate tableCREATE TABLE t1 (a INT, b CHAR (20), PRIMAR...原创 2020-03-12 11:23:35 · 320 阅读 · 0 评论 -
InnoDB内存数据结构
InnoDB内存相关的数据结构主要包含以下几种:Buffer PoolChange BufferAdaptive Hash IndexLog BufferBuffer PoolBuffer Pool 是在主存的一片区域,主要用来缓存表和索引数据供InnoDB访问。Buffer Pool允许频繁访问的数据可以加速直接从内存读取。专业的服务器,一般使用80%的物理内存作为Buffer ...原创 2020-02-29 11:13:10 · 1474 阅读 · 0 评论 -
InnoDB ACID模型
文档:https://dev.mysql.com/doc/refman/5.7/en/mysql-acid.htmlACID 模型是设计数据库的基本原则。MySQL包含各种组件,比如InnoDB引擎,实现了ACID引擎,有效避免数据错误和宕机后的数据恢复问题。ACID 指:A: atomicity.C: consistency.I: isolation.D: durability....原创 2020-02-17 21:09:52 · 254 阅读 · 0 评论 -
MySQL Online DDL
核心参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.htmlOnline DDLOnlineDDL支持在线更改表结构的同时,运行DML语句。Online DDL是5.7版本的特性,主要包含:提高了业务的相应和可用性,不会造成业务的长时间不可用。在DDL操作使用锁时,保证程序的并发和性能之前的平...原创 2020-02-06 15:31:05 · 529 阅读 · 0 评论 -
InnoDB Locking——锁类型简介
主要翻译文档 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html针对部分理论知识自己做了测试。InnoDB锁类型主要包含以下几种Shared and Exclusive Locks ,即我们常说的共享锁和独占锁Intention Locks,意向锁Record Locks,行锁Gap Locks,GAP锁Next...原创 2020-02-04 11:42:22 · 676 阅读 · 0 评论 -
MySQL幻读 以及GAP、Next-Key Locking
什么是幻读 phantomThe so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but returns ...原创 2020-01-22 16:09:34 · 388 阅读 · 0 评论 -
一次死锁的分析
现象应用程序报错:MySQLTImeoutException:Statement cacelled due to timeout or client request。数据库状态通过以下语句查看当前数据库事务状态 SELECT * FROM information_schema.INNODB_TRX;原创 2017-09-21 18:43:03 · 571 阅读 · 0 评论 -
mysql 死锁
1,首先查看当前数据库的所有事务SELECT * FROM information_schema.INNODB_TRX; 2,通过mysql thread id 查找对应客户端的请求sql线程select * from information_schema.processlist where id=1662333;3,通过线程原创 2016-11-22 20:07:10 · 619 阅读 · 0 评论 -
[MySQL] 生产环境MySQL数据库事务一直在RUNNING
主要是参考其他的博客。但是很有用。确实解决了我们之前遇到的一个问题。不过场景不太一样。当时我们系统的代码大致如下:start transaction;try{if(i == 0) return;doSomething;commit;}catch(Exception e){rollback()}在特殊情况下,语句进入到if,出现事务running异常。一直无法定位到问题,原创 2016-06-22 18:19:58 · 4425 阅读 · 0 评论 -
mysql事务之可重复读(Repeated Read)
1,Repeated Read在可重复读(REPEATABLE READS)隔离级别中,基于锁机制并发控制的DBMS需要对选定对象的读锁(read locks)和写锁(write locks)一直保持到事务结束,但不要求“范围锁(range-locks)”,因此可能会发生“幻影读(phantom reads)”在该事务级别下,保证同一个事务从开始到结束获取到的数据一致。这是Mysql的原创 2016-03-29 21:46:43 · 7208 阅读 · 2 评论 -
mysql事务之提交读(Read Committed)
1,Read Commited定义:在提交读(READ COMMITTED)级别中,基于锁机制并发控制的DBMS需要对选定对象的写锁(write locks)一直保持到事务结束,但是读锁(read locks)在SELECT操作完成后马上释放(因此“不可重复读”现象可能会发生,见下面描述)。和前一种隔离级别一样,也不要求“范围锁(range-locks)”。简而言之,提交读这种隔离级别保证了...原创 2016-03-29 21:46:21 · 23887 阅读 · 2 评论 -
mysql事务之未提交读(Read uncommitted)
1,Read uncommitted定义:wiki上的定义如下:未提交读(READ UNCOMMITTED)是最低的隔离级别。允许脏读(dirty reads),事务可以看到其他事务“尚未提交”的修改。通过比低一级的隔离级别要求更多的限制,高一级的级别提供更强的隔离性。标准允许事务运行在更强的事务隔离级别上。(如在可重复读(REPEATABLE READS)隔离级别上执行提交读原创 2016-03-29 21:45:13 · 13060 阅读 · 0 评论 -
执行MySql更新报错:error code [1785]
应用连接MySql数据库,报错,报错信息如下:### Error updating database. Cause: java.sql.SQLException: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either auto原创 2015-07-08 20:26:22 · 12567 阅读 · 0 评论