视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详细介绍MySQL缓存分类和配置
2020-11-09 09:05:26 责编:小采
文档


MySQL缓存分类

  InnoDB缓冲池
  InnoDB日志文件和MyIsAM数据的操作系统缓存
  MyIsAM键缓存
  查询缓存
  无法手工配置的缓存,二进制日志,表定义文件的操作系统缓存
  其它缓存,通常不需要太多内存

InnoDB缓冲池 
  作用:
    1.缓存的对象包括:数据行,索引,插入缓冲,锁,以及内部数据结构。
    2.利用缓冲池来版主延迟写入,可以合并多次写入,顺序写会(存储设备)
  相关参数:
    查询InnoDB缓冲池的大小,单位是字节
    show variables like 'innodb_buffer_pool_size';
    innodb_max_dirty_pages_pct变量影响脏页的数量,
    查看innodb_max_dirty_pages_pct的设置
    show variables like 'innodb_max_dirty_pages_pct'
    当脏页超过innodb_max_dirty_pages_pct指定的百分比之后,后台线程启动(快速刷写模式)将脏页刷写入磁盘
    MySQL内存不足时,有一个类似于sqlserver的lazywrite的后台线程定时将脏页刷新入磁盘,
    并且清理脏页占用的内存空间,给其他数据(需要载入内存的数据)使用。
    当事务日志没有空间的时候,InnoDB将进入激烈刷写模式,大日志可以提升性能的原因(?)
  预热缓冲区:
    可以理解成数据库启动的时候将数据从磁盘加载到缓存区中,以提升数据的访问性能
    两种预热缓冲区的方法
    1.Percina Server
    2.Init_file设置,也即启动后指定Init_file里面的sql,将sql语句中指定的数据写入缓冲区

MyisAM键缓存(key caches)
  作用:
    MyisAM键缓存又称键缓冲,MyisAM表只缓存索引不缓存数据,MyisAM键缓存就是缓存的索引
  相关参数:
    默认只有一个MyisAM键缓存(池)
    配置选项key_buffer_size
    设置key_buffer_size时参考索引的大小,key_buffer_size的值没必要设置的比索引更大
    或者不超过操作系统缓存保留总内存的25%-50%
    设置时参考索引字段的大小:select sum(index_length) from information_schema.`TABLES`
    mysql默认回将所有索引都换粗在默认键缓存中,
    每个MyisAM键缓存(池)有指定的大小,可以建多个key_buffer_size来缓存索引
    配置方法,在配置文件中加入
    key_buffer_1.key_buffer_size = 1G
    key_buffer_2.key_buffer_size = 1G
    加上默认的一个,一共有三个key_buffer_size
  指定索引到键缓存:
    缓存表的索引到指定缓冲区:cache index t1,t2 in key_buffer_1
    或者在init_file中配置
    LODA INDEX INTO CACHE t1,t2(被分配在默认缓冲区)
  键缓存使用率计算:
    100-((key_buffer_unused*key_cache_block_size)*100/key_buffer_size)
  其它:
    1.MyisAM使用操作系统内存来缓存数据,数据往往比索引要大,因此要预留更多的内存给操作系统缓存,而不是键缓存
    2.即使没有使用MyisAM表,依旧要设置key_buffer_size为一个较小的值(比如32M),mysql服务器可能在内部使用MyisAM表

线程缓存
  作用:
    当连接关闭后,释放的线程被缓存起来,处于备用状态,
    当有新的连接创建时,可以直接使用缓存中缓存的线程,以提高连接请求的效率
    不用为每个连接创建新的线程
  消费方式:
    新进来的连接从缓存中占用一个处于缓存状态的线程(被占用后从缓存中删除),
    当连接关闭后,如果线程缓存还有空间的话,将当前线程归还到缓存线程中,如果缓存线程没有空间,则销毁这个线程
  相关参数:
    thread_cache_size指定了缓存中可保存的线程的个数
    每个线程占用的内存空间为256kb左右,
    除非有非常高的并发访问,否则不应该,一般不需要配置这个值
    单位是缓存的线程的个数
    show variables like 'thread_cache_size'
    每个线程占用的内存空间为256kb左右,

表缓存
  作用:
    主要是跟MyisAM表有关,缓存的是表的.frm解析结果和一些其他数据,
    缓存之后就提高访问表的效率。对于MyIsAM表,表缓存之后可以避免修改MyisAM头文件来标记表正在被使用
    show variables like '%table_open_cache%';

InnoDB 数据字典表
  作用:  
    缓存InnoDB的表定义信息,
    每当打开一张InnoDB表的时候,就会缓存这个表的定义到数据字典,但是表关闭后并不会从缓存中移除

下载本文
显示全文
专题