mysql缓冲池怎么调 mysql缓冲池 多大( 十 )


innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup这两个变量与性能无关,不过如果你偶尔重启mysql服务器(如生效配置),那么就有关 。当两个都激活时,MySQL缓冲池的内容(更具体地说,是缓存页)在停止MySQL时存储到一个文件 。当你下次启动MySQL时,它会在后台启动一个线程来加载缓冲池的内容以提高预热速度到3-5倍 。
两件事:
第一,它实际上没有在关闭时复制缓冲池内容到文件,仅仅是复制表空间ID和页面ID – 足够的信息来定位硬盘上的页面了 。然后它就能以大量的顺序读非常快速的加载那些页面,而不是需要成千上万的小随机读 。
第二,启动时是在后台加载内容,因为MySQL不需要等到缓冲池内容加载完成再开始接受请求(所以看起来不会有什么影响) 。
从MySQL 5.7.7开始,默认只有25%的缓冲池页面在mysql关闭时存储到文件,但是你可以控制这个值 – 使用innodb_buffer_pool_dump_pct,建议75-100 。
这个特性从MySQL 5.6才开始支持 。
13.INNODB_ADAPTIVE_HASH_INDEX_PARTS
如果你运行着一个大量SELECT查询的MySQL服务器(并且已经尽可能优化),那么自适应哈希索引将下你的下一个瓶颈 。自适应哈希索引是InnoDB内部维护的动态索引,可以提高最常用的查询模式的性能 。这个特性可以重启服务器关闭 , 不过默认下在mysql的所有版本开启 。
这个技术非常复杂,在大多数情况下它会对大多数类型的查询直到加速的作用 。不过,当你有太多的查询往数据库,在某一个点上它会花过多的时间等待AHI锁和闩锁 。
如果你的是MySQL 5.7,没有这个问题 – innodb_adaptive_hash_index_parts默认设置为8,所以自适应哈希索引被切割为8个分区,因为不存在全局互斥 。
不过在mysql 5.7前的版本,没有AHI分区数量的控制 。换句话说,有一个全局互斥锁来保护AHI,可能导致你的select查询经常撞墙 。
所以如果你运行的是5.1或5.6,并且有大量的select查询 , 最简单的方案就是切换成同一版本的Percona Server来激活AHI分区 。
14.QUERY_CACHE_TYPE
如果人认为查询缓存效果很好 , 肯定应该使用它 。好吧,有时候是有用的 。不过这个只在你在低负载时有用,特别是在低负载下大多数是读取,小量写或者没有 。
如果是那样的情况 , 设置query_cache_type=ON和query_cache_size=256M就好了 。不过记住不能把256M设置更高的值了,否则会由于查询缓存失效时,导致引起严重的服务器停顿 。
如果你的MySQL服务器高负载动作,建议设置query_cache_size=0和query_cache_type=OFF,并重启服务器生效 。那样Mysql就会停止在所有的查询使用查询缓存互斥锁 。
15.TABLE_OPEN_CACHE_INSTANCES
从MySQL 5.6.6开始,表缓存能分割到多个分区 。
表缓存用来存放目前已打开表的列表 , 当每一个表打开或关闭互斥体就被锁定 – 即使这是一个隐式临时表 。使用多个分区绝对减少了潜在的争用 。
从MySQL 5.7.8开始,table_open_cache_instances=16是默认的配置 。
欢迎做Java的工程师朋友们私信我资料免费获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,很值得大家借鉴和学习,扩展自己的技术广度和知识面 。
关于mysql缓冲池怎么调和mysql缓冲池 多大的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读