【高性能MySQL第3版】第8章 优化服务器设置
前言:
解释为mysql服务器创建一个靠谱的配置文件的过程,创建好配置的最快的方法是从理解mysql内核和行为开始,可利用这些知识知道配置mysql,最后将想要配置和当前配置比较,纠正重要且有价值的不同之处;
通常只需把基本项配置正确、更多时间放在schema优化、索引及查询设计上
8.1mysql配置的工作原理
配置机制:mysql从命令行和配置文件获得配置信息
清楚知道配置文件的位置,which mysqld
配置文件分成很多部分:每部分开头是用[]括起来的分段名称,程序读取同名分段
8.1.1语法、作用域、动态性
配置项设置使用小写,单词间下划线或横线,固定格式
作用域:服务器级别(全局作用域)、每个连接(会话)、对象级
很多会话级跟全局变量相等,默认值,改变会话级变量只影响当前连接
query_cache_siez全局
sort_buffer_size:全局、每个线程可设
join_buffer_size:全局默认,且线程可设,若一查询关联多张表,可为每个关联分配一个关联缓冲
show global variables查看全局设置是否生效
8.1.2设置变量的副作用
从缓存中刷新脏块、小心可在线更改的设置
不能总通过看名称猜测变量的效果
- key_bufer_size:一次性为键缓存区分配all指定的空间
- table_cache_size:延迟到下次有线程打开表,检查该量,大于缓存中表达数量、把最新打开的表放入缓存,小、删除不常有表
- thread_cache_size:下次有连接被关闭生效,连接被关闭,检查缓存是否有空间缓存线程,有、缓存该线程被下次用,无、销毁线程
- query_cache_size:启动时一次性分配初始化该内存,修改、立删all缓存的查询,重分到指定大小、初始化
- read_buffer_size:有查询需要使用才为该缓存分片内存,一次性分指定大小
- read_rnd_buffer_size:有查询需要才为该缓存分配内存,只分配需要的内存
- sort_buffer_size:查询需要做排序才为缓存分配指定大小
8.1.3入门
通监控确认生产环境中变量的修改是提高、降低了性能
配置文件中写好注释;配置文件置于版本控制之下;改变配置前,优化查询和schema
8.1.4通基准测试迭代优化
不建议;费要如此、开始配置服务前、开发定制基准测试包
一点点改、更改后运行基准测试、运行足够长时间确认性能是否稳定
8.2什么不该做
不要据一些‘比率’来调优
不要使用调优脚本、互联网搜索如何配置不总是一个好主意
不啊哟相信很流行的内存消耗公式:不可能非常准确把握内存消耗的上限
8.3创建配置文件
默认设置被设计成不使用大量的资源、有超过几MB的数据,需要定制配置
建议:不要使用这些建议作为起点,不要使用操作系统安装包自带的配置文件
大多数配置是最佳配置
决定使用某个存储引擎为默认,显示配置
更好的方法设置缓存池大小
- 从服务器内存总量开始
- 减去操作系统内存占用
- 减去mysql自身需要的内存
- 减去足够让操作系统缓存InnoDB日志文件的内存(至少二进制日志)
- 减去其他配置MySQL缓冲和缓存需要的内存:myisam键缓存、查询缓存
- 除以105%,差不多接近InnoDB管理缓冲池增加的自身管理开销
- 结果四舍五入,向下取合理的值
了解系统,估计需要多少内存
从比默认值大一点的安全值开始比较好,配置内存缓存池时,谨慎:内部做了什么、参数间如何相互影响、在决定配置
open_files_limit:典型linux系统上设置地尽可能大:否则将会碰到打开文件太多的24号错误
8.3.1检查mysql服务器状态变量
通过show global status输出作为配置输入,通过工作负载自定义配置
看绝对值、值如何随时间改变,为高峰和非高峰时间做几个快照
小结:
预热结束,接下来进入服务器内核的知识,并给出配置建议