MySQL数据库简单优化

发布于 2019-11-19  293 次阅读


01.数据库优化原则:

不影响业务稳定新和可持续性,然后再是性能;
优化则要变更,变更即是风险。

02.优化维度

硬件–>主机资源–>系统配置–>应用–>表结构–>SQL索引–>架构

03.逻辑结构

每个虚线框为一层,总共三层。
第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。
第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。
第三层,存储引擎层,不光做存储和提取数据,而且针对特殊数据引擎还要做事务处理。

04.数据库层优化

优化工具使用:

mysqlshow         功能强大的查看shell命令
show [SESSION | GLOBAL] variables          查看数据库参数信息
SHOW [SESSION | GLOBAL] STATUS          查看数据库的状态信息
information_schema          获取元数据的方法
SHOW ENGINE INNODB STATUS Innodb         引擎的所有状态
SHOW PROCESSLIST          查看当前所有连接session状态
explain          获取查询语句的执行计划
show index          查看表的索引信息
slow-log          记录慢查询语句
mysqldumpslow          分析slowlog文件的
mysqlslap          分析慢日志

05.数据库参数:

实例层:

thread_concurrency    # 并发线程数量个数
sort_buffer_size      # 排序缓存
read_buffer_size      # 顺序读取缓存
read_rnd_buffer_size  # 随机读取缓存
key_buffer_size       # 索引缓存
thread_cache_size     # (1G—>8, 2G—>16, 3G—>32, >3G—>64)

连接层:

max_connections       # 最大连接数,看交易笔数设置
max_connect_errors    # 最大错误连接数,能大则大
connect_timeout       # 连接超时
max_user_connections  # 最大用户连接数
skip-name-resolve     # 跳过域名解析
wait_timeout          # 等待超时
back_log              # 可以在堆栈中的连接数量

innodb存储引擎层:

default-storage-engine
innodb_buffer_pool_size # 没有固定大小,50%测试值,看看情况再微调。但是尽量设置不要超过物理内存70%
innodb_file_per_table=(1,0)
innodb_flush_log_at_trx_commit=(0,1,2) # 1是最安全的,0是性能最高,2折中
binlog_sync
Innodb_flush_method=(O_DIRECT, fdatasync)
innodb_log_buffer_size # 100M以下
innodb_log_file_size # 100M 以下
innodb_log_files_in_group # 5个成员以下,一般2-3个够用(iblogfile0-N)
innodb_max_dirty_pages_pct # 达到百分之75的时候刷写 内存脏页到磁盘。
log_bin
max_binlog_cache_size # 可以不设置
max_binlog_size # 可以不设置
innodb_additional_mem_pool_size #小于2G内存的机器,推荐值是20M。32G内存以上100M