文档章节

解惑:为什么300的并发能把支持最大连接数4000数据库压死?

o
 osc_a22drz29
发布于 2019/03/22 08:27
字数 1713
阅读 8
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

问: 为什么300的并发能把支持最大连接数4000数据库压死?

 

  买了一台数据库,最大连接数的参数是 4000,看起来很棒!但是 cpu 和内存并不咋好!是 2c4g的超低配制。

  但是想着反正业务量也不大,不如先扛着,等业务量上来再进行升配!

 

  没过多久,进行一次小量的营销活动。粗略计算想了下,大约3-4台应用服务器就没问题了;然后再考虑下数据库,应该没有问题。

 

考虑到数据库没问题的原因有二:

  1. 应用服务器数量少,对数据库压力不会太大;

  2. 每个应用都设置了最大连接池限制,单台一般不会超过100的连接,与4000的并发连接指标还差很远;

 

活动开始后,开始一切都很正常,应用服务器监控正常,前端响应正常。以为一切尽在掌握之中,结果却是一场灾难!

 

  前端页面响应越来越慢了,监控应用服务器却一点压力没上来!我知道是数据库出问题了!

 

  于是,直接开了个db客户端查看情况,自己试着运行了直sql,响应的确很慢,但是也能几十秒内返回;所以我数粗浅的结论是,应用响应会很慢,但是应该能响应完整!

 

  其实,我想错了。

  其一,前端访问是有超时限制的,超过一段时间后,会自行断开连接,所以后端超级卡顿时,前端用户侧是会无法提供服务的!

  其二,除去前端会有超时限制断开外,应用api也会在一段时间没有收到数据库响应后,超时断开返回,然而数据库对断开请求则可能收不到,从而继续保持操作运行;从而应用服务器会再次发起下一个请求,从而使连接超过应用设置的连接池大小,进一步挑战db极限;所以,前端仍然是不能正常服务的。

 

回到前面数据库问题,为什么在还远低于最大连接数的情况下,db就开始不工作了呢?

 

其实,db的运行指标,不止有最大连接数一个!cpu,内存,磁盘,网络 都是其运行指标,这些指标都会限制其能力!

 

第一层,磁盘io。

  指标专业名词:IOPS;因为所有的数据都是存储在磁盘的,所以,在高并发的场景下,一定会受到磁盘能力的限制,普通磁盘 sata 可能只有7-10M/s 的能力,只要要求加载的数据远远大于这个速度,磁盘瓶颈就出来了。当然了,磁盘读取后,结果是会缓存到内存的,所以又和内存有关了!

 

第二层,内存。

  磁盘读取出来的数据必定会放到内存进行数据运算处理,然后才能得到结果。内存的速度当然是特别快了,咱们不考虑它这方面的能力问题。但是,速度再快,没有内存空间就没办法了,就像上面的配置 4g 的内存其实稍微几个大点的数据查询,基本就装满了。而且,在一次查询完成后,还要负责将结果缓存起来。当内存运行不够的时候,cpu会进行磁盘的swap操作,将需要运算的数据换入内存,从而保证运算正常进行,但是这个操作就很慢了,从而导致正常的查询都变得缓慢起来。(索引会稍微好点,因其数据量比较小,内存swap概率也低)。 所以,低配内存将是一大致命弱点,不要期望太高;

 

第三层,cpu。

  其实整个过程的调度都是由cpu来运筹帷幄的。只是,cpu运算速度往往都会很快,所以我们把它稍微放后点!因为前面磁盘和内存,导致cpu会不停地运算操作。另外,由于外部请求大量涌入,导致cpu要进行多线程的维护,即会有大量上下文切换,这个切换增加了cpu压力,同时也使请求的响应变差,cpu也就越来越高,直到彪升到90+%,连操作系统的调度都很困难了。所以,只会雪上加霜地,降低请求的处理能力,从而导致db直接假死!可能只有重启才能解决问题了!

 

第四层,网络层。

  一般来说,只要数据库和应用是部署在一个内网里,那么,网络一般不会限制能力(非绝对);但是对于一些远程数据库,就直接要小心了,比如一个数据包就是3M+,那么如果是 10Mb/s 的带宽,仅能传输3-4个数据包,从而使响应能力完全限死;所以,数据库一般需要部署内网机房,或者买云数据库时,最好在同一区。网络层一般我们可以忽略,但是要知道这里的原理!

 

最后,我们来讨论下,mysql中的最大连接数到底是什么?

