首页 > mysql 5.7 驱动_这些 MySQL 调优配置,你都知道吗?

mysql 5.7 驱动_这些 MySQL 调优配置,你都知道吗?

关注我的头条号,获取更多运维相关知识。

你想了解哪方面的运维知识,请评论区告诉我,我会尽快更新~


MySQL 数据库,基本上运维都会接触到,而对于数据库的性能优化,想必是大家比较关注的,下面分享一些调优技巧。

44d32954b2ec8b260c3013d507214c62.png

先决条件

  • 安装 MySQL,版本大于 5.7
  • 有部分数据
  • 操作系统、数据库管理员权限

MySQL 系统性能优化

在系统层面,调整硬件和软件选项以提高 MySQL 性能。

1. 平衡四个主要硬件资源

存储

如果使用的是传统的 HDD,可以升级到 SSD。

使用 sysstat 工具包中的 iotop、sar 监控输入/输出速率,如果磁盘使用率远远高于其他资源,请考虑添加更多存储或升级到更快的存储。

CPU

通常认识处理器是衡量系统速度的指标,使用 top 命令可以查看关于 CPU 详细的使用信息,注意 MySQL 进程及其CPU 使用率。

6d032e74ab97f67c94d8dd7c6e7ae05d.png
top - 10:41:15 up 205 days, 23:03,  1 user,  load average: 1.07, 1.02, 0.98Tasks: 424 total,   1 running, 423 sleeping,   0 stopped,   0 zombie%Cpu(s):  8.1 us,  0.5 sy,  0.0 ni, 91.1 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem : 13145304+total, 59450800 free, 53483316 used, 18518920 buff/cacheKiB Swap: 16777212 total, 16546300 free,   230912 used. 76746272 avail Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                  7133 mysql     20   0  103.1g  45.5g  10148 S 205.6 36.3  94658:39 mysqld                                                                      6754 mongod    20   0 4504956   3.2g  11872 S  64.8  2.6   1916:34 mongod                                                                     29632 root      20   0   36.5g 506904   6884 S   0.0  0.4 154:00.13 java                                                                       15795 gdm       20   0 5776296 199816  15260 S   0.0  0.2  72:39.84 gnome-shell                                                                31684 root      20   0  353572  98864   1308 S   1.9  0.1 386:24.16 redis-server                                                               31686 root      20   0  320804  98496   1108 S   1.9  0.1 288:01.69 redis-server                                                               31688 root      20   0  326948  97988   1108 S   0.0  0.1 288:37.66 redis-server                                                               16576 gdm       20   0  701592  60952    856 S   3.7  0.0   2688:28 gsd-color                                                                  20199 root      20   0  292132  39696   1212 S   0.0  0.0 483:14.41 redis-server                                                                6437 root      20   0   84744  39352  39100 S   0.0  0.0   1:16.05 systemd-journal                                                            17429 root      20   0  123500  30252   4668 S   0.0  0.0   4476:21 node_exporter                                                              12977 root      20   0  411672  25976  21820 S   0.0  0.0   8:10.97 rsyslogd                                                                   12480 polkitd   20   0  620076   8848   2552 S   0.0  0.0   9:42.49 polkitd                                                                    30362 root      20   0  350468   6728   4636 S   0.0  0.0   0:00.01 abrt-dbus                                                                  13071 root      20   0  435300   5552   3940 S   0.0  0.0   2:36.75 X                                                                          30333 root      20   0  116212   4728   3680 S   0.0  0.0   0:00.02 sshd                                                                       12491 root      20   0  519268   3872   1984 S   0.0  0.0  63:00.71 udisksd                                                                    16584 gdm       20   0 1069144   3688   1248 S   0.0  0.0   0:31.78 gsd-media-keys                                                             16544 root      20   0  398376   3612   1124 S   0.0  0.0   0:34.98 boltd            

CPU 升级成本更高,但是如果已经成为瓶颈了,可能还是需要升级的。

内存

内存表示 MySQL 服务器中的内存总量。可以调整内存缓存(下面细说),以提高性能。但是如果没有足够的内存,或者现有内存没有经过优化,那就不要乱来

与其他资源一样,如果服务器不断耗尽内存,可以通过添加内存升级。如果内存不足,服务器将缓存数据存储到硬盘上,降低性能。

网络

监控网络流量,确保基础架构没问题。

网络过载可能导致延迟,数据包丢失甚至服务中断。

确保有足够的网络带宽来容纳正常水平的数据库流量。

2.使用 InnoDB 而不是 Myisam

Myisam 是 MySQL 5.1 及之前的版本使用的存储引擎,不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复,效率也较低。InnoDB 是 MySQL 5.5 版本以后的默认存储引擎,InnoDB 是为 Mysql 处理巨大数据量时的最大性能设计。它的 CPU 效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中 Innodb 是倍受青睐的。

