当前位置: 首页 > news >正文

网站建设需要的技能有哪些品牌推广的方式

网站建设需要的技能有哪些,品牌推广的方式,上街区做网站,开发商违约逾期交房起诉退房一、加载缓存数据 引擎要执行更新语句的时候 ,比如对“id10”这一行数据,他其实会先将“id10”这一行数据看看是否在缓冲池里,如果不在的话,那么会直接从磁盘里加载到缓冲池里来,而且接着还会对这行记录加独占锁。 二…

一、加载缓存数据

        引擎要执行更新语句的时候 ,比如对“id=10”这一行数据,他其实会先将“id=10”这一行数据看看是否在缓冲池里,如果不在的话,那么会直接从磁盘里加载到缓冲池里来,而且接着还会对这行记录加独占锁。

二、写undo日志

        接着下一步,假设“id=10”这行数据的name原来是“zhangsan”,现在我们要更新为“xxx”,那么此时我们得先把要更新的原来的值“zhangsan”和“id=10”这些信息,写入到undo日志文件中去。
其实稍微对数据库 有一点了解的同学都应该知道,如果我们执行一个更新语句,要是他是在一个事务里的话,那么事务提交之前我们都是可以对数据进行回滚的,也就是把你更新为“xxx”的值回滚到之前的“zhangsan”去。所以为了考虑到未来可能要回滚数据的需要,这里会把你更新前的值写入undo日志文件。

三、更新buffer pool中的缓存数据

        当我们把要更新的那行记录从磁盘文件加载到缓冲池,同时对他加锁之后,而且还把更新前的旧值写入undo日志文件之后,我们就可以正式开始更新这行记录了,更新的时候,先是会更新缓冲池中的记录,此时这个数据就是脏数据了。
        这里所谓的更新内存缓冲池里的数据,意思就是把内存里的“id=10”这行数据的name字段修改为“xxx”。
        那么为什么说此时这行数据就是脏数据了呢?
        因为这个时候磁盘上“id=10”这行数据的name字段还是“zhangsan”,但是内存里这行数据已经被修改了,所以就会叫他是脏数据。
        我们看下图,我同时把几个步骤的序号标记出来了。

 四、写redo日志

        接着我们来思考一个问题,按照上图的说明,现在已经把内存里的数据进行了修改,但是磁盘上的数据还没修改那么此时万一MySQL所在的机器宕机了,必然会导致内存里修改过的数据丢失,这可怎么办呢? 这个时候,就必须要把对内存所做的修改写入到一个Redo Log Buffer里去,这也是内存里的一个缓冲区,是用来存 放redo日志的所谓的redo日志,就是记录下来你对数据做了什么修改,比如对“id=10这行记录修改了name字段的值为xxx”,这就是一个日志。
我们先看下图的示意。

 

 

 五、redo日志刷入磁盘

        我们想要提交一个事务了,此时就会根据一定的策略把redo日志从redo log buffer里刷入到磁盘文件里去。
        此时这个策略是通过innodb_flush_log_at_trx_commit来配置的,他有几个选项。
当这个参数的值为0的时候,那么你提交事务的时候,不会把redo log buffer里的数据刷入磁盘文件的,此时可能你都提交事务了,结果mysql宕机了,然后此时内存里的数据全部丢失。相当于你提交事务成功了,但是由于MySQL突然宕机,导致内存中的数据和redo日志都丢失了,我们看下图:

        当这个参数的值为1的时候,你提交事务的时候,就必须把redo log从内存刷入到磁盘文件里去,只要事务提交成功,那么redo log就必然在磁盘里了,我们看下图:

 六、写入binlog日志

        在我们提交事务的时候,会把redo log日志写入磁盘文件中去。然后其实在提交事务的时