1. 查看最大连接数

show variables like '%max_connections%'

2. 修改最大连接数

set GLOBAL max_connections = 200;

那么,最大连接是什么原理呢?

  一般对于处理快速的情况下,每个连接进来后,会从mysql的线程池中取出线程来处理任务。但是当线程不够用的时候,它会创建新的线程池来处理。

  所以,并发连接数越大,则往往意味着mysql的线程会越多(不一定是一对一);线程越多意味着上下文切换将越频繁,cpu压力越大,服务器性能越差。所以,合理设置最大连接数,使服务器处于高效状态,是一个优化方向!

查看线程相关的状态变量:

SHOW STATUS LIKE 'Threads%';

 

那么问题来了,为什么阿里云上的rds设置了这么高的最大连接数呢?我估计,他是为了兼容最快速和最小数据量的并发连接情况,而设置的。自己可以压测下!

 

综上,四个指标。只要有一个成为瓶颈,其他指标也就失去了意义!

 

其实真正有过mysql调优经验的同学,深入理解过mysql,上面这些问题自然明白。而不明白的同学,则要多多实践才行!

 

一句话总结:纸上得来终觉浅,绝知此事要躬行!

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
数据库压死

为什么300的并发能把支持最大连接数4000数据库压死? 问: 为什么300的并发能把支持最大连接数4000数据库压死?   买了一台数据库,最大连接数的参数是 4000,看起来很棒!但是 cpu 和内存...

osc_k6lb5e4x
2019/04/08
2
0
Jmeter常用插件——Stepping Thread Group ,JMETER以及关于数据库性能分析

使用方法: 1、添加线程组——jp@gc - Stepping Thread Group 2、Stepping Thread Group界面如下: 上图的各项意思: This group will start 100 threads:设置线程组启动的线程总数为100个;...

osc_9wm81b2v
2019/04/15
6
0
性能测试入门(五)最佳线程数设置

原文地址:http://blog.sina.com.cn/s/blog_4080505a01016o3d.html 最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或...

osc_d0mluysz
2019/04/23
2
0
如何使用redis缓存加索引处理数据库百万级并发

前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想。准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插...

门非流
2016/08/18
0
0
你的接口,真的能承受高并发吗?

前言 本篇主要讲解的是前阵子的一个压测问题.那么就直接开门见山 可能有的朋友不并不知道forceTransactionTemplate这个是干嘛的,首先这里先普及一下,在Java中,我们一般开启事务就有三种方式 ...

osc_v9knegpw
2019/04/04
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Py之imblearn:imblearn/imbalanced-learn库的简介、安装、使用方法之详细攻略

Py之imblearn:imblearn/imbalanced-learn库的简介、安装、使用方法之详细攻略 目录 imblearn/imbalanced-learn库的简介 imblearn/imbalanced-learn库的安装 imblearn/imbalanced-learn库的使...

osc_8cqhsn24
9分钟前
0
0
B站是一家游戏公司?二次上市传言背后,游戏收入占比五成

撰文/文姬 出品/趣识财经 曾几何时,有着“中国YouTube”之称的哔哩哔哩,以“浪潮”三部曲吸引了一众吃瓜群众的注意。 此后,B站与知名财经UP主的“爱恨情仇”,以及高价签约知名游戏UP主...

镭射财经
10分钟前
6
0
WeChat:微信小程序设计流程注册&完善、设计&开发、审核&发布之详细攻略

WeChat:微信小程序设计流程注册&完善、设计&开发、审核&发布之详细攻略 目录 微信小程序设计流程 1、注册 2、小程序信息完善 3、开发小程序 3.1、开发文档 3.2、开发者工具 3.3、设计指南 ...

osc_e4tx8h6g
10分钟前
10
0
RecyclerView动画源码浅析

RecyclerView动画源码浅析 adapter.notifyItemRemoved(1)会回调到 RecyclerViewDataObserver: adapter.notifyItemRemoved RecyclerViewDataObserver onItemRangeRemoved triggerUpdateProce......

osc_35ne77sz
11分钟前
8
0
中科院计算所包云岗:从多场硕博答辩中,我看到了国内人才培养的进步 - 知乎

中国的计算机科学领域里,前沿研究的质变正在发生。 机器之心整理,参与:蛋酱、泽南。 国内的计算机科学领域,是否可以称得上引领方向了呢?近年来,我们在很多计算机科学,特别是人工智能顶...

osc_8i2fhl7z
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部