InnoDB 使用聚集索引并将数据保留在页面中,这些页面存储在连续的物理块中。 如果一个页面的值太大,InnoDB会将其移动到另一个位置,然后索引该值。 此功能有助于将相关数据保存在存储设备上的同一位置,这意味着物理硬盘驱动器需要较少的时间来访问数据。

3. 使用最新版本的 MySQL

如果由于历史遗留问题,只能用旧版本的 MySQL,那没办法。但是只要有可能,都用最新版的 MySQL,因为新版性能更好,高级特效更多。

软件性能调整

这些方法涉及调整 MySQL 配置文件,编写更高效的 SQL 语句以及创建索引等等

注意:调整时,一次只进行一个更改,进行测试,然后进行下一个。如果一次调整很多,出现性能下降或故障,排查问题不好下手。

4. 使用自动性能改进工具

和大多数工具一样, 不一定适用所有的 MySQL 版本。下面提供几个工具来评估 MySQL 数据库及提供更改建议。

MySQL Tuning Primer 这个工具使用于 MySQL >= 5.5 <= 5.7, 它可以分析数据库并建议设置以提高性能。 例如,如果感觉系统处理查询较慢,则建议提高 query_cache_size 参数。

MySQLTuner-perl 使用 Perl 编写的脚本,可快速查看 MySQL 安装并进行调整以提高性能和稳定性。 检索当前配置变量和状态数据,并以简短的格式显示一些基本的性能建议。

81e714a3807b93a7ed261d3a22d2a38b.png

该脚本适用于 MySQL 多个版本。

f32f4d3b0c99be5fbc943433eec6bb37.png

日志文件建议是列表中的第一条建议,在底部,则可以看到有关提高MySQL性能的一般建议。

5. 优化查询

查询是用于搜索数据库中与特定值匹配的数据的编码请求。有些查询需要很长时间才能返回结果。如果您的环境依赖于自动查询,它们可能会影响性能,检查并及时终止堆积的 MySQL 进程。

6. 适当的时候使用索引

查询经常使用类似于以下的结构:

SELECT … WHERE

这些查询涉及评估,过滤和检索结果。 可以通过为相关表添加索引,加快查询速度。

7. 谓词中的函数

避免在谓词查询中使用函数,如:

SELECT * FROM MYTABLE WHERE UPPER(COL1)='123'

UPPER 创建一个函数,这个函数必须在 SELECT 运行期间进行操作,这会使查询正在做的工作加倍,尽量避免。

8. 避免在谓词中使用%通配符

通配符%表示零个或多个字符。 如果查询如下所示:

SELECT * FROM MYTABLE WHERE COL1 LIKE '%123'

表达式 "%123" 包含所有以 123 结尾的值。% 符号代表任何类型或数量的前面字符,包括任何字符。 这样必须执行全表扫描,尽量避免

9.在 SELECT 函数中指定列

一种常见的表达方式是使用 SELECT *扫描所有数据库列。 如果指定所需的列,则查询将不需要扫描不相关的列。

10.适当使用 ORDER BY ORDER BY 表达式

按指定的列对结果进行排序。可用于一次按两列排序。这些应该以相同的顺序(升序或降序)进行排序。如果尝试按不同顺序对不同的列进行排序,则会降低性能。可以将其与索引结合使用以加快排序速度。

11. JOIN, UNION, DISTINCT

尽可能尝试使用内部联接。 外部联接将查看指定列之外的其他数据。 如果您需要这些数据,那很好,但是包含不必要的数据会浪费性能。 查询有时包含UNION和DISTINCT命令。 就像外部联接一样,可以在必要时使用这些表达式。 但是,它们增加了数据库的其他排序和读取。 如果您不需要它们,最好找到一个更有效的表达方式。

12.使用EXPLAIN功能

将 EXPLAIN 表达式附加到查询的开头将读取并评估查询。 如果表达式效率低下或结构混乱,EXPLAIN 可以帮助您找到它们。 然后,您可以调整查询的措词,以避免意外的表扫描或其他性能影响。

13.MySQL服务器配置

此配置涉及更改 my.cnf 文件。 请谨慎操作,并一次进行较小的更改。

  • query_cache_size –指定等待运行的MySQL查询的缓存大小。建议从较小的值开始,大约10MB,然后再增加到不超过 100-200MB。如果缓存的查询过多,您会遇到 Waiting for cache lock. 的级联查询。如果您的查询一直在备份,则更好的过程是使用 EXPLAIN 评估每个查询并找到提高效率的方法。
  • max_connection –指允许进入数据库的连接数。如果您由于Too many connections而出错,则增加此值可能会有所帮助。
  • innodb_buffer_pool_size –此设置将系统内存分配为数据库的数据缓存。如果有大量数据,请增加此值。注意运行其他系统资源所需的RAM。
  • innodb_io_capacity -此变量设置存储设备的输入/输出速率。这与存储驱动器的类型和速度直接相关。 5400 rpm HDD的容量将比高端 SSD 或 Intel Optane 低得多。可以调整此值以更好地匹配硬件。

结论

现在,您应该知道如何提高 MySQL 性能和调整数据库。

查找瓶颈(硬件和软件)、执行更多工作所需的查询,并考虑使用自动化工具和EXPLAIN 函数来评估数据库。

更多相关:

  • spring data jpa提供了多种查询方式,如下:方法名称查询继承Repository接口测试代码方法名称中支持的关键字(官方文档提供)使用JPA命名查询在User实体中定义jpql(类似于hql)jpql(百度百科)继承JpaRepository接口测试使用@Query查询和命名查询不同的是,将jpql写到了 dao 方法上,...

  • 转自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html   对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,本文只谈优化查询时如何看懂SqlServer查询计划。由于我对SqlServer的认识...

  • 一.实现基础功能之一(记账)   一个记账本最基础之一的功能就是记账,所以也是首先要解决的问题,我选择了上学期使用的MySQL数据库来对账本进行存储。   我选择记账的方法是分开记账,就是支出放在一个表,收入放在一个表,这样在数据库方面会比较的直观的看到,但是在显示的时候就会产生部美观的问题,就是支出和收入都是分开来的,没有办法按照时...

  • 在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q  会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表名) 我们直接在后面补全查询条件即可,非常方便。 转载于:https://www.cnblogs.com/libin6505/...

  • 一.通过Keepalived搭建MySQL双主模式的高可用集群系统1.MySQL Replication介绍:MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一台MySQL服务器(称为Slave)从另一台MySQL服务器(称为Master)上复制日志,然后解析日志并应用到自身的过程。MySQL Re...

  • 1、打开https://oneinstack.com/auto/选择Stack:LNMTY → ×安装Nginx → √安装JAVA:Tomcat7.0、JDK1.7 → √安装数据库MySQL5.7、DB密码root、DB安装方式二进制安装 → √Pure-FTPd √redis √memcached ×hhvm √iptables...

  • 注意:由于流程太过于繁杂,且坑多,这里只保留关键步骤,具体小问题百度! ________________________ 先进入CentOS6.8图形化界面(如阿里云没有默认的图形化界面,自己去安装https://blog.csdn.net/fenglixiong123/article/details/71138017) 【步骤...

  • 为了简单省事,我在CentOS 6.3上直接使用yum方法来安装MySQL,安装很顺利,但是我发现root用户登录不了。 下面是参考网上的资料并实操后的笔记整理 yum -y install mysql-server service mysqld start 安装过程中没有任何提示,也不知道root的密码设置的是多少。我打算从...

  • 破解MySQL密码 一、MySQL5.7.5之前 只要有系统root密码就可以破解: [root@host-131 ~]# vim /etc/my.cnf               //在配置文件中加入如下内容 [mysqld] skip-grant-tables[root@host-131 ~]# systemctl resta...

  • Ctrl+Shift+X 搜索AutoScssStruct4Vue   如上图直接右键-autoScssStruct(你都不需要聚焦到template节点) 直接就给你妥妥的把SCSS代码写好了,如果你还是嫌弃点右键太麻烦了太累了(泥马~这也太懒了吧,要不要AI帮你写代码?)我们还可以设置快捷键Ctrl+Alt+S,自动插入结构...

  • 性能 是rocksdb的优点,活跃的社区十分欢迎大家对各自使用rocksdb 过程中性能相关的疑惑点进行提问。提问的时候如果能够提供更多,更详细的信息 是可以增加快速得到恢复回复的概率。当然,性能是一个非常广泛且有巨量影响因素的话题,单纯从一个简单的描述是无法进行更进一步的性能问题讨论的。 社区从两方面给出了如下 性能相关issue...

  • 我们在使用vim打开一个文件的时候,经常会弹出下面的界面 为什么会出现这个界面呢 用vim编辑文件(如这里的test.txt)时,系统会自动产生一个文件叫.test.txt.swp.如果正常退出,此文件会被自动删去.如果上次非正常退出,如果再编辑它,系统会首先查.test.txt.swp 是否存在,如果存在,就会问你如何处理....

  • P80  引用自己创建的模块 如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。如果是在Windows命令行中,则按Ctrl-z再按Enter。   转载于:https://www.cnblogs.com/linzh104/p/4076852.html...

  • Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注...