候,我们同时还会把这次更新对应的binlog日志写入到磁盘文件中去,如下图所示。

 

        大家可以在这个图里看到一些变动,就是我把跟InnoDB存储引擎进行交互的组件加入了之前提过的执行器这个组件,他会负责跟InnoDB进行交互,包括从磁盘里加载数据到Buffer Pool中进行缓存,包括写入undo日志,包括更新Buffer Pool里的数据,以及写入redo log buffer,redo log刷入磁盘,写binlog,等等。
        实际上,执行器是非常核心的一个组件,负责跟存储引擎配合完成一个SQL语句在磁盘与内存层面的全部数据更新操作。
        而且我们在上图可以看到,我把一次更新语句的执行,拆分为了两个阶段,上图中的1、2、3、4几个步骤,其实本质是你执行这个更新语句的时候干的事。
        然后上图中的5和6两个步骤,是从你提交事务开始的,属于提交事务的阶段了。

七、写入commit标记

        当我们把binlog写入磁盘文件之后,接着就会完成最终的事务提交,此时会把本次更新对应的binlog文件名称和这次更新的binlog日志在文件里的位置,都写入到redo log日志文件里去,同时在redo log日志文件里写入一个commit标记。
        在完成这个事情之后,才算最终完成了事务的提交,我们看下图的示意。

八、后台IO线程随机将内存更新后的脏数据刷回磁盘

         现在我们假设已经提交事务了,此时一次更新“update users set name='xxx' where id=10”,他已经把内存里的buffer pool中的缓存数据更新了,同时磁盘里有redo日志和binlog日志,都记录了把我们指定的“id=10”这行数据修改了“name='xxx'”。

        此时我们会思考一个问题了,但是这个时候磁盘上的数据文件里的“id=10”这行数据的name字段还是等于zhangsan这个旧的值啊!
        所以MySQL有一个后台的IO线程,会在之后某个时间里,随机的把内存buffer pool中的修改后的脏数据给刷回到磁盘上的数据文件里去,我们看下图:

当上图中的IO线程把buffer pool里的修改后的脏数据刷回磁盘的之后,磁盘上的数据才会跟内存里一样,都是name=xxx这个修改以后的值了!
        在你IO线程把脏数据刷回磁盘之前,哪怕mysql宕机崩溃也没关系,因为重启之后,会根据redo日志恢复之前提交事务做过的修改到内存里去,就是id=10的数据的name修改为了xxx,然后等适当时机,IO线程自然还是会把这个修改后的数据刷到磁盘上的数据文件里去的。

 

http://www.zhongyajixie.com/news/27424.html

相关文章:

  • 网站页面设计风格郑州seo方案
  • 数据分析网站域名注册平台有哪些
  • 杭州做网站的公司有哪些东莞网络营销信息推荐
  • 适合这手机浏览器主页的网站吉林网络seo
  • 帮别人做海报网站优化建议
  • 网站建设维护 知乎淘宝运营培训多少钱
  • 备案 网站名称怎么写山西太原百度公司
  • 徐州设计公司有哪些官网seo是什么
  • 顺德网站建设制作济南百度竞价代运营
  • 做英文网站的标准字体口碑推广
  • 惠州百优做网站小程序熊掌号网络营销特点
  • 在演示文稿上网站怎么做免费大数据分析网站
  • 树形菜单的网站代码企业培训机构排名
  • 小程序模板代码seo收录查询
  • 有没有人做网站搜索引擎优化百度百科
  • 做网站如何买量seo快速排名百度首页
  • b2c电子商务网站主要操作流程整站优化推广
  • 手机模版网站价格南京今日新闻头条
  • 怎么用python做网站网站优化培训
  • 成都动力无限科技有限公司做网站东莞seo计费管理
  • 网站首页地址是什么网络营销方法
  • 外国黄色网站在线网页制作网站
  • 深圳设计网站速成班生哥seo博客
  • 温州企业做网站枸橼酸西地那非片的作用及功效
  • 空投注册送币网站怎么做百度注册入口
  • 网站内怎么做搜索百度竞价托管运营
  • 中国制造网外贸平台下载成都搜索优化整站优化
  • 大连中小网站建设公司郑州网站建设推广
  • 教育网站建设 飞沐西地那非片吃了能延时多久
  • 狗和人做网站seo关键词挖掘工具