• mysql5.7社区版性能优化浅谈


    最大连接数

    show variables like '%max_connections%';      最大连接数

     对于并发编程了解过的人知道,这个151不是越大越好,一般来说设置为 最大连接数 = cpu X 2 会比较合适, 因为受 IO 影响,连接数越大,反而越会占用IO,所以设置过大也可能导致性能降低。

     查询缓存

    show variables like '%query_cache_type%';     server层默认关闭缓存,缓存默认值 1 MB

     mysql8中query缓存已被废除。原因如下:

    1. 在每个缓存sql执行前,都要进入一个类似于synchronize同步锁,性能低。

    2. 缓存的查询中对于缓存命中的要求非常严格,需严格匹配 sql 语句的大小写、一个字符一个字符匹配,逐字节完全匹配的。

    3. 实际业务中,sql查询千变万化,缓存命中率低于98%,对于缓存来说,这个命中率是低的。

    所以在使用过程中利大于弊的情况。

    引擎选择

    InnoDB引擎

    innodb引擎的特点是处理大量的短事务。这也就是说我们使用该引擎就是希望尽可能的快,长事务是不适合innodb引擎的。

    MyISAM是mysql5.1版本以前默认的存储引擎,它提供了全文检索、压缩、空间函数等等,它不像innodb是行锁,MyISAM是表锁,如果你有特殊需求,比如使用空间函数。

    Perconna XtraDB引擎

    Perconna Server 和 MariaDB用的都是这个XtraDB引擎,这个引擎是对于InnoDB的改进版本引擎,在管理性和性能方面都比InnoDB要强。

    TokuDB引擎

    怎么改进B+tree?分型树 数据结构,每个树节点都自带缓存机制,来提高读写效率。

    TokuDB引擎进行了写优化,在写方面大大优于InnoDB, 而读方面是接近于InnoDB的。

    启动 MySQL 服务器程序

    在MNySQL 安装目录的 bin 目录下,有很多可执行文件。

    mysqld

    mysqld 这个可执行文件就代表着 MySOL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用。

    mysqld_safe

    mysqld safe 是一个启动脚本,它会间接的调用 mysqld,而且还顺便启动了一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。

    mysql.server

    mysql.server     也是一个启动脚本,它会间接的调用 mysqld_safe.

    mysql.server start      启动时添加参数start。该文件链接到support-files/mysql.server,间接的调用 mysqld_safe

    mysql.server stop      停止

    mysqld_multi

    一台计算机上也可以运行多个服务器实例,也就是运行多个 NySQL服务器进程。可执行文件可以对每一个服务器进程的启动或停止进行监控。

    参数的查看和修改
    以参考 MySQL 官方手册:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
    参数可以分为两类:动态(dynamic)参数和静态(static)参数,同时从作用范围又可以分为global全局变量和session会话变量。
    动态参数意味着可以在 MySQL 实例运行中进行更改,静态参数说明在整个实例生命周期内都不得进行更改。
    参数更改语句示例:
    set global datadir='/usr/xxxxxx';             show variables like 'datadir';
    set session system_var_name=xxx
    set @@global.system_var_name=xxx
    set @@session.system_var_name=xxx

    show variables like 'log_error';                 error log file location, we can change it in "my.cnf" configuration file.

    show variables like '%slow%';                  slow sql log file location.

    MySQL 所有动态变量的可修改范围,可以参考 MySQL 官方手册的 Dynamic System Variables 的相关内容:
    https://dev.mysql.com/doc/refman/5.7/en/dynamic-system-variables.html

    show engines; 查看当前mysql server所有的存储引擎
    show variables like '%storage_engine%'; 查看当前mysql 默认的存储引擎

    日志文件
    常见的日志文件有:错误日志(error log)、慢查询日志(slow query log)、
    查询日志(query log)、二进制文件(bin log)。还有redo 日志、Undo 日志等等。
    【错误日志】
    错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录。当 MySQL 不能正常启动时,可以找该错误日志文件,该文件记录了错误信息。
    show variables like 'log_error'; we can find the error log file location by this sql.
    【慢查询日志】
    慢查询日志可以帮助定位可能存在问题的 SQL 语句,从而进行 SQL 语句层面的优化。
    【查询日志】
    查询日志记录了所有对 MySQL 数据库请求的信息,无论这些请求是否得到了正确的执行。
    默认文件名:主机名.log 从MySQL 5.1 开始,可以将查询日志的记录放入 mysql 架构下的 general_log表
    【二进制日志(binlog)】
    二进制日志记录了对 MySQL 数据库执行更改的所有操作。
    二进制日志的几种作用:
    恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制文件进行 point-in-time 的恢复
    复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的 MySQL 数据库(一般称为 slave 或 standby)与一台 MySQL 数据库(一般称为 master 或 primary)进行实时同步
    审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击
    log-bin 参数,默认为关闭,可以在 MySQL 的配置文件中指定如下的格式:
    log-bin=name; "name"为二进制日志文件的名称(name 可省略)。默认的日志文件名:文件名为主机名,后缀名为二进制日志的序列号。且文件保存在数据库所在的datadir目录下
    配置以后,就会在数据目录下产生类似于:
    bin_log.00001 即为二进制日志文件;
    bin_log.index 为二进制的索引文件;
    二进制日志文件在默认情况下未开启,需要手动指定参数来启动。开启这个选项会对 MySQL 的性能下降 1%
    【Canal log-bin】
    ali 专门开源了这个技术,用于从mysql的bin log里读取数据到第三方媒介比如Elastic

    end.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    set, unordered_set模板类
    C/C++ Bug记录
    win10远程连接
    C/C++缓冲区刷新问题
    hihocoder1711 评论框排版[并查集+set]
    makefile
    Virtual Table
    粤语
    xilinx SDK开发 GPIO使用API总结
    基于zynq 7020的串口UART中断实验
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/14824420.html
Copyright © 2020-2023  润新知