22 | MySQL有哪些“饮鸩止渴”提高性能的方法?

一、短连接风暴

短连接:执行很少的 SQL 语句就断开,需要再连。高峰期可能连接数暴涨

成本高。除三次握手,需登录权限读写权限

max_connections控制连接数,超过报“Too many connections”。

调高max_connections 有风险。改太大,让更多的连接都可以进来,系统负载大,大量的资源耗费在权限验证等逻辑上,已经连线程拿不到 CPU 资源去执行业务的 SQL 请求。解决方法:

2.1方法1:处理占连接不工作线程

max_connections 计算,不看谁running占计数位 kill connection 主动踢掉。跟事先设置 wait_timeout 效果一样:空闲 wait_timeout 多少秒之后,断开连接。show processlist 踢掉sleep 线程,可能有损

图 1 sleep 线程的两种状态

A 没有提交,回滚; B 没影响。哪些事务外空闲? C 在 T 时刻之后30 秒执行 show processlist

图 2 sleep 线程的两种状态  

id=4 和 id=5 都是 Sleep。看事务具体状态: information_schema库的 innodb_trx 表。

图 3 从 information_schema.innodb_trx 查询事务状态

trx_mysql_thread_id=4, id=4 事务中

kill connection + id 的命令, sleep主动断开,客户端不会马上知道。发起请求报错“ERROR 2013 (HY000): Lost connection to MySQL server during query”。

可能有损,不重连直接用已经不能用句柄重试。从应用端看上“MySQL没恢复”。断开连接要通知到业务开发。

1.2 方法2:减少连接过程消耗

短时间大量申请连接备用,跳过权限验证:–skip-grant-tables重启数据库

“饮鸩止渴”,风险极高,不建议用(尤其库外网可访问)

默认--skip-networking 参数打开,只被本地客户端连接。

查询、更新导致性能问题:慢查询导致, QPS突增导致

二、慢查询性能问题

引发慢查询可能&解决方案:索引没设计好、SQL 没写好、选错索引

2.1索引没设计好

通过紧急创建索解决。高峰期被语句打挂,直接执行 alter table。主库 A、备库 B:

1.  在备库 B 上执行 set sql_log_bin=off,不写 binlog,执行 alter table 加索引;

2.  主备切换

3.  A 上执行 set sql_log_bin=off,执行 alter table 加索引。

“古老” DDL 方案。平时变更, gh-ost 更稳妥。紧急这个效率高

2.2语句没写好

18 篇文章《为什么这些 SQL 语句逻辑相同,性能却差异巨大?》错误导致没用上索引。

query_rewrite 把输入语句改成另一模式:

被错误地写成了 select * from t where id + 1 = 10000增加改写规则

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();  这个存储过程,让插入新规则生效,“查询重写”。确认:

图 4 查询重写效果

2.3选错索引

10 篇文章MySQL 为什么有时候会选错索引?》查询重写功能,原语句加 force index解决

前两种实际上出现最多。预先发现问题(上线前的“额外”时间,会省下故障复盘时间):

1.  慢查询日志(slow log)打开,long_query_time = 0,确保每个语句都被记录

2.  模拟线上数据,回归测试

3. 观察慢每类语句,Rows_examined是否与预期一致

新增SQL不多,手动跑。修改表结构,全量回归测。开源工具pt-query-digest(https://www.percona.com/doc/percona-toolkit/3.0/pt-query-digest.html)。

三、QPS 突增问题

突然高峰,或者bug, QPS 暴涨,MySQL 压力大,影响服务。下功能,数据库端处理:

1.  白名单去掉:新bug 导致。DB 运维规范(白名单一个个加)。确定下功能,时间上没那么快。

2. 断开连接: 新功能单独库,删掉用户。新功能连接不成功,引发 QPS  0。

3.  处理语句(优先级低)新功能跟主体部署一起,查询重写功能,压力最大 SQL 语句写成"select 1"返回。副作用:

1.  别的也用误伤

2.  很多业务不是靠这一个完成, select 1 导致后面失败

1 和 2 依赖于规范运维:虚拟化、白名单机制、业务账号分离

小结

粗暴地拒绝、断开连接重写语句绕坑

避免大量用短连接。连接异常断开常有,代码要有重连并重试机制。

DBA 通过语句重写处理,风险高,做好 SQL 审计可减少

解决方法主要在 server 层

思考:业务高峰期临时救火场景?怎么处理?

评论1

delete大事务导致磁盘满,数据库hang住,连接不上,无法kill掉大事务.现象是:

binlog一个文件50G(说明事务已经执行完成,fsync相当copy,空间占满)

lsof | grep delete 该tmp文件100多G(binlog_cache不够用,binlog写进tmp,binlog完全落盘删除之前tmp)

redo log还是只有4个组,每个文件1G(循环写,redo log分为mtx落地到磁盘上没有一次性暴增,还是原大小持续写.)

undo log大概有100来G


解决办法:切从库,kill主库进程。binlog缩小为原来。主库启recovery非常慢。后面kill掉,innodb_force_recovery=3(不执行事务回滚操作)恢复,recovery半天没反应。不是重要库,新主库备份文件重做了之前的主库,从库启。

后续测试:还耗时,redo log一直变,binlog没变,recovery=3

Binlog 大是大事务崩溃恢复处理redolog 多,耗时在这(通过redo log恢复数据页。)

最老binlog移动到别的盘(确定备份就删)。强制重启伤,做好监控,不让磁盘100%写满

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容