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

网站英文联系我们企业快速建站都有哪些技巧呢

网站英文联系我们,企业快速建站都有哪些技巧呢,怎样开网站卖东西,搜索视频 网站开发Mysql 中数据是要落盘的#xff0c;这点大家都知道。读写磁盘速度是很慢的#xff0c;尤其和内存比起来更是没的说。但是#xff0c;我们平时在执行 SQL 时#xff0c;无论写操作还是读操作都能很快得到结果#xff0c;并没有预想中的那么慢。可能你会说我有索引啊#x… Mysql 中数据是要落盘的这点大家都知道。读写磁盘速度是很慢的尤其和内存比起来更是没的说。但是我们平时在执行 SQL 时无论写操作还是读操作都能很快得到结果并没有预想中的那么慢。可能你会说我有索引啊有索引当然快了。但是铁子索引文件也是存储在磁盘上的查找过程会产生磁盘 I/O。如果同时对某行数据进行多次操作那岂不是要重复产生很多次磁盘 IO 吗可能你想到了那我把数据存在内存里不就可以了吗内存速度比磁盘快这准没毛病。没错那该怎么存呢? 这就是我们今天所要讲的主题——缓冲池(buffer pool)。各位看官请跟我来~- 思维导图 -初识缓冲池上边我们提到过了执行 SQL 对某一行进行操作时总不能每次都直接进行磁盘操作吧。好歹有个缓冲地带不然每次都深入老巢这谁受得了。这不缓冲池就应运而生了简单来说就是一块内存区域。它存在的原因之一是为了避免每次都去访问磁盘把最常访问的数据放在缓存里提高数据的访问速度。了解了它的作用接下来让我们先来看下缓冲池在整个 Mysql 架构里处于什么样的地方有一个宏观的认识。我们再来看看它的内部组成部分。在缓冲池中除数据页和索引页外还有多种类型缓冲池的应用缓冲池你也了解了可能此时你最关注的是它在 SQL 执行时起了一个什么样的作用。上篇文章中我们简单的提到过一条 SQL 语句的执行过程但并未涉及到缓冲池相关的问题。这期我们仍是以一条 SQL 来作为切入点。当一条 SQL 执行的时候如果是读操作要查找的数据所在的数据页在内存中时则将结果返回。否则会把对应的数据页加载到内存中然后再返回结果。同样对于写操作来说。如果要修改的行所在的数据页在内存中则修改后返回对应的结果(当然还有后续操作)。如果不在的话则会从磁盘里将该行所对应的数据页读到内存中再进行修改。好了现在让我们回到开始时候的问题。为什么操作磁盘慢但是 SQL 执行却不慢呢。到这里相信你也差不多知道了吧。缓冲池的存在很大程度减少了磁盘 I/O 带来的开销。要操作的数据行所在的数据页如果存在于缓存中的话就不需要从磁盘中进行读取。这样在执行后就可以很快拿到结果。缓冲池的预读机制我们可以看出来只要不存在或减少磁盘 I/O执行速度自然就会变快。那么对于加载数据页这种无法避免的磁盘 I/O 来说是否有更好的方式呢既然避免不了那减少磁盘 I/O 的次数总可以吧这就是我们要讲的 Mysql 中「预读」的新特性它是 Innodb 通过在缓冲池中提前读取多个数据页来优化 I/O 的一种方式。因为磁盘读写的时候是按照页的方式来读取的(你可以理解为固定大小的数据例如一页数据为 16K)每次至少读入一页的数据如果下次读取的数据就在页中就不用再去磁盘上读取了从而减少了磁盘 I/O。可以在命令行通过如下命令查看对应的页大小缓冲池的空间管理你可能会有疑问缓冲池这么洋气的东西为什么不把所有的数据都放到缓冲池里呢这样速度岂不是美滋滋放到磁盘里慢的跟老牛拉车一样。哎哥醒醒抛开内存的易失性不谈缓冲池也是有大小限制的。那你可能又有疑惑了既然缓冲池有大小限制那我每次都读入的数据页怎么来管理呢。别的数据页都占了地儿了哪有我的位置这里我们来聊聊缓冲池的空间管理其实对缓冲池进行管理的关键部分是如何安排进池的数据并且按照一定的策略淘汰池中的数据保证池中的数据不“溢出”同时还能保证常用数据留在池子中。传统 LRU 淘汰法缓冲池是基于传统的 LRU 方法来进行缓存页管理的我们先来看下如果使用 LRU 是如何管理的。LRU全称是 Least Recently Used中文名字叫作「最近最少使用」。从名字上就很容易理解了。这里分两种情况(1)缓存页已在缓冲池中这种情况下会将对应的缓存页放到 LRU 链表的头部无需从磁盘再进行读取也无需淘汰其它缓存页。如下图所示如果要访问的数据在 6 号页中则将 6 号页放到链表头部即可这种情况下没有缓存页被淘汰。(2)缓存页不在缓冲池中缓存页不在缓冲中这时候就需要从磁盘中读入对应的数据页将其放置在链表头部同时淘汰掉末尾的缓存页如下图所示如果要访问的数据在 60 号页中60 号页不在缓冲池中此时加载进来放到链表的头部同时淘汰掉末尾的 17 号缓存页。是不是看上去很简单同时也能满足缓冲池淘汰缓存页的方法但是我们来思考几个问题预读失效上面我们提到了缓冲池的预读机制可能会预先加载相邻的数据页。假如加载了 20、21 相邻的两个数据页如果只有页号为 20 的缓存页被访问了而另一个缓存页却没有被访问。此时两个缓存页都在链表的头部但是为了加载这两个缓存页却淘汰了末尾的缓存页而被淘汰的缓存页却是经常被访问的。这种情况就是预读失效被预先加载进缓冲池的页并没有被访问到这种情况是不是很不合理。缓冲池污染还有一种情况是当执行一条 SQL 语句时如果扫描了大量数据或是进行了全表扫描此时缓冲池中就会加载大量的数据页从而将缓冲池中已存在的所有页替换出去这种情况同样是不合理的。这就是缓冲池污染并且还会导致 MySQL 性能急剧下降。冷热数据分离这样看来传统的 LRU 方法并不能满足缓冲池的空间管理。因此Msyql 基于 LRU 设计了冷热数据分离的处理方案。也就是将 LRU 链表分为两部分一部分为热数据区域一部分为冷数据区域。当数据页第一次被加载到缓冲池中的时候先将其放到冷数据区域的链表头部1s(由 innodb_old_blocks_time 参数控制) 后该缓存页被访问了再将其移至热数据区域的链表头部。可能你会有疑惑了为什么要等 1s 后才将其移至热数据区域呢你想想如果数据页刚被加载到冷数据区就被访问了之后再也不访问它了呢这不就造成热数据区的浪费了吗要是 1s 后不访问了说明之后可能也不会去频繁访问它也就没有移至热缓冲区的必要了。当缓存页不够的时候从冷数据区淘汰它们就行了。另一种情况当我的数据页已经在热缓冲区了是不是缓存页只要被访问了就将其插到链表头部呢不用我说你肯定也觉得不合理。热数据区域里的缓存页是会被经常访问的如果每访问一个缓存页就插入一次链表头那整个热缓冲区里就异常骚动了你想想那个画面。那咋整呢Mysql 中优化为热数据区的后 3/4 部分被访问后才将其移动到链表头部去对于前 1/4 部分的缓存页被访问了不会进行移动。好了到这里关于 buffer pool  的知识就讲完了。这期里我们讲了 buffer pool 能使 SQL 执行变快的原因同时还讲了有关 buffer pool 空间的管理方式。欢迎在留言区里进行讨论。总结缓冲池的应用缓冲池很大程度减少了磁盘 I/O 带来的开销通过将操作的数据行所在的数据页加载到缓冲池可以提高 SQL 的执行速度。缓冲池的预读机制为了减少磁盘 I/OInnodb 通过在缓冲池中提前读取多个数据页来进行优化这种方式叫作预读。缓冲池的空间管理传统的LRU方法对于缓冲池来说会导致预读失效和缓冲池污染两种情况因此这种传统的方式并不适用缓冲池的空间管理。基于对 LRU 方法的优化Msyql 设计了冷热数据分离的处理方案将LRU链表分为热数据区和冷数据区两部分这样就可以解决预读失效和缓冲池污染的情况。欢迎关注微信公众号【面试造火箭】回复「888」即可获取网盘地址欢迎添加我的私人微信进一步交流和学习也可以来一场朋友圈点赞之交如果显示频繁微信手动搜索【sanwaiyihao】添加即可
http://wiki.neutronadmin.com/news/178786/

