内容简介:gh-ost《MySQL实战45讲》
-
max_connections
:MySQL实例同时存在的连接数上限 - 当连接数超过
max_connections
,系统会 拒绝 接下来的连接请求,返回:Too many connections
- 当连接被拒绝,从业务角度来看是 数据库不可用
- 如果机器 负载较高 ,处理现有请求的时间会变长,每个连接 保持的时间 也会变长
- 如果再有新建连接的话,很容易触发
max_connections
的限制
- 如果再有新建连接的话,很容易触发
-
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 |
- 踢除
Sleep
状态的连接是 有损 的 - 如果断开sission A的连接,会 回滚事务
- 如果断开sission B的连接,没有任何影响
- 优先断开 事务外空闲 的连接
- 再考虑断开 事务内空闲 的连接
事务外空闲
trx_mysql_thread_id
: id=4
的线程还处在事务中
KILL CONNECTION
- 服务端执行
KILL CONNECTION id
,如果连接在此前处于Sleep
状态,客户端是 不会立马知道 - 客户端如果发起 下一个请求 ,报错
ERROR 2006 (HY000): MySQL server has gone away
- 因此,客户端(应用层)需要有 重连机制
减少连接过程的消耗
- 数据库 跳过权限验证阶段 – 风险极高
- 重启数据库,启动参数
--skip-grant-tables
- 跳过 所有 的权限验证阶段( 连接过程 + 语句执行过程 )
- 重启数据库,启动参数
- 从 MySQL 8.0开始,启用
--skip-grant-tables
参数,默认会启用--skip-networking
( 本地客户端 )
慢查询
索引没有设计好
古老方案
-
Online DDL
–ALTER TABLE
- 主库A,备库B
- 在备库B上执行
SET sql_log_bin=OFF
( 不写binlog ),ALTER TABLE
加上索引 - 执行 主备切换 ,变成主库B,备库A
- 在备库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选错索引
-
FORCE INDEX
-
query_rewrite
+FORCE INDEX
预先发现问题
- 测试环境配置:
slow_query_log=ON
+long_query_time=0
- SQL Review,留意
Rows_examined
是否与预期的一致 - 工具:
pt-query-digest
参考资料
《MySQL实战45讲》
转载请注明出处:http://zhongmingmao.me/2019/02/20/mysql-short-conn-slow-query/
访问原文「 MySQL -- 短连接 + 慢查询 」获取最佳阅读体验并参与讨论
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL高级查询---连接查询实例
- mybatis深入之动态查询和连接池介绍
- 掌握 MySQL 连接查询到底什么是驱动表
- sql连接查询中,where关键字的位置讲解
- .NET Chloe.ORM v2.10 简化多表连接查询
- 【大数据】SparkSql连接查询中的谓词下推处理(一) 原 荐
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据库系统概念
(美)Abraham Silberschatz、(美)Henry F.Korth、(美)S.Sudarshan / 杨冬青、李红燕、唐世渭 / 机械工业出版社 / 2012-3 / 99.00元
【编辑推荐】 数据库领域的殿堂级作品 夯实数据库理论基础,增强数据库技术内功的必备之选 对深入理解数据库,深入研究数据库,深入操作数据库都具有极强的指导作用! 【内容简介】 本书是数据库系统方面的经典教材之一,其内容由浅入深,既包含数据库系统基本概念,又反映数据库技术新进展。它被国际上许多著名大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学......一起来看看 《数据库系统概念》 这本书的介绍吧!