当前位置:网站首页>MySQL实战优化高手05 生产经验:真实生产环境下的数据库机器配置如何规划?
MySQL实战优化高手05 生产经验:真实生产环境下的数据库机器配置如何规划?
2022-07-06 09:08:00 【办公模板库 素材蛙】
1、当你了解数据库的架构原理之后,就该了解一下自己数据库的规划
之前我们用了4篇文章给大家整体分析了一下MySQL数据库的工作原理,相信很多朋友都已经对数据库的整体架构原理有了一定的了解,毕竟在这之前,可能大部分人对MySQL数据库的了解还停留在执行SQL语句的程度。
当我们初步了解了数据库的架构设计原理后,接着其实应该了解的第一件事,就是我们平时在工作中,如何规划生产环境下的数据库。因为我想很多人如果平时主要是负责一些没什么并发量,用户量也就几十个或者几百个人的系统,那么根本就不会去关注数据库的规划这件事情。
对很多Java工程师而言,要不然是自己找一台linux机器装一个MySQL,然后就让自己的系统连接上去直接就开始使用了,要不然就是让DBA或者运维工程师帮自己去找一台机器装一个MySQL或者Oracle,然后自己就可以直接使用了。
但是在我们的专栏中,我们希望能够教会大家较为专业化的数据库使用经验,包括数据库的整体架构原理,还有就是如何规划生产环境下的数据库,包括当你有一个生产库之后,要做的事情就是设计压测方案,包括对你的数据库进行压测,包括对你的数据库部署可视化监控系统,等等。
当你做好这一系列的事情之后,接着才应该是开发你的Java系统,去操作你的数据库,实现各种各样的业务功能和逻辑。
2、生产数据库一般用什么配置的机器?
现在我们来看第一个问题,假设你在生产环境中需要部署一个数据库,此时首先你就需要一个机器来部署这个数据库。那么我们要考虑的事情就是,部署一个生产环境的数据库,一般需要什么样配置的机器呢?
接下来我们将会给大家说一些我们的经验值,直接告诉大家什么样配置的机器部署的MySQL数据库,大致适合多高的并发访问量
当你了解这个经验值之后,未来当你在负责系统的开发,申请数据库的时候,你就知道生产环境下的数据库大致需要什么样的机器配置了,大致可以抗下多少并发访问了。
首先我们先明确一点,如果你负责的系统就是一个没什么并发访问量,用户就几十个人或者几百个人的系统,那么其实你选择什么样的机器去部署数据库,影响都不是很大,哪怕是你用我们自己平时用的个人笔记本电脑去部署一个MySQL数据库,其实也能支撑那种低并发系统的运行。
因为那种系统可能每隔几分钟才会有一波请求发到数据库上去,而且数据库里一张表也许就几百条、几千条或者几万条数据,数据量很小,并发量很小,操作频率很低,用户量很小,并发量很小,只不过可能系统的业务逻辑很复杂而已。对于这类系统的数据库机器选型,就不在我们的考虑范围之内了。
我们主要关注的是有一定并发量的互联网类的系统,对数据库可能会产生每秒几百,每秒几千,甚至每秒上万的并发请求量,对于这类场景下,我们应该选择什么样的机器去部署数据库,才能比较好的抗下我们的系统压力。
3、普通的Java应用系统部署在机器上能抗多少并发?
通常来说,根据我们的经验值而言,Java应用系统部署的时候常选用的机器配置大致是2核4G和4核8G的较多一些,数据库部署的时候常选用的机器配置最低在8核16G以上,正常在16核32G
那么以我们大量的高并发线上系统的生产经验观察下来而言,一般Java应用系统部署在4核8G的机器上,每秒钟抗下500左右的并发访问量,差不多是比较合适的,当然这个也不一定。因为你得考虑一下,假设你每个请求花费1s可以处理完,那么你一台机器每秒也许只可以处理100个请求,但是如果你每个请求只要花费100ms就可以处理完,那么你一台机器每秒也许就可以处理几百个请求。
所以一台机器能抗下每秒多少请求,往往是跟你每个请求处理耗费多长时间是关联的,但是大体上来说,根据我们大量的经验观察而言,4核8G的机器部署普通的Java应用系统,每秒大致就是抗下几百的并发访问,从每秒一两百请求到每秒七八百请求,都是有可能的,关键是看你每个请求处理需要耗费多长时间。
4、高并发场景下,数据库应该用什么样的机器?
对于数据库而言,我们刚才也说过了,通常推荐的数据库至少是选用8核16G以的机器,甚至是16核32G的机器更加合适一些。
因为大家要考虑一个问题,对于我们的Java应用系统,主要耗费时间的是Java系统和数据库之间的网络通信。对Java系统自己而言,如果你仅仅只是系统内部运行一些普通的业务逻辑,纯粹在自己内存中完成一些业务逻辑,这个性能是极高极高的。
对于你Java系统接收到的每个请求,耗时最多的还是发送网络请求到数据库上去,等待数据库执行一些SQL语句,返回结果给你。
所以其实我们常说你有一个Java系统压力很大,负载很高,但是其实你要明白一点,你这个Java系统其实主要的压力和复杂都是集中在你依赖的那个MySQL数据库上的!
因为你执行大量的增删改查的SQL语句的时候,MySQL数据库需要对内存和磁盘文件进行大量的IO操作,所以数据库往往是负载最高的!这个问题我们在之前4篇文章里,通过MySQL数据库架构原理的分析,都已经讲解过了。
而你的Java系统一般并不需要你去直接大量的读写本地文件进行耗时的IO操作吧?是不是,想必做过Java开发的朋友一下子就会想明白这个道理。
所以往往对一个数据库而言,都是选用8核16G的机器作为起步,最好是选用16核32G的机器更加合适一些,因为数据库需要执行大量的磁盘IO操作,他的每个请求都比较耗时一些,所以机器的配置自然需要高一些了。
然后通过我们之前的经验而言,一般8核16G的机器部署的MySQL数据库,每秒抗个一两千并发请求是没问题的,但是如果你的并发量再高一些,假设每秒有几千并发请求,那么可能数据库就会有点危险了,因为数据库的CPU、磁盘、IO、内存的负载都会很高,弄不数据库压力过大就会宕机。
对于16核32G的机器部署的MySQL数据库而言,每秒抗个两三千,甚至三四千的并发请求也都是可以的,但是如果你达到每秒上万请求,那么数据库的CPU、磁盘、IO、内存的负载瞬间都会飙升到很高,数据库也是可能会扛不住宕机的。
所以这就是对于数据库,我们一般推荐选用的机器的配置,以及他大致可以抗下多高的并发请求量的经验分享。
另外对于数据库而言,如果可以的话,最好是采用SSD固态硬盘而不是普通的机械硬盘,因为数据库最大的复杂就在于大量的磁盘IO,他需要大量的读写磁盘文件,所以如果能使用SSD固态硬盘,那么你的数据库每秒能抗的并发请求量就会更高一些。
5、今日思考题
今天想留给大家一个小的思考题:假设你开发的Java系统部署在一台4核8G的机器上,那么我们假设这个Java系统处理一个请求非常非常快,每个请求只需要0.01ms就可以处理完了,那你觉得这一台机器部署的Java系统,可以实现每秒抗下几千并发请求吗?可以实现每秒抗下几万并发请求吗?
边栏推荐
- Simple solution to phpjm encryption problem free phpjm decryption tool
- 在CANoe中通過Panel面板控制Test Module 運行(初級)
- A wave of open source notebooks is coming
- Redis集群方案应该怎么做?都有哪些方案?
- Learning SCM is of great help to society
- CANoe仿真功能之自动化序列(Automation Sequences )
- 竞赛vscode配置指南
- Routes and resources of AI
- 颜值爆表,推荐两款JSON可视化工具,配合Swagger使用真香
- Several silly built-in functions about relative path / absolute path operation in CAPL script
猜你喜欢
Single chip microcomputer realizes modular programming: Thinking + example + system tutorial (the degree of practicality is appalling)
jar运行报错no main manifest attribute
Automation sequences of canoe simulation functions
A wave of open source notebooks is coming
How can I take a shortcut to learn C language in college
Contest3145 - the 37th game of 2021 freshman individual training match_ C: Tour guide
一大波開源小抄來襲
Redis集群方案应该怎么做?都有哪些方案?
机械工程师和电气工程师方向哪个前景比较好?
C miscellaneous two-way circular linked list
随机推荐
Safety notes
在CANoe中通過Panel面板控制Test Module 運行(初級)
51单片机进修的一些感悟
Automation sequences of canoe simulation functions
15 医疗挂号系统_【预约挂号】
Selection of software load balancing and hardware load balancing
Docker MySQL solves time zone problems
May brush question 02 - string
在CANoe中通过Panel面板控制Test Module 运行(初级)
33岁可以学PLC吗
Combined search /dfs solution - leetcode daily question - number of 1020 enclaves
Teach you how to write the first MCU program hand in hand
安装OpenCV时遇到的几种错误
CANoe下载地址以及CAN Demo 16的下载与激活,并附录所有CANoe软件版本
C miscellaneous lecture continued
Function description of shell command parser
flask运维脚本(长时间运行)
Mexican SQL manual injection vulnerability test (mongodb database) problem solution
通过bat脚本配置系统环境变量
Regular expressions are actually very simple