zoukankan      html  css  js  c++  java
  • 关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。

    每隔0.1秒就刷一次MYSQL文件的变化,并闪动标示出来,以观察SQL执行时,MYSQL的处理顺序。

    watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1

     

    我理解的执行顺序:(还缺插入缓冲的合并)很粗的框架理解,但折腾了许多天。

    硬盘的数据文件mytable.ibd存有mytable这个表id=1的记录,name=123的。(innodb_per_file设置为on)

    当UPDATE MYTABLE SET NAME=’ABC’ WHERE ID=1这个语句执行时,系统生成一个LSN是1

    INNODB READ THREAD 将这条记录以及词典从硬盘中读到内存的数据页DATA PAGE中,并写到内存中一块UNDO BUFFER中。并对这条记录加锁(如果有索引就是行级锁,否则就是表锁)

    INNODB WRITE THREAD将这条记录的UNDO日志写到UNDO表空间的回滚段中(默认是ibdata1文件中),

    INNODB对数据页中的记录进行更新,变成脏页后,然后把LSN=1的这条日志,写进REDOLOG BUFFER;

    到commit时,无论是显式还是隐式,根据innodb_flush_log_at_trx_commit指定的方式,刷新LSN到REDO LOG文件中,然后释放锁。这时PURGE THREAD就可以对UNDOLOG进行清理。PURGE是按事务号不按日志。

    INNODB MASTER THREAD会择机把脏页刷写回数据文件mytable.ibd中。具体过程INNODB先把脏页的数据拷贝到内存池中一个DOUBLE WRITE BUFFER中,然后调用系统FSYNC()刷新系统缓存来确认真正写入了,然后再将脏页FLUSHD到对应的数据文件中mytable.idb后,释放脏页。

    INNODB MASTER THREAD会择机已经写回数据文件的日志LSN,做为CHECKPOINT写进REDOLOG中。

    [转载]便于理解mysql内幕的各种逻辑图组

    更直观性mysql整体逻辑机构图:

     [转载]便于理解mysql内幕的各种逻辑图组

    mysql sql执行过程示意图,对理解mysql执行计划有很大帮助

    [转载]便于理解mysql内幕的各种逻辑图组

    当 ‘innodb_flush_log_at_trx_commit = x ’x=0,1,2 各值时刷盘机制

    [转载]便于理解mysql内幕的各种逻辑图组

    mysql 内存分配示意图,对理解内存分配很有参考意义

    [转载]便于理解mysql内幕的各种逻辑图组

    INNODB 内存与硬盘之间交互。 

    watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1 

  • 相关阅读:
    线程锁(互斥锁Mutex)及递归锁
    threading模块,python下的多线程
    笔试面试题实现
    Socket编程,SocketServer模块
    iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
    iOS 根据文件名获取到文件路径
    IOS UILabel自动换行
    🐤小记
    iOS 获取当前月份的天数(转)、
    IOS 在Ipad 横屏 上使用UIImagePickerController
  • 原文地址:https://www.cnblogs.com/crossapply/p/5450507.html
Copyright © 2011-2022 走看看