• lik
    2019-08-21
    这个专栏的综合质量真的很高, 不懂为什么订阅量这么少。
     1
     12
  • 张学磊
    2019-08-20
    通过在内存中维护一个链表,并使用LRU(最近最少使用)算法淘汰非热点数据

    作者回复: 对的,MySQL基于LRU算法来实现淘汰非热点数据,但与我们熟悉的LRU算法不同的是,MySQL新增了一个midpoint insertion startegy策略,就是默认情况下,读取到的新页并不是直接放入的LRU列表的首部,而是LRU列表长度的5/8处,目的是为了避免由于一些不常查询SQL偶尔一次查询就把之前热点数据淘汰的情况。

     2
     9
  • 晓杰
    2019-08-21
    mysql的缓冲池(buffer_pool)使用改进版的lru算法来缓存数据,如果使用传统的lru算法,会存在预读失效和缓冲池污染的问题,为了解决预读失效问题,mysql将lru分为新生代和老生代,为了解决缓冲池污染的问题,引入老生代停留时间窗口,只有大于设置的值,才能加入新生代头部

    作者回复: 解释的比我全面,赞

    
     6
  • 许童童
    2019-08-20
    我来回答一下思考题:
    InnoDB 的缓存淘汰策略是分代的,分为老年代和新生代,大致是7:3,新数据总是先加入到新生代,如果在一定时间内有被再次查询,才会进入到老年代。老年代和新生代内部都是LRU算法来淘汰缓存页的。

    作者回复: 👍

    
     3
  • LW
    2019-08-20
    IBP通过LRU链表管理热点数据和淘汰非热点数据,LRU本身分为两大区域,young区域和old区域,热点数据在young区,非热点数据在old区。其实LRU的划分还更细致,young区还划分成几个不同的区域。

    作者回复: 👍

    
     2
  • -W.LI-
    2019-08-20
    老师好!问个问题,这些IO操作,是同步阻塞,还是同步非阻塞啊?

    作者回复: 有不同的策略,可以实现同步和异步

     1
     2
  • 超威丶
    2019-08-20
    其实内存分配也是分了新老区,防止大量的历史数据数据的查询占用整个内存,热点数据缓存命中率降低,不止是LRU淘汰这么简单
    
     2
  • 晓杰
    2019-08-21
    mysql8.0已经没有用查询缓存了

    作者回复: 是的,MySQL8.0版本已经不支持查询缓存,我们文中也提到了其中的弊端。MySQL官方建议使用服务器端使用缓存或ProxySQL作为中间缓存。

    
     1
  • godtrue
    2019-09-15
    尴尬 MySQL 一直用不过自己到没怎么调整过他的配置参数,本地库没什么问题就是开发使用,生产库基本属于看不见摸不着的状态有专门的DBA来维护,OK,打卡,自己在本地也可以玩一把!
    
    
  • DY
    2019-09-11
    老师,你好。有个问题请教下。select id from order_detail where order_id between 5000 and 10000;这种sql根据索引查询,为什么当条件是=时不回表,是区间段时就回表。非聚簇索引的叶子结点存放的不是主键吗?怎么索引查询区间段时就回表了

    作者回复: 这个操作不会引起回表

     2
    
  • 张德
    2019-09-03
    记得好像是lru算法 新旧比例好像是5比3

    作者回复: 对的

    
    
  • 晓杰
    2019-08-21
    老师,redo log和bin log好像不是在更新语句提交事务成功就刷新到磁盘的。

    作者回复: redo log是根据innodb_flush_log_at_trx_commit参数来设置刷新到磁盘的策略。

    
    
我们在线,来聊聊吧