相关文章:

  • 好的网站特点百事通做网站
  • 婚介 东莞网站建设苏州园区
  • 海口制作网站软件东莞市建设规划局网站
  • 西安做网站需要多少钱全网推广
  • 做网站时搜索的代码是什么wordpress ssh
  • 沈阳建设厅官方网站wordpress 餐饮主题
  • 招聘网站费用怎么做分录杭州互联网网站公司
  • 网站建设验收合格确认书怎么找网站开发公司
  • 网站建设微信运营销售电商商城网站建设方案
  • 厦门园网站忱建设用别人公司名字做网站违法么
  • 毕业设计报告网站开发做医疗器械网站
  • 网站代备案公司名称网页制作公司报价谈判方案
  • dedecms5.7装饰公司网站模板潍坊 营销型网站建设
  • 怎样上传自己的网站wordpress页面里可不可以写php
  • 哈尔滨营销型网站建设公司青岛网页搜索排名提升
  • 湛江企业网站建设公司购物网站 建站服务
  • 广州网站建设互广广州开发网站设计
  • 公司商城网站开发费做什么科目做配资网站多少钱
  • 网站系统怎么建设在线制作logo模板
  • 如何做cad图纸模板下载网站wordpress栏目列表页
  • 便利的邯郸网站建设网站开发+协作平台
  • 肇庆市住房和城乡建设部网站网站建设地图素材
  • 微网站免费企业网站如何宣传
  • 和田地网站seo个性定制
  • 企业网站的设计策划怎么看网站是否备案成功
  • php 开源的企业网站潍坊昌乐县城乡建设局网站
  • 家具网站开发报告装修网站vr全景图怎么做
  • 英文网站名需要斜体吗动漫制作专业认知报告
  • 为什么公司的网站打不开网站如何申请微信支付接口
  • 网站导航提交入口大全西城做网站