MySQL45讲之生产环境下的性能问题 – flowers「终于解决」

MySQL45讲之生产环境下的性能问题 – flowers「终于解决」本文介绍一些常见的性能问题,以及在生产环境下应该如何解决。

MySQL45讲之生产环境下的性能问题 - flowers

前言

本文介绍一些常见的性能问题,以及在生产环境下应该如何解决。

1. 短连接风暴

当由于大量短连接造成数据库性能低时,首先考虑一些无损安全的解决方案,如果是必须立刻提升一些数据库性能,那么可以考虑下面的方案。

第一种方法:处理掉占着连接但空闲的线程

类似 MySQL wait_timeout 的逻辑,当检测到线程空闲(sleep状态)超过一定时间,就在服务端主动断开与客户端的连接,为后续新到来的连接腾出位置。

从数据库端断开连接的方法是有损的,因为应用端收到这个错误后,不会重新连接,而是用这个不能再用的句柄继续重试查询。这会导致从应用端看上去,“MySQL一直没恢复”。

第二种方法:减少连接过程的损耗

一种减少损耗的方法是连接时不进行权限验证,即以 –skip-grant-tables 的方式重启 MySQL,这样后续的连接将不需要再进行权限验证。但是这样显然很不安全,所以 MySQL8.0 在开启 –skip-grant-tables 模式后,只允许本地客户端连接 MySQL。

2. 慢查询问题

慢查询问题主要分三种情况:

  • 索引设计不好
  • SQL语句没写好
  • 数据库选错索引

第一种情况:索引设计不好

原文复制:

MySQL5.6 以后可以 Online DDL,即支持在线更新表结构。所以,如果上线后发现索引没设计好,就可以在线 Alter Table。

比较理想的是能够在备库先执行。假设你现在的服务是一主一备,主库A、备库B,这个方案的大致流程是这样的:

在备库B上执行 set sql_log_bin=off,也就是不写binlog,然后执行alter table 语句加上索引;

执行主备切换;

这时候主库是B,备库是A。在A上执行 set sql_log_bin=off,然后执行alter table 语句加上索引。

这是一个“古老”的DDL方案。平时在做变更的时候,你应该考虑类似 gh-ost 这样的方案,更加稳妥。但是在需要紧急处理时,上面这个方案的效率是最高的。

第二种情况:SQL语句没写好

MySQL5.7 提供了 query_rewrite 插件实现 SQL 重写的功能,安装 query_rewrite 插件后,会多一个 query_rewrite 数据库,然后可以该数据库的 rewrite_rules 表中新增重写规则,举例:

mysql> insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values ("select * from t where id + 1 = ?", "select * from t where id = ? - 1", "db1");

call query_rewrite.flush_rewrite_rules();

第三种情况:数据库选错索引

在 SQL 语句上加上 force index 来强制选择索引,同样可以使用 query_rewrite 插件重写语句来解决。

原文复制:

上面的三种可能情况,出现最多的是前两种,即:索引没设计好和语句没写好。而这两种情况,恰恰是完全可以避免的。比如,通过下面这个过程,我们就可以预先发现问题。

(1)上线前,在测试环境,把慢查询日志(slow log)打开,并且把long_query_time设置成0,确保每个语句都会被记录入慢查询日志;

(2)在测试表里插入模拟线上的数据,做一遍回归测试;

(3)观察慢查询日志里每类语句的输出,特别留意Rows_examined字段是否与预期一致。

参考

  • [1] MySQL有哪些“饮鸩止渴”提高性能的方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5817.html

(0)
上一篇 2023-04-23
下一篇 2023-04-23

相关推荐

  • 字节跳动 内容质量_字节跳动有哪些部门

    字节跳动 内容质量_字节跳动有哪些部门更多技术交流、求职机会、试用福利,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 需求背景 数据探查上线之前,数据验证都是通过写 SQL 方式进行查询的,从编写 SQL,到解析运行出结果

    2023-05-27
    140
  • TDengine 如何做到客户端高可用?

    TDengine 如何做到客户端高可用?小 T 导读 :经常有用户在 TDengine 的社区上递交标签为「help wanted」的问题。这些问题大都不是 Bug,只是因为不熟悉或者不了解 TDengine 的机制而让用户感到困惑的使用…

    2023-04-12
    159
  • 移动硬盘还是网盘存储文件保险?[亲测有效]

    移动硬盘还是网盘存储文件保险?[亲测有效]用移动硬盘还是网盘存储文件更保险?我的建议是:分类存储。电影等非重要资料放硬盘,工作等重要资料放在靠谱的网盘里,比如说,坚果云。 没完没了的收集各种资源,就算有一百个硬盘、一百个网盘都囤不完,所以题…

    2023-04-11
    174
  • oracle创建用户并赋权_oracle 删除用户

    oracle创建用户并赋权_oracle 删除用户首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1

    2023-06-02
    148
  • Python表达式编写流程

    Python表达式编写流程Python表达式是由一些数字、操作符、变量和函数等组合而成,通过计算并返回值。Python表达式语法简单,易于学习和使用。在Python中,可以使用表达式实现绝大部分的编程功能。

    2024-04-04
    78
  • python绘图进阶(Python编程绘图)

    python绘图进阶(Python编程绘图)泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制。为了实现泰勒图的绘制,我设计了两个函数:

    2023-11-25
    134
  • 数据库 数仓_数仓是什么

    数据库 数仓_数仓是什么摘要:通常在运维监控出现CPU使用率较高、P80/P95指标较高、慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL。 本文分享自华为云社区《GaussDB慢SQL常见定位处理

    2023-06-12
    143
  • clickhouse github_clickhouse projection

    clickhouse github_clickhouse projection一、Installing ClickHouse-22.10.2.11 on openEuler 1 地址 https://clickhouse.com https://packages.clickho

    2023-06-15
    153

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注