Rumah > pangkalan data > tutorial mysql > 详细介绍MySQL缓存分类和配置

详细介绍MySQL缓存分类和配置

迷茫
Lepaskan: 2017-03-26 11:31:17
asal
1405 orang telah melayarinya

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表的时候,就会缓存这个表的定义到数据字典,但是表关闭后并不会从缓存中移除

Atas ialah kandungan terperinci 详细介绍MySQL缓存分类和配置. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan