在日常开发中,mysql存储引擎默认是用innoDB,存储引擎分为innoDB,myISAM,memory,innoDB支持事务,myISAM不支持事务,memory是在内存中,不存储在磁盘,所以memory适用于临时表,特性是mysql服务器重启之后,内存里的数据就会消失。...
我们在日常使用sql中,查询数据库反映的时间过长,这时候可能是flush脏页导致的,而脏页会什么时候触发呢?
Mysql隔离级别默认是repeatable read,他是不可以解决不可重复读,不可重复读是用mysql里面的mvcc解决,mvcc全称是mulit-version Concurrent Controller多版本并发控制,里面有个版本链readView。...
的时候用版本链readView控制,写的时候加锁。一种是读写都加锁,比如只允许读取最后数据的银行业务。锁又分为共享锁(s锁)和排它锁(x锁),锁的颗粒度分为表锁和行锁,所以当向上表的排他锁的时候,必须里面的行没有上x锁或者s锁,当然...
前面说了为了解决脏读,幻读,不可重复读,mysql设置了四种隔离级别,read committed和read uncommitted会发生幻读和不可重复读,repeatable read会发生不可重复读,seriliztable,mysql默认是repeatable read,用mvcc解决不可重复读...
前面我们说了undo日志写入undo页面链表时,先需要把undo page header、undo segment header、undo log header等。每个事务都会有相应的undo链表,如果只存储一点数据不是很浪费吗,于是有了可重用,满足当前链表只有一个页,并...
前面说了undo日志的文件格式,第一页和后面的页是不同的,填入undo日志之前,会先把undo_page_header属性填满,还有undo_segment_header,undo_log_header。List base node存在undo segment header,list node存在每个undo 页面...
前面说了lsn值就是log sequence number代表记录redo日志存了多少字节,默认值是8000多,算偏移量直接减一下就好,还有flush_to_disk的lsn值,这个值之前的数据代表都已经持久化,这个持久化代表redo日志持久化,但是对应的buffer...
前面说了redo日志的格式,刷新到磁盘后台有线程每秒运行一次,还有事务提交的时候,buffer pool不会刷新到磁盘,但是log buffer会刷新到磁盘。Log buffer会分成若干的block,吧这些block持久化到磁盘上,mysql根目录有两个log_fi...
前面我们说了修改一条数据总不能吧16kb的页全部持久化到磁盘上,于是有了redo日志,记录哪些修改的数据,redo日志也有自己的缓存区,并不是直接把数据记录到磁盘上,缓存区是innoDB_redo_buffer_size,默认是16mb,为了保证原子性,...