mysql5.7性能提升一百倍调优宝典( 五 )

  • interactive_timeout针对交互式连接,wait_timeout针对非交互式连接 。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项 。
  • show global variables like 'wait_timeout';1 timeout 只是针对空闲会话有影响 。
    2 session级别的wait_timeout继承global级别的interactive_timeout的值 。而global级别的session则不受interactive_timeout的影响 。
    3 交互式会话的timeout时间受global级别的interactive_timeout影响 。因此要修改非交互模式下的timeout,必须同时修改interactive_timeout的值 。
    4 非交互模式下,wait_timeout参数继承global级别的wait_timeout 。
    如果不配的后果:
    系统默认为28800
    配置实例:
    interactive_timeout = 600
    18)wait_timeout
    同interactive_timeout,两个值都设成一样 。
    19)read_buffer_size
    推荐设置:
    4194304
    作用:
    这个值其实轻易是用不到的,因为,它只对2种场景的full table scan产生影响而不是所有的full table scan,同时从mysql5.6以后开始没有数据块多块读的功能,与是否设置 read_buffer_size参数无关 。应用场景:
    1)SELECT INTO … OUTFILE ‘fileName‘
    2)When filesort is used, during merge buffers and when merged results are written to a temporary file, then writes are buffered
    一般保留默认:64k,保守作法是设置在1~4M,不过它的应用场景很有限,对于互联网场景真的不太用,我推荐设成4M
    如果不配的后果:
    默认为64k
    配置实例:
    read_buffer_size = 4194304
    20)read_rnd_buffer_size
    推荐设置:
    8388608
    作用:
    就是当数据块的读取需要满足一定的顺序的情况下,MySQL 就需要产生随机读取,进而使用到 read_rnd_buffer_size 参数所设置的内存缓冲区 。它的默认为256k,最大可以设到2G,它会对order by关键字起作用,当order by的计划成本超出了sort_buffer_size后,mysql会产用随机读取并消耗额外的内容,很多外面的博客说它是只对myisam引擎起作用,但其实不是,该参数还真的覆盖到所有引擎,一般它的推荐设置在8-16M,我推荐8M,根据sql分析计划如果碰到高频的查询且order by的返回包体都很大,那么再在session级别去放 。
    如果不配的后果:
    默认为256k
    配置实例:
    read_rnd_buffer_size = 8388608
    21)sort_buffer_size
    推荐设置:
    4194304
    作用:
    每个会话执行排序操作所分配的内存大小 。想要增大max_sort_length参数,需要增大sort_buffer_size参数 。如果在SHOW GLOBAL STATUS输出结果中看到每秒输出的Sort_merge_passes状态参数很大,可以考虑增大sort_buffer_size这个值来提高ORDER BY 和 GROUP BY的处理速度 。建议设置为1~4MB 。当个别会话需要执行大的排序操作时,在会话级别增大这个参数 。所谓会话级别,我举个例子,你拍脑袋一下,说我设个32M,你所它乘10,000请求,这得多大内存 。另外,千万要注意,在mysql内存,当你的sort_buffer_size在超过2K时在底层使用的是mmap()的c函数去做内存分配的,而不是malloc(),做过c的都知道mmap()是一个矢量单位,因此它会付出性能的影响,能影响多少呢?单条sql影响值在30% 。
    如果不配的后果:
    默认值为1M
    配置实例:
    sort_buffer_size =4194304
    22)innodb_page_size
    推荐设置:
    8192
    作用:
    1. 这个值可要小心,一般它在设置后就不能轻易改了,一般来说我们都认为,值越大越好,不是的,这个值它的原理是这样的:size越小,内存划分粒度越大,使用率越高,但是会有其他问题,就是限制了索引字段还有整行的大小 。innodb引擎读取内存还有更新都是一页一页更新的,这个innodb_page_size决定了,一个基本页的大小 。常用B+Tree索引,B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树) 。B+树中,所有记录的节点按大小顺序存放在同一层的叶子节点中,各叶子节点用指针进行连接 。MySQL将每个叶子节点的大小设置为一个页的整数倍,利用磁盘的预读机制,能有效减少磁盘I/O次数,提高查询效率 。如果一个行数据,超过了一页的一半,那么一个页只能容纳一条记录,这样B+Tree在不理想的情况下就变成了双向链表 。我们拿白话来说就是:你越大,空间利用率更高,但是越小呢越有助于性能但是这边一定一定有一个“但是”,但是小到一定的量反而性能不好,为什么呢?太大上面我已经举例了,太小 。。。mysql的页间的check point太频繁 。怎么样做才能达到一个合理值呢?


      推荐阅读