mysql参数调优

  • 为何要调整参数
    • 不同服务器之间的配置、性能不一样
    • 不同业务场景对数据的需求不一样
    • Mysql的默认参数只是个参考值,并不适合所有的应用场景
  • 优化之前我们需要知道什么
    • 服务器相关的配置
      • 服务器型号
      • 操作系统版本
      • 内核版本
      • 磁盘存储介质(sas sata ssd)
    • 业务相关的情况
      • 读多写少,读少写多
      • 业务数据增长量
    • mysql相关的配置
  • 服务器上需要关注那些
    • 硬件情况
      • cpu(几核、超线程)
      • 内存
      • 磁盘(容量、性能)
    • 操作系统版本(是否为稳定版)
    • CPU、网卡节电模式(建议数据库应用的服务器,关闭节电模式)
    • 服务器numa设置
    • RAID卡缓存
  • 磁盘调度策略-write back(回写)(宕机的话cache中数据,如果没有刷入磁盘,可能丢失)
    • 数据写入cache既返回,数据异步的从cache刷入存储介质
  • 磁盘调度策略-write through(安全但性能比write back低)
    • 数据同时写入cache和存储介质才返回写入成功
  • RAID
    • 生产环境里一般不太会用裸设备,通常会使用RAID卡对一个盘或多块盘做RAID
    • RAID卡会预留一块内存,来保证数据高效的存储与读取
    • 常见的RAID类型:RAID1、RAID0,RAID10、RAID5

    • RAID如何保证数据安全
    • BBU(backup battery unit)
      • BBU保证在WB策略下,即使服务器发生掉电或宕机,也能够将缓存中的数据写到磁盘,从而保证数据的安全
    • BBU损坏或没电了,这时如果宕机,cache中数据可能丢失。并且,调度策略会从WB->WT,这时数据库性能会瞬间下降。
  • Mysql注意事项
    • Mysql的部署安装
    • Mysql的监控(监控程序,及时报警保存错误现场)
    • Mysql参数调优
  • 部署Mysql的要求
    • 推荐Mysql版本>5.5
      • 推荐的Mysql存储引擎:innoDB(支持事务,支持宕机故障恢复等)
  • 系统调优的依据:监控
    • 实时监控Mysql的slow log
    • 实时监控数据库服务器的负载情况(IO、load、cpu利用率、网卡流量)
    • 实时监控Mysql内部状态值
      • Com_Select/Update/Delete/Insert(以判断数据库的请求是否变多)
      • Bytes_received/Bytes_sent(接收发送字节数,反映mysql总的吞吐量)
      • Buffer Pool Hit Rate(innoDB buffer区的命中率,直接反映性能)
      • Threads_connected/Treads_created/Threads_running(连接的状态,如果前两项特别多,可以看看应用是否使用连接池或者设置是否合理;)
  • Mysql参数调优
    • 读优化

      • 合理的利用索引对Mysql查询性能至关重要
      • 适当的调整Mysql参数也能提高查询性能
        • innodb_buffer_pool_size
          • innoDB存储引擎自己维护一块内存区域完成新老数据的替换
          • 内存越大越能缓存更多的数据
        • innodb_thread_concurrency(在5.5以后的版本,建议关闭)
          • innoDB内部并发控制参数,设置为0代表不做控制
          • 如果并发请求较多,参数设置较小,后进来的请求将会排队
    • 写优化
      • 表结果设计上使用自增字段作为表的主键
      • 只对合适的字段加索引,索引太多影响写入性能
      • 监控服务器磁盘IO情况,如果写延迟较大则需要扩容
      • 选择正确的mysql版本,合理的设置参数
        • innodb_flush_log_at_trx_commit && sync_binlog(写性能主要参数)
        • innodb log file size
        • innodb_io_capacity
        • innodb insert buffer
    • innodb_flush_log_at_trx_commit 控制redo日志的刷新
      • 控制innoDB事务的刷新方式,一共有三个值:0,1,2
        • N=0 每隔一秒,把事务日志缓冲区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上(高效,但不安全)
        • N=1 每个事务提交时候,把事务日志从缓冲区写到日志文件中,并且刷新日志文件的数据到磁盘上,优先使用此模式保障数据安全性(低效,非常安全)
        • N=2 每个事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度(高效,但不安全)
      • sync_binlog 控制innoDBbinlog日志的刷新
        • 控制每次写入binlog,是否都需要进行一次持久化
    • 保障事务的安全
      • innodb_flush_log_at_trx_commit 和sync_binlog都设为1
      • 事务要和binlog保证一致性
        innoDB中事务提交的过程
    • 串行的问题
      • SAS盘一般每秒只能有150-200个Fsync
      • 换算到数据库每秒只能执行50-60个事务
    • 社区和官方的改进
      • MariaDB提出改进,即使两个参数都是1也能做到合并效果,性能得到了大幅提升。
      • 官方吸收了MariaDB的思想,并在此基础上进行了改进,性能再次得到了提升
      • Tips:官方在5.6以后才有这个优化;Percona和MariaDB版本的mysql5.5已经包含了这个优化
    • InnoDB Redo Log
      • write ahead log
    • redo log的作用
      • 用于数据库崩溃后的故障恢复
    • redo log的问题
      • 如果写入频繁导致redo log里对应的最老的数据脏页还没有刷新到磁盘,此时数据库将卡住,强制刷新脏页到磁盘
      • Mysql默认配置两个文件才10M,非常容易写满,生产环境中应适当调整大小
    • innodb_io_capacity
      • innoDB每次刷多少个脏页,决定InnoDB存储引擎的吞吐能力。
      • 在SSD等高性能存储介质下,应该提高该参数以提高数据库的性能。
    • Insert Buffer(本质是把随机请求合并为顺序请求)
      • 5.1开始支持insert buffer
      • 5.5同时支持update和delete的merge
      • insert buffer只对二级索引且非唯一索引有效
  • 总结
    • 服务器配置要合理(内核版本、磁盘调度策略、RAID卡缓存)
    • 完善的监控系统,提前发现问题
    • 数据库版本要跟上,不要太新,也不要太老:
    • 数据库优化
      - 查询优化:索引优化为主,参数优化为辅
      - 写入优化:业务优化为主,参数优化为辅
时间: 2024-10-30 03:31:53

mysql参数调优的相关文章

MySQL · 参数优化 ·RDS MySQL参数调优最佳实践

前言 很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释: 哪一些参数不能修改,那一些参数可以修改: 这些提供修改的参数是不是已经是最佳设置,如何才能利用好这些参数: 哪些参数可以改 细心的用户在购买RDS的时候都会看到,不同规格能够提供的最大连接数以及内存是不同的,所以这一些产品规格的限制参数:连接数.内存用户是不能够修改的,如果内存或者连接数出现了瓶颈: 内存瓶颈:实例会出现OOM,然后导致主备发生切换 连接数瓶颈:应用不能新建立连接到数

RDS MySQL参数调优最佳实践

前言 很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释: 哪一些参数不能修改,那一些参数可以修改: 这些提供修改的参数是不是已经是最佳设置,如何才能利用好这些参数: 哪些参数可以改 细心的用户在购买RDS的时候都会看到,不同规格能够提供的最大连接数以及内存是不同的,所以这一些产品规格的限制参数:连接数.内存用户是不能够修改的,如果内存或者连接数出现了瓶颈: 内存瓶颈:实例会出现OOM,然后导致主备发生切换 连接数瓶颈:应用不能新建立连接到数

MapReduce任务参数调优

本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优. Hadoop的默认配置文件(以cdh5.0.1为例): core-default.xml hdfs-default.xml mapred-default.xml 说明: 在hadoop2中有些参数名称过时了,例如原来的mapred.reduce.tasks改名为mapreduce.job.reduces了,当然,这两个参数你都可以使用,只是第一个参数过时了. 1. 操作系统调优 增大打开文件数据和网络连接上

XGBoost参数调优完全指南(附Python代码)

简介 如果你的预测模型表现得有些不尽如人意,那就用XGBoost吧.XGBoost算法现在已经成为很多数据工程师的重要武器.它是一种十分精致的算法,可以处理各种不规则的数据. 构造一个使用XGBoost的模型十分简单.但是,提高这个模型的表现就有些困难(至少我觉得十分纠结).这个算法使用了好几个参数.所以为了提高模型的表现,参数的调整十分必要.在解决实际问题的时候,有些问题是很难回答的--你需要调整哪些参数?这些参数要调到什么值,才能达到理想的输出? 这篇文章最适合刚刚接触XGBoost的人阅读

CentOS下MySQL数据库调优

MySQL调优~学习研究中-- 不同的硬件导致MySQL等数据的性能,也会影响调优参数.

LAMP系统性能调优之MySQL服务器调优

如今,开发人员不断地开发和部署使用LAMP(Linux.Apache.MySQL 和 PHP/Perl)架构的应用程序.但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的.本文重点讨论为实现最高效率而对数据库层进行的调优. 关于 MySQL 调优 有3 种方法可以加快 MySQL服务器的运行速度,效率从低到高依次为: 替换有问题的硬件. 对MySQL进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解

jvm系列(六):Java服务GC参数调优案例

本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题.我个人特别喜欢这种实战类的内容,经原作者的授权同意,将文章分享于此.备注部分为本人添加,主要起到说明的作用. 原文出处:https://segmentfault.com/a/1190000005174819 背景以及遇到的问题 我们的Java HTTP服务属于OLTP类型,对成功率和响应时间的要求比

Mysql优化调优中两个重要参数table_cache和key_buffer_Mysql

本文根据作者的一点经验,讨论了Mysql服务器优化中两个非常重要的参数,分别是table_cache,key_buffer_size. table_cache指示表高速缓存的大小.当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容.一般来说,可以通过查看数据库运行峰值时间的状态值Open_tables和Opened_tables,用以判断是否需要增加table_cache的值,即如果open_tables接近t

15个你不知道的mysql性能调优参数介绍

1.DEFAULT_STORAGE_ENGINE 如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了.如果没有,确保把你的表转换为InnoDB并且设置default_storage_engine为InnoDB. 为什么?简而言之,因为InnoDB是MySQL(包括Percona Server和MariaDB)最好的存储引擎 – 它支持事务,高并发,有着非常好的性能表现(当配置正确时).这里有详细的版本介绍为什么 2.INNODB_BUFFER_PO