【高性能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第3版】第8章 优化服务器设置

决定使用某个存储引擎为默认,显示配置

 

更好的方法设置缓存池大小

  • 从服务器内存总量开始
  • 减去操作系统内存占用
  • 减去mysql自身需要的内存
  • 减去足够让操作系统缓存InnoDB日志文件的内存(至少二进制日志)
  • 减去其他配置MySQL缓冲和缓存需要的内存:myisam键缓存、查询缓存
  • 除以105%,差不多接近InnoDB管理缓冲池增加的自身管理开销
  • 结果四舍五入,向下取合理的值

了解系统,估计需要多少内存

从比默认值大一点的安全值开始比较好,配置内存缓存池时,谨慎:内部做了什么、参数间如何相互影响、在决定配置

open_files_limit:典型linux系统上设置地尽可能大:否则将会碰到打开文件太多的24号错误

 

8.3.1检查mysql服务器状态变量

通过show global status输出作为配置输入,通过工作负载自定义配置

看绝对值、值如何随时间改变,为高峰和非高峰时间做几个快照

 

小结:

   预热结束,接下来进入服务器内核的知识,并给出配置建议