首页 > 其他分享 >怎么解决因全表扫描带来的 Buffer Pool 污染

怎么解决因全表扫描带来的 Buffer Pool 污染

时间:2024-03-25 20:35:37浏览次数:28  
标签:old 区域 Buffer young 访问 因全表 Pool

全表扫描这种情况的查询,很多缓冲页其实只会被访问一次,但是它却只因为被访问了一次而进入到 young 区域,从而导致热点数据被替换了

LRU 链表中 young 区域就是热点数据,只要我们提高进入到 young 区域的门槛,就能有效地保证 young 区域里的热点数据不会被替换掉

MySQL 是这样做的,进入到 young 区域条件增加了一个停留在 old 区域的时间判断.

具体是这样做的,在对某个处在 old 区域的缓存页进行第一次访问时,就在它对应的控制块中记录下来这个访问时间:

如果后续的访问时间与第一次访问的时间在某个时间间隔内,那么该缓存页就不会被从 old 区域移动到 young 区域的头部

如果后续的访问时间与第一次访问的时间不在某个时间间隔内,那么该缓存页移动到 young 区域的头部

如果后续的访问时间与第一次访问的时间不在某个时间间隔内,那么该缓存页移动到 young 区域的头部,这个间隔时间是由 innodb_old_blocks_time 控制的,默认是 1000 ms

也就说,只有同时满足「被访问」与「在 old 区域停留时间超过 1 秒」两个条件,才会被插入到 young 区域头部,这样就解决了 Buffer Pool 污染的问题

 

只要我们提高进入到 young 区域的门槛,就能有效地保证 young 区域里的热点数据不会被替换掉这句话该怎么理解,为什么设置 innodb_old_blocks_time 这个参数为 1 秒,能有效的避免因为全表扫描带来的 Buffer Pool 污染呢?

一个数据页中含有多条记录,因此全表扫描的情况下一个数据页会被访问多次,数据页的第一次访问和最后一次被访问的时间间隔一般不会超过 1 秒,这样它就不会被移动到 young 区域,导致 young 区域中的热点数据淘汰掉,这样就能避免因为全表扫描导致的 Buffer Pool 污染了

标签:old,区域,Buffer,young,访问,因全表,Pool
From: https://www.cnblogs.com/xiaomaomao/p/18095249

相关文章

  • 云盘复制:StableBit DrivePool Crack
    StableBitDrivePoolv2.3.6.1562具有文件复制功能的最先进的磁盘池应用程序。 2.3.2中的新功能ARM64支持在ARM64设备上本机运行。*通过虚拟化在具有AppleSilicon的Mac上运行。***本机ARM64支持需要ARM64兼容处理器和Windows1122H2或更高版本。本机执......
  • Java中String、StringBuffer、StringBuilder 的区别
    目录1.String2.StringBuffer3.StringBuilder4.使用情况如果帮助到你,别忘了点赞收藏关注String、StringBuffer和StringBuilder在Java中都用于处理字符串数据,但它们之间在功能和性能上有一些关键的区别:1.String不可变性:String类的对象是不可变的。每次对String对......
  • ForkJoinPool在生产环境中使用遇到的一个问题
    1、背景在我们的项目中有这么一个场景,需要消费kafka中的消息,并生成对应的工单数据。早些时候程序运行的好好的,但是有一天,我们升级了容器的配置,结果导致部分消息无法消费。而消费者的代码是使用CompletableFuture.runAsync(()->{while(true){.....}})来实现的。即:需要消......
  • Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)
    Lecture06Rasterization2(AntialiasingandZ-Buffering)Antialiasing反走样采样理论发生在不同位置(如照相)发生在不同时间(如动画)SamplingArtifacts(指图形学中的错误、看上去不对的地方、瑕疵)锯齿摩尔纹Wagonwheeleffect行进的车轮看起来似乎是向后转的......
  • BufferedInputStream详解
      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java之IO流啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~前言  在进行Java编程时,避免不了要进行一些文件操作。虽然Java提供了很多类......
  • 操作系统综合题之“按要求是个进程协调完成任务,补充完整下列程序,将编号①~⑩处空缺的
    1.问题:假设某系统有四个进程。input1和input2进程负责从不同设备读取数据,分别表示为data1和data2,存放在缓冲区Buffer中,output1和output2进程负责从Buffer中分别获取data1和data2。Buffer中每次只能存放一个数据。varempty,full1,full2:semaphore;empty.value=1;①_______;②______......
  • Excutors 与 ThreadPoolExcutor 的关系与区别
    先说结论。线程池的创建分为两种:ExecutorsThreadPoolExecutorExecutors是一个线程池的工具类,而ThreadPoolExecutor是Executors的具体实现。ThreadPoolExecutor是Executor接口的一个实现,是线程池的核心类。Executors工具类提供了很多方法来创建不同类型的线程池,比如......
  • Flume - [02] Spooling Directory Source
     一、概述  可以通过将文件放入磁盘上的"Spooldir"目录中来获取数据。此源会监视指定目录中的新文件,并在新文件出现时解析新文件中的事件。事件解析逻辑是可插入的。在将指定文件完全读取到通道后,默认情况下通过重命名文件来指示文件来指示完成,或者可以删除它,或者使用trac......
  • JAVA学习-NIO.Buffer(缓冲器)
        JavaNIO中的缓冲器(Buffer)是用来存储数据的对象。它是一个固定大小的数组,可以容纳特定类型的数据。一、JavaNIO中提供了7种类型的缓冲器,分别是:1.ByteBuffer:字节缓冲器,用来存储字节数据。2.CharBuffer:字符缓冲器,用来存储字符数据。3.ShortBuffer:短整型缓......
  • JAVA线程池ScheduledThreadPool实践教程
    ScheduledThreadPool用于在给定的延迟之后,或者定期执行任务。以下是如何在Java中实践使用ScheduledThreadPool的步骤:步骤1:创建ScheduledThreadPool首先,使用Executors的newScheduledThreadPool方法来创建一个ScheduledThreadPool。参数是你想要在池中保持的线程数量。i......