免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: clx_vio
打印 上一主题 下一主题

请教:关于InnoDB数据库的文件的两个问题 [复制链接]

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
11 [报告]
发表于 2015-08-28 15:10 |只看该作者
姜大神的《MySQL技术内幕:InnoDB存储引擎》你值得拥有
clx_vio 该用户已被删除
12 [报告]
发表于 2015-08-31 21:41 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
13 [报告]
发表于 2015-09-01 15:16 |只看该作者
回复 12# clx_vio


    该书第三张有你说的第一个问题, 至于第二个, 需要看源码了吧, 目前我还没看到哪一本书描述了相互之间的操作细节.
clx_vio 该用户已被删除
14 [报告]
发表于 2015-09-08 17:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
15 [报告]
发表于 2015-09-08 18:41 |只看该作者
2、InnoDB在处理上层来的SQL语句时(其实就是读写请求),二进制日志文件、索引文件、doubewrite相关文件,这些文件是怎么交互的?

1)二进制日志文件
在事务提交存储引擎之前,通过 MYSQL_BIN_LOG:rdered_commit 函数将 binlog 刷到本地磁盘,然后通过条件变量通知binlog发送线程。

2)索引文件属于数据文件,提交时不需要刷盘,在checkpoint发生时或者buffer不够需要替换时才会刷到外存

3)doublewrite 文件我理解的是 数据文件中的一段,大小2MB,比如从 1MB~3MB的地方;
每次刷脏页时先刷到这里,由于是连续的,刷盘速度很快;然后再随机的刷到各个页面上,这个是随机的,性能较差

这些文件都是通过内存交互的,直接没有直接联系,由于作用不同,所以对于数据文件,有数据buffer,对于日志(redo日志)文件,有日志buffer
这些buffer都是所有线程共享的,访问需要加锁
当某个sql语句访问到一个表后,后台会把这个表对应的页面载入 数据buffer,然后这个线程对buffer加读或写锁
对于读,直接按表结构解析出行返回给客户端
对于写,先根据sql语句内容生成一条数据,然后放入数据buffer,同时把这个buffer标记位脏页,然后提交存储引擎;
在提交到存储引擎之前,如果开启binlog,则会像上面说的那样先生成binlog写入binlog文件,然后通知binlog发送线程。

发送线程之前是处于等待状态,收到信号后,读取 binlog 内容,发送到slave 端


回复 1# clx_vio


   
clx_vio 该用户已被删除
16 [报告]
发表于 2015-11-15 18:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
clx_vio 该用户已被删除
17 [报告]
发表于 2015-11-15 18:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-11-17 06:20:00数据库技术版块每日发帖之星
日期:2015-11-18 06:20:00数据库技术版块每日发帖之星
日期:2015-11-30 06:20:00数据库技术版块每月发帖之星
日期:2016-01-07 23:03:06数据库技术版块每周发帖之星
日期:2016-01-07 23:06:31数据库技术版块每周发帖之星
日期:2016-01-07 23:06:47数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
18 [报告]
发表于 2015-11-15 19:25 |只看该作者
1、除了InnoDB数据库文件表文件之外,到底还有哪些文件和数据表相关?
默认情况下,有共享表空间和表定义文件(后缀名为frm),其**享表空间存储数据文件、double write、临时表等
如果设置了每个表一个文件,则有共享表空间、表定义文件、表数据文件等
当然还有redo log、undo log、bin log等日志文件也跟数据表有关。

2、InnoDB在处理上层来的SQL语句时(其实就是读写请求),二进制日志文件、索引文件、doubewrite相关文件,这些文件是怎么交互的?
这个一两句话说不清楚,你可以看看姜总的mysql innodb存储引擎内幕,有一章节讲这个。
我大致介绍下:
SQL语句(写)先写日志(先二进制日志、后redo log和undo log),然后在修改缓存中的数据,同时为了避免缓存数据在写入到磁盘时发生部分写的问题,引入了double write。
至于索引文件,在查询时根据索引在选择合适的执行计划,在写入数据时,涉及到更新B-Tree等

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-11-17 06:20:00数据库技术版块每日发帖之星
日期:2015-11-18 06:20:00数据库技术版块每日发帖之星
日期:2015-11-30 06:20:00数据库技术版块每月发帖之星
日期:2016-01-07 23:03:06数据库技术版块每周发帖之星
日期:2016-01-07 23:06:31数据库技术版块每周发帖之星
日期:2016-01-07 23:06:47数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
19 [报告]
发表于 2015-11-15 19:31 |只看该作者
本帖最后由 i6first 于 2015-11-15 19:32 编辑

你说的是redo log,redo log的存储跟数据不一样,日志是以block的方式存储,每个block为512字节,其空间可以循环使用。前提是相关事务已经被固化到了数据文件中。
innodb_log_group_home_dir  定义日志组的路径,配置在my.cnf(linux环境)护着my.ini(windows环境)下的mysqld节点下。配置完后,重启生效,但重启时,应该把之前的日志文件对应的拷贝到新的目录中,否则在启动mysql时会报错。

回复 17# clx_vio


   
clx_vio 该用户已被删除
20 [报告]
发表于 2015-11-16 21:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP