MySQL缓冲

关于InnoDB和MyISAM的缓冲机制

配置InnoDB的缓冲池

  • 缓冲块的管理
    InnoDB对于缓冲的管理是LRU算法
    InnoDB将所有的缓冲块都组织成一条链表,前一部分为新表,后一部分为旧表,当一块缓冲块被新加入的时候,就会插入新表与就表的交界处,也就是中间,新表的末尾,旧表的起始位置。当缓冲块被使用到的时候,就把该缓冲块移动到链表的头部。随着时间的推移,没有使用到的缓冲块就会向后移动,而末尾的缓冲块被移除,然后被回收

  • 配置参数

    • innodb_buffer_pool_size
      该参数配置分配给缓冲区的大小。InnoDB在进行每次查询的时候都会首先去查询内存里面的缓冲,如果缓冲不命中才会从磁盘里面载入数据。所以这个缓冲区越大,访问速度就越快,默认128M
    • inoodb_buffer_pool_instances
      该参数配置缓冲池的个数,默认为1。在inndb_buffer_pool_size中配置了分配的缓冲区大小之后会被分成inoodb_buffer_pool_instances个缓冲池,每个缓冲池的大小为inndb_buffer_pool_size/inoodb_buffer_pool_instances。当这个缓冲池个数越多的时候,在多线程的环境下可以减少竞争。
    • innodb_old_blocks_pct
      该参数配置旧表的位置,这是一个百分数,它决定了前百分之几是新表,后百分之几是旧表。
    • innodb_old_blocks_time
      该参数配置了当缓冲块第一次被访问时,需要等多久才移动到连表头去。默认值为0,也就是意味着,当缓冲块第一次被访问的时候就会立即被移动到表头。

配置MyISAM的缓键缓冲区

其实对于MyISAM这种直接使用了OS文件系统的引擎来说,缓冲区不需要我们太多插手的,检查缓冲是否命中,是否要从磁盘中载入数据,这都是OS自动管理的。为了处理索引文件,MyISAM维护了一个键缓冲区,用于执行给予索引的排序和检索操作,以及索引的创建和修改操作。MyISAM的缓存机制有以下几点

  • 可以使用默认的单个键缓存(某个时刻缓冲区内只存在单个键),也可以使用多个键缓存
  • 可以控制缓存总大小和缓存快大小以及缓冲区丢弃算法
  • 可以将表分配给某些特定的缓存,并且将表索引预加载到其中的某个缓存当中

使用查询缓存

查询缓存就是将曾经执行过的语句之结果缓存起来,等到再次执行这条语句的时候,就不会真正去再次执行了,而是直接从缓冲区中去除上回执行的结果来。查询缓存的几个特点

  • 某条给定的SELECT语句在第一次执行的时候,服务器会记住它执行的结果,直到下次再次遇到这条语句的时候就会直接去除结果,而不是真正再执行一遍
  • 查询缓存是以服务器接收到的字符串作为Key值的,也就意味着,当字符编码或者大小写不同的时候,查询缓存是不会按照我们期待的方式执行的
  • 如果某个值的返回结果是不确定的,也就是说在没有执行修改语句的情况下,每次查询出来的结果都是未知的,那么这个结果就不会被缓存,例如Now函数的返回值就不会被缓存,因为它会随着时间的推移而发生变化。

配置参数

  • qurey_cache_type
    该参数设置了缓存模式,可选模式如下表所示

模式

含义

0

不缓存查询结果,不检索缓存结果

1

将可缓存的结果缓存起来,除了SQL_NO_CACHE开头的以外

2

只将SQL_CACHE开头的那些查询结果缓存起来
  • query_cache_size
  • query_cache_limit
    该参数设置了查询结果集的大小限制,如果查询结果集大小大于该值,结果不会被缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值