MySQL -- 短连接 + 慢查询

栏目: 数据库 · 发布时间: 7年前

内容简介:gh-ost《MySQL实战45讲》
  1. max_connections :MySQL实例同时存在的连接数上限
  2. 当连接数超过 max_connections ,系统会 拒绝 接下来的连接请求,返回: Too many connections
    • 当连接被拒绝,从业务角度来看是 数据库不可用
  3. 如果机器 负载较高 ,处理现有请求的时间会变长,每个连接 保持的时间 也会变长
    • 如果再有新建连接的话,很容易触发 max_connections 的限制
  4. max_connections 的目的是 保护MySQL 的
    • 如果把 max_connections 设置得过大,更多的连接就会进来,导致系统负载会进一步加大
    • 大量的资源会耗费在 权限验证 等逻辑上,而已经 拿到连接的线程 会抢不到CPU资源去执行业务SQL
mysql> SHOW VARIABLES LIKE '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 2000  |
+-----------------+-------+

清理Sleep状态的连接

KILL CONNECTION :主动踢除 不需要保持 的连接(与 wait_timeout 的效果一样)

时刻 sission A session B session C
T BEGIN;
INSERT INTO t VALUES (1,1);
SELECT * FROM t WHERE id=1;
T+30s SHOW PROCESSLIST;
KILL CONNECTION
  1. 踢除 Sleep 状态的连接是 有损 的
  2. 如果断开sission A的连接,会 回滚事务
  3. 如果断开sission B的连接,没有任何影响
    • 优先断开 事务外空闲 的连接
    • 再考虑断开 事务内空闲 的连接

事务外空闲

MySQL -- 短连接 + 慢查询

trx_mysql_thread_id : id=4 的线程还处在事务中

MySQL -- 短连接 + 慢查询

KILL CONNECTION

  1. 服务端执行 KILL CONNECTION id ,如果连接在此前处于 Sleep 状态,客户端是 不会立马知道
  2. 客户端如果发起 下一个请求 ,报错 ERROR 2006 (HY000): MySQL server has gone away
    • 因此,客户端(应用层)需要有 重连机制

减少连接过程的消耗

  1. 数据库 跳过权限验证阶段 – 风险极高
    • 重启数据库,启动参数 --skip-grant-tables
    • 跳过 所有 的权限验证阶段( 连接过程 + 语句执行过程 )
  2. 从 MySQL 8.0开始,启用 --skip-grant-tables 参数,默认会启用 --skip-networking ( 本地客户端 )

慢查询

索引没有设计好

古老方案

  1. Online DDL – ALTER TABLE
  2. 主库A,备库B
  3. 在备库B上执行 SET sql_log_bin=OFF ( 不写binlog ), ALTER TABLE 加上索引
  4. 执行 主备切换 ,变成主库B,备库A
  5. 在备库A上执行 SET sql_log_bin=OFF ( 不写binlog ), ALTER TABLE 加上索引

工具

gh-ost

语句没写好

-- Since MySQL 5.7
INSERT INTO query_rewrite.rewrite_rules (pattern, replacement, pattern_database)
    VALUES ("SELECT * FROM t WHERE id + 1 = ?", "SELECT * FROM t WHERE id = ? - 1", "test");

CALL query_rewrite.flush_rewrite_rules();

MySQL选错索引

  1. FORCE INDEX
  2. query_rewrite + FORCE INDEX

预先发现问题

  1. 测试环境配置: slow_query_log=ON + long_query_time=0
  2. SQL Review,留意 Rows_examined 是否与预期的一致
  3. 工具: pt-query-digest

参考资料

《MySQL实战45讲》

转载请注明出处:http://zhongmingmao.me/2019/02/20/mysql-short-conn-slow-query/

访问原文「 MySQL -- 短连接 + 慢查询 」获取最佳阅读体验并参与讨论


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Head First Web Design

Head First Web Design

Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99

Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换