
Mysql
haliaddel
这个作者很懒,什么都没留下…
展开
-
RR级别下加锁分析
mysql数据操作加锁分析什么是幻读间隙锁加锁规则案例一:等值查询间隙锁案例二:非唯一索引等值锁案例三: 主键范围索引案例四:非唯一索引范围锁唯一索引范围锁bug案例六:非唯一索引上存在“等值”的例子案例七:limit语句加锁什么是幻读幻读:在RR(可重复读)的隔离级别下,由于另一个事务的插入操作,导致前后两次读取(当前读)数据不一致。如下图:为了防止出现幻读的现象,就需要锁住两条记录之间...原创 2020-04-13 11:24:44 · 1230 阅读 · 0 评论 -
Mysql日志模块
Mysql日志模块redo log(重做日志)binlog(归档日志)两种日志的区别更新操作change buffer v.s. redo logredo log(重做日志)WAL技术(Write-Aheading Logging): 他的主要思想是先写日志再执行操作。如果一条记录需要更新,先将更新记录写在redo log日志中,innodb引擎会在合适的时刻执行相应的更新操作。Inno...原创 2020-04-08 19:44:55 · 272 阅读 · 0 评论 -
Mysql全局锁、表锁和Innodb行锁
锁数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock (FTWRL)。当你需...原创 2019-12-15 10:44:12 · 380 阅读 · 0 评论 -
Mysql情景优化
案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。这个表的建表语句如下:mysql> CREATE TABLE `tradelog` ( ìdìnt(11) NOT NULL, `tradeid` varch...原创 2019-12-15 10:43:21 · 191 阅读 · 0 评论 -
Mysql 空间问题及count(*)慢查询问题
空间问题在Mysql日常使用中,会出现这样的一个问题,我将数据表的内存删除了一半,但是数据表占用的空间并未发生变化。数据删除流程假设,我们要删掉R4这个记录,InnoDB引擎只会把R4这个记录标记为删除。如果之后要再插入一个ID在300和600之间的记录时,可能会复用这个位置。但是,磁盘文件的大小并不会缩小。现在,你已经知道了InnoDB的数据是按页存储的,那么如果我们删掉了一个数据页上...原创 2019-12-15 10:43:35 · 375 阅读 · 0 评论 -
Mysql学习笔记——Change Buffer及事务规则
Change Buffer 简介当需要更新一个数据页的时候,如果数据页在内存中,则直接更新。如果这个数据页不在内存中,在不影响数据一致性的情况下,InnoDB会将这些更新操作缓存在change buffer 中,这样就不需要从内存中读取数据了。那么,什么时候执行这些缓存的更新操作呢?在执行下次查询操作时,如果需要访问到这个数据页,会将其加载进内存,此时就可以进行更新操作,同时也设有定时更新的...原创 2019-12-15 10:43:55 · 555 阅读 · 0 评论 -
Mysql索引
简介一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本500页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。索引的常见模型哈希表:哈希表是一种以键-值(key-value)存储数据的结构。处理冲突的方式:链表特点: 哈希表适用于等值查询的场景,但是在区间查询的速度很慢...原创 2019-12-15 10:44:34 · 119 阅读 · 0 评论