前言

我的数据库版本是5.7.23,最近发现执行SQL越来越慢,一条SQL语句执行需要将近30s。

对于原因,查询资料, https://www.cnblogs.com/qwangxiao/p/8921196.html一文中写道:

导致SQL执行慢的原因:

1. 硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。

我查询内存、磁盘利用率如下:

2. 没有索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引的树结构就不完整了。所以互联网公司的数据做的是假删除.一是为了做数据分析,二是为了不破坏索引 )

我们所有数据都是做的假删除,索引也建了的。

3. 数据过多(分库分表)

数据量确实比较大,所以我们也是选择的分表。

4. 服务器调优及各个参数设置(调整my.cnf)

调整参数innodb_buffer_pool_size

  以上三点,检查基本过关,那就只剩最后一点了,对应调整my.cnf的参数,我首先想到的是innodb_buffer_pool_size ,对于这个参数https://blog.csdn.net/kk185800961/article/details/79378313/一文中提到:用于缓存 索引 和 数据的内存大小, 这个当然是越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写。 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。然而内存还有操作系统或数据库其他进程使用, 一般设置 buffer pool 大小为总内存的  3/4 至 4/5。

  并提出:较优设置:假设系统内存 = 128 GB, buffer pool 大小预计100GB(128GB*80%)

innodb_buffer_pool_instances = 8                #默认值,或者逻辑CPU数量
innodb_buffer_pool_chunk_size = 128MB    #默认值
innodb_buffer_pool_size = 100 GB               # N*8*128MG = N GB ,N 刚好为正整数。设 N=100使得 buffer pool 为总内存的 3/4 至 4/5。

  我的服务器逻辑CPU数量为4,内存是15G。

 cat /proc/cpuinfo | grep "processor" |wc -l
free -h

当前innodb_buffer_pool_instances = 1,innodb_buffer_pool_chunk_size 和innodb_buffer_pool_size =134217728,也就是128M。

我将上面的参数都提高4倍。

  SET GLOBAL innodb_buffer_pool_size=536870912‬;
SET GLOBAL innodb_buffer_pool_chunk_size =536870912‬;
SELECT
@@innodb_buffer_pool_instances,
@@innodb_buffer_pool_chunk_size,
@@innodb_buffer_pool_size

看到SQL执行快了7s

于是我继续改配置:

这时速度提升了一半。后经过反复测试,发现以下配置,速度最快,所以三个参数最终的的配置(/etc/my.cnf里)是:

innodb_buffer_pool_size = 1280M
innodb_buffer_pool_chunk_size= 1280M
innodb_buffer_pool_instances=1

开启独立空间参数global innodb_file_per_table

    SET global innodb_file_per_table=1;

开启之后,快了一点点

其他优化,参考:

https://www.cnblogs.com/erisen/p/6068265.html

mysql5.7.23性能调优之innodb_buffer_pool_size的更多相关文章

  1. MySQL5.6版本性能调优my.cnf详解

    [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir  ...

  2. mysql5.6-5.7性能调优

    1.DEFAULT_STORAGE_ENGINE 如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了.如果没有,确保把你的表转换为InnoDB并且设置d ...

  3. (转)MySQL性能调优my.cnf详解

    MySQL性能调优my.cnf详解 https://blog.linuxeye.cn/379.html http://blog.csdn.net/orichisonic/article/details ...

  4. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  5. MySql(十):MySQL性能调优——MySQL Server性能优化

    本章主要通过针对MySQL Server( mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优 ...

  6. MySQL管理之道:性能调优、高可用与监控》迷你书

    MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎2.充分利用CPU多核处理能力3.提高刷写脏页数量和合并插入数量,改善I/O4. ...

  7. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  8. MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

    第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...

  9. MySQL性能调优与架构设计——第4章 MySQL安全管理

    第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...

随机推荐

  1. 用eclipse怎么打war包?

    用eclipse怎么打war包? 在服务器上部署很多都是用war包进行部署的,eclipse是很友好的支持把java项目打成war包的,下面就把打war的经验写出来,供大家参考 百度经验:jingya ...

  2. Java实现文件上传-按钮弹出上传页面

    转自: https://blessht.iteye.com/blog/1405057 最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common- ...

  3. MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

    先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用Maven创建的,没有使用Mave ...

  4. 关于cron4j的使用

    cron4j的主要实体是调度程序.使用it.sauronsoftware.cron4j.scheduler实例,您可以在一年中的固定时间执行任务.调度程序可以每分钟执行一次任务,每五分钟执行一次,星期 ...

  5. 十一、Boostrap-X-editable

    一.官网 http://vitalets.github.io/x-editable/index.html 二.实践 在jQuery中ajax配置项中的使用type与method的区别: type 和m ...

  6. Codeforces Round #427 (Div. 2) - C

    题目链接:http://codeforces.com/contest/835/problem/C 题意:在二维坐标里,有n个星星,m个询问,星星的最大亮度c.然后输入n个星星的坐标和初始亮度,对于每个 ...

  7. At grand 022 GCD序列构造 dp/floyd二进制变换最少费用

    A diverse words指的是每一个字母在单词中出现的次数不超过1的单词 题目要求你求出字典序比当前给定单词大的字典序最小单词 1.如果给定的单词长度小于26 就遍历一次在单词尾部加上字典序最小 ...

  8. 字符串与List互转

    List转字符串,用逗号隔开 List<string> list = new List<string>(); list.Add("a"); list.Add ...

  9. mysql 数据库url

    jdbc:mysql://localhost:3306/database?useUnicode=true&useJDBCCompliantTimezoneShift=true&useL ...

  10. Python之常用模块一(主要RE和collections)

    一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文件 ...