问: 为什么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设置了这么高的最大连接数呢?我估计,他是为了兼容最快速和最小数据量的并发连接情况,而设置的。自己可以压测下!

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

为什么300的并发能把支持最大连接数4000数据库压死相关推荐

  1. 高并发大流量专题---10、MySQL数据库层的优化

    高并发大流量专题---10.MySQL数据库层的优化 一.总结 一句话总结: mysql先考虑做分布式缓存,过了缓存后就做mysql数据库层面的优化 1.mysql数据库层的优化的前面一层是什么? 数 ...

  2. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作

    由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到.由于我的Winform开发框架,是基于 ...

  3. Oracle数据库版本维护支持结束时间表以及数据库版本发行时间表

    Oracle数据库版本支持结束时间表以及数据库版本发行时间表 数据库版本支持时间表: 大版本 (点击查看详情) 当前补丁集 下一补丁集 标准服务结束日期 扩展服务结束日期 注释 12.1.0.X 无 ...

  4. Nginx并发数、每秒连接数、下载速度限制,防攻击杀手锏

    Nginx并发数.每秒连接数.下载速度限制,防攻击杀手锏 本文链接:https://blog.csdn.net/slovyz/article/details/54583882 1.限制IP访问频率: ...

  5. 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)

    原文:解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译) 解剖SQLSERVER 第八篇  OrcaMDF 现在支持多数据文件的数据库(译) http://improve ...

  6. 支持纳管Redis数据库,支持查看、连接和会话审计Kubernetes Pod,JumpServer堡垒机v2.18.0发布

    2022年1月24日,JumpServer开源堡垒机正式发布v2.18.0版本.在这一版本中,JumpServer新增支持纳管Redis数据库,支持查看.连接.操作和会话审计Kubernetes Po ...

  7. 部署支持使用Redis哨兵模式,支持纳管ClickHouse数据库,JumpServer堡垒机v2.28.0发布

    2022年11月21日,JumpServer开源堡垒机正式发布v2.28.0版本.在这一版本中,JumpServer的部署支持使用Redis哨兵集群作为后端缓存数据库,从而使系统更加健壮和高可用.操作 ...

  8. PostgreSQL Oracle GoldenGate支持种类繁多的数据库的同步,功能非常强大 pgsql_admin_script ogg_oracle_replicate_to_postgres

    PostgreSQL Oracle GoldenGate支持种类繁多的数据库的同步,功能非常强大 pgsql_admin_script ogg_oracle_replicate_to_postgres ...

  9. JDK8对并发的新支持

    2019独角兽企业重金招聘Python工程师标准>>> 1. LongAdder 和AtomicInteger类似的使用方式,但是性能比AtomicLong更好 在AtomicInt ...

  10. 面试官:支撑日活百万用户的高并发系统,应该如何设计其数据库架构?

    点击上方"蓝字", 右上角选择"设为星标" 周一至周五早11点半!精品文章准时送上! 本文转载自公众号:石杉的架构笔记 目录:                  ...

最新文章

  1. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版
  2. 【CV冬季划】终极进阶,超30个项目实战+3本书+3年知识星球
  3. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
  4. java RSA加密解密实现(含分段加密)
  5. 神经网络那些事儿(二)
  6. js ejs for语句的第二种遍历用法
  7. Linux之python3编译安装
  8. linux nfs 默认端口,Linux NFS服务固定端口与防火墙配置
  9. Android安装软件的后缀,apk是什么文件,后缀是apk是什么文件
  10. 管家婆财贸双全存货核算类型对应会计科目禁止删除
  11. HTML+CSS实现导航条及下拉菜单1
  12. timenote时光笔记+android,Time Note时光笔记软件怎么样?Time Note时光笔记有哪些功能特色?...
  13. 周杰:推荐只是一个新的信息的传播方式
  14. 一次微信公众号分享功能总结
  15. python中函数定义的关键字_python中定义函数的关键字是什么
  16. 王立柱《C语言程序设计》3.5.3
  17. centos7 内网设置共享网络文件夹
  18. 计算机维修分为那两种,计算机二级维修中最常见的三种方法是什么?
  19. 小爱(小米),天猫精灵(阿里),小度(百度),小艺(华为)智能家居系统选择
  20. 什么是Kusama (KSM)以及与波卡的区别

热门文章

  1. Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素
  2. NOIP2015题解
  3. [bzoj2816][ZJOI2012]网络(LCT,splay)
  4. Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结...
  5. PostgreSQL学习手册(三) 表的继承和分区
  6. 深度梯度压缩:减小分布式训练的通信带宽
  7. 易语言 word类excel类 的 源码和模块
  8. eclipse 闪退原因
  9. 解决ASP.NET页面回车回发的问题
  10. php常见问题辨析(二)