数据库MySQL调优实战经验总结

MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证。仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设置,才能够发挥 MySQL 的最大作用。下边的内容是我在工作中经验的总结,也作为自己的工作笔记,如果能够帮助到有需要的同志就更好了。MySQL 的优化可以从个方面来做:

一、架构层面

1、做主从复制。
2、实现读写分离。
3、分库分表。

二、系统层面

1、增加内存。
2、硬盘使用固态硬盘 SSD。
3、给磁盘做 raid0 或者 raid5 以增加磁盘的读写速度。
4、可以重新挂载磁盘,并加上 noatime 参数,这样可以减少磁盘的 I/O。

三、MySQL本身的优化

1、如果未配置主从同步,可以把 bin-log 功能关闭,减少磁盘 I/O。
2、在 my.cnf 中加上 skip-name-resolve ,这样可以避免由于解析主机名延迟造成 M有SQL 执行慢。
3、调整几个关键的 buffer 和 cache。调整的依据,主要根据数据库的状态来调试。如何调优可以参考
4、根据具体的使用场景,选择合适的存储引擎。

四、应用层次

查看慢查询日志,根据慢查询日志优化程序中的 SQL 语句,比如增加索引

五、调整关键的buffer和cache

1、key_buffer_size

首先可以根据系统的内存大小设定它,大概的一个参考值:1G以下内存设定 128M;2G/256M; 4G/384M; 8G/1024M;16G/2048M。这个值可以通过检查状态值 Key_read_requests 和 Key_reads,可以知道 key_buffer_size 设置是否合理。比例 key_reads / key_read_requests 应该尽可能的低,至少是 1:100,1:1000更好(上述状态值可以使用 SHOW STATUS LIKE 'key_read%' 获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!

2、table_open_cache

打开一个表的时候,会临时把表里面的数据放到这部分内存中,一般设置成 1024 就够了,它的大小我们可以通过这样的方法来衡量: 如果你发现 open_tables 等于 table_cache,并且 opened_tables 在不断增长,那么你就需要增加 table_cache 的值了(上述状态值可以使用 SHOW STATUS LIKE 'Open%tables' 获得)。注意,不能盲目地把 table_cache 设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

3、sort_buffer_size

查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每连接独占! 如果有 100 个连接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。所以,对于内存在 4GB 左右的服务器推荐设置为:4-8M。

4、read_buffer_size

读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!

5、join_buffer_size

联合查询操作所能使用的缓冲区大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!

6、myisam_sort_buffer_size

这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般 4G 内存给 64M 即可。

7、query_cache_size

MySQL查询操作缓冲区的大小,通过以下做法调整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下 4G 内存设置 64M 足够了。

8、thread_cache_size

表示可以重新利用保存在缓存中线程的数,参考如下值:1G  —> 8; 2G  —> 16; 3G  —> 32; 3G  —> 64
除此之外,还有几个比较关键的参数

9、thread_concurrency

这个值设置为 CPU 核数的2倍即可。

10、wait_timeout

表示空闲的连接超时时间,默认是:28800s,这个参数是和 interactive_timeout 一起使用的,也就是说要想让 wait_timeout 生效,必须同时设置 interactive_timeout,建议他们两个都设置为10。

11、max_connect_errors

是一个 MySQL 中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。与性能并无太大关系。为了避免一些错误我们一般都设置比较大,比如说10000。

12、max_connections

最大的连接数,根据业务请求量适当调整,设置 500 足够。

13、max_user_connections

是指同一个账号能够同时连接到 mysql 服务的最大连接数。设置为 0 表示不限制。通常我们设置为 100 足够。

----- 待更新 -----

作者:liwei0526vip 出处:http://www.cnblogs.com/liwei0526vip 欢迎转载,也请保留这段声明。谢谢!

数据库MySQL调优实战经验总结<转>的更多相关文章

  1. 数据库MySQL调优实战经验总结

    MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证.仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设置,才能够发挥 MySQL 的最大 ...

  2. MYSQL调优实战

    一:基础数据准备 DROP TABLE IF EXISTS `tbl_user`; CREATE TABLE `tbl_user` ( `id` ) NOT NULL AUTO_INCREMENT, ...

  3. MySQL数据库 | MySQL调优|MySQL底层原理|MySQL零基础新手教程

    MySQL数据库安装 一.Windows 环境下安装 A.下载 MySQL Select Operating System: Microsoft Windows 快捷下载:mysql-8.0.22-w ...

  4. 高性能 Java 计算服务的性能调优实战

    作者:vivo 互联网服务器团队- Chen Dongxing.Li Haoxuan.Chen Jinxia 随着业务的日渐复杂,性能优化俨然成为了每一位技术人的必修课.性能优化从何着手?如何从问题表 ...

  5. mysql数据库性能调优总结积累

    mysql数据库的调优大概可以分为四大块 0 架构调优 ---根据业务 读写分库分表   ---主从 读写分离 1 配置的调优 ---开启缓存查询  设置缓存大小 ---最大连接数设置 ---数据库引 ...

  6. MySQL 数据库规范--调优篇(终结篇)

    前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MyS ...

  7. MySQL 数据库性能调优

    MySQL 数据库性能调优 MySQL性能 最大数据量 最大并发数 优化的范围有哪些 存储.主机和操作系统方面: 应用程序方面: 数据库优化方面: 优化维度 数据库优化维度有四个: 优化选择: 数据库 ...

  8. JVM 性能调优实战之:一次系统性能瓶颈的寻找过程

    玩过性能优化的朋友都清楚,性能优化的关键并不在于怎么进行优化,而在于怎么找到当前系统的性能瓶颈.性能优化分为好几个层次,比如系统层次.算法层次.代码层次…JVM 的性能优化被认为是底层优化,门槛较高, ...

  9. Java虚拟机性能监控与调优实战

    From:  https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...

随机推荐

  1. C#视频拍照、视频录制项目示例

    1.AForge 2.WPFMediaKit 3.ffmpeg

  2. C++之拷贝控制 (Copy Control)

    只有2种成员 值成员: 指针成员: 依实现可分为raw pointer / shared_ptr; 现在,仅考虑第③种:资源对象共享 角度来考虑拷贝控制 类的两种语义:值语义.似指针 编译器提供的de ...

  3. 彻底理解javascript中的this指针

    http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ https://www.benn ...

  4. Spring MVC 复习

    概念 三层架构 将整个业务应用划分为三层 ​ 表现层:用来和客户端进行数据交互,一般采用MVC设计模式 ​ 业务层:处理公司具体业务逻辑 ​ 持久层:用来操作数据库 MVC模型 Model View ...

  5. dubbo循序渐进 - 什么是RPC

    RPC的核心并不在于使用什么协议.RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里.通过RPC能解耦服务,这才是使用RPC的真正目的.RPC的原理 ...

  6. JAVA - Windows下JDK自动设置脚本

    CMD窗口如果使用下面脚本代码出现乱码,则按照下文处理后,就可以了: https://www.cnblogs.com/sunylat/p/11308037.html @echo off echo ** ...

  7. mysql编译安装下载地址(官网)

    https://dev.mysql.com/get/Downloads/MySQL-version number/mysql-version number.tar.gz 把这个地址上面的版本号改成自己 ...

  8. mysql 查询当天数据

    查询当天数据 select * from tab where FROM_UNIXTIME(fabutime, '%Y%m%d') = 20121217;   mysql TO_DAYS(date) 函 ...

  9. ML-线性模型 泛化优化 之 L1 L2 正则化

    认识 L1, L2 从效果上来看, 正则化通过, 对ML的算法的任意修改, 达到减少泛化错误, 但不减少训练误差的方式的统称 训练误差 这个就损失函数什么的, 很好理解. 泛化错误 假设 我们知道 预 ...

  10. jmeter使用小结

    写这篇短文主要想详细介绍一下jmeter中取样器.逻辑控制器.前置处理器.后置处理器.定时器.配置元件等,可能看起来比较繁杂,其实里面很多操作是类似的,一篇总结和记录的博客: jmeter官方用户手册 ...