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

InnoDB缓冲池 (innodb_buffer_pool_size)
  作用:
    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语句中指定的数据写入缓冲区
	InnoDB缓冲池越大,与预热和和脏页刷新会时间越久。
	
MyisAM键缓存(key caches) (key_buffer_size)
  作用:
    MyisAM键缓存又称键缓冲,MyisAM表只缓存索引不缓存数据,MyisAM键缓存就是缓存的索引, 数据缓存依赖于操作系统, 和键缓存没有关系。
  相关参数:
    默认只有一个MyisAM键缓存(池)
    配置选项key_buffer_size
    设置key_buffer_size时参考索引的大小,key_buffer_size的值没必要设置的比索引更大, 或者不超过操作系统缓存保留总内存的25%-50%
    设置时参考索引字段的大小: select sum(index_length) from information_schema.`TABLES` where `ENGINE`='MYISAM';
    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)
  作用:
    当连接关闭后,释放的线程被缓存起来,处于备用状态,
    当有新的连接创建时,可以直接使用缓存中缓存的线程,以提高连接请求的效率,不用为每个连接创建新的线程
  消费方式:
    新进来的连接从缓存中占用一个处于缓存状态的线程(被占用后从缓存中删除),
    当连接关闭后,如果线程缓存还有空间的话,将当前线程归还到缓存线程中,如果缓存线程没有空间,则销毁这个线程
  相关参数:
    show variables like 'thread_cache_size'  指定了缓存中可保存的线程的个数
    太高的缓存数, 操作系统不能处理, 大部分处于休眠状态; 太低的缓存数, 会导致线程的频繁创建和销毁, 一般使用默认配置就可以了, 除非有非常高的并发访问, 增加缓存数, 提升访问效率。
    单位是缓存的线程的个数, 每个线程占用的内存空间为256kb左右

表缓存
  mysql表缓存包含
			打开表的缓存(table_open_cache) :解析 .frm 文件的结果、 包含一些其他数据, 其数据是每个线程、表使用的。
			定义表的缓存(table_definition_cache) : 是表的定义, 是全局的、可以被所有连接共享的, 最好是在内存充足, 数量不是特别大时, 缓存所有表的定义。
		
InnoDB 数据字典表
  作用:  
    缓存InnoDB的表定义信息或者数据字典
    每当打开一张InnoDB表的时候,就会缓存这个表的定义到数据字典,但是表关闭后并不会从缓存中移除