MySQL: 5 生产环境下的数据库机器配置

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL: 5 生产环境下的数据库机器配置相关的知识,希望对你有一定的参考价值。

1.数据库规划

对于数据库,我们该做到如下的了解和熟悉。

熟悉数据库的整体架构原理,以及如何规划生产环境下的数据库,包括当你有一个生产库之后,要做的事情就是涉及压测方案,包括对你的数据库进行压测,包括对你的数据库部署可视化监控系统,等等。

完成上述的事情之后,才是开始去开发你的Java系统,去操作你的数据库,实现各种各样的业务功能和逻辑。

2.生产数据库一般用什么配置的机器

这里主要了解生产环境下的单机数据库服务大致需要什么样的机器配置,以及可以抗下多少并发访问。

2.1 普通的Java应用系统部署在机器上能抗多少并发?

Java应用系统部署的时候常选用的机器配置大致是2核4G和4核8G的多一些,数据库部署的时候常选用的机器配置最低在8核16G以上,正常在16核32G。

在高并发线上系统的生产中,Java应用系统部署在4核8G的机器上,每秒中抗下500左右的并发访问量。但也不一定,这受到请求处理效率的影响。

假设每个请求花费1s可以处理完,那么一台机器每秒也许只可以处理100个请求,但是如果每个请求只花费100ms就可以处理完,那么一台机器每秒也许就可以处理几百个请求。

总的来说,4核8G的机器部署普通的Java应用系统,并发访问为每秒一两百请求到每秒七八百请求之间。

2.2 高并发场景下,数据库的服务器配置

当一个Java系统压力很大,负载很高。其实它主要的压力和负载都是集中在依赖的那个mysql数据库上的。

因为在执行大量的增删改查的SQL语句的时候,MySQL数据库需要对内存和磁盘文件进行大量的IO操作,所以数据库往往是负载最高的。

这种场景下,选用8核16G的机器作为起步,最优选用16核32G的机器更加合适一些,因为数据库需要执行大量的磁盘IO操作,它的每个请求都比较耗时一些,所以机器的配置自然需要高一些了。

一般8核16G的机器部署的MySQL数据库,每秒抗个一两千并发请求是没问题的。但是如果达到每秒几千并发请求,那么数据库的CPU、磁盘、IO、内存的负载瞬间都会飙升到很高,数据库也是可能会扛不住宕机的。

而对于16核32G的机器部署的MySQL数据库而言,每秒抗个两三千,甚至三四千的并发请求也都是可以的,但是如果达到每秒上万请求,那么数据库的CPU、磁盘、IO、内存的负载瞬间都会飙升到很高,数据库也是可能会扛不住宕机的。

由于数据库最大的负载是在于大量的磁盘IO,需要大量的读写磁盘文件,所以如果能使用SSD固态硬盘,那么数据库每秒能抗的并发请求就会更高一些。

3. 思考

假设开发的Java系统部署在一台4核8G的机器上,那么我们假设这个Java系统处理一个请求非常非常快,每个请求只需要0.01ms就可以处理完了,那么你觉得这一台机器部署的Java系统,可以实现每秒几千并发请求吗?可以实现每秒抗下几万并发请求吗?

答:每个请求处理0.01ms,应该是不涉及磁盘的纯内存操作。

在4核8G的机器上,也就是同时有4个线程数为最佳,多了反而会由于竞态问题导致频繁上下文切换,浪费性能。

理论上的并发请求数量

这里按照数据库使用3个线程,另一个CPU核心线程给其他进程使用。

在不考虑网卡资源的情况下,理论上可以实现每秒 3 * 1s/0.01ms = 30万请求。

生产环境下的影响因素

在真实生产环境下,还需要考虑很多的因素。生产环境必然不只是有4个线程在工作,那么就导致会存在CPU线程竞态切换的时间;当并发量高的时候还要算下内存消耗发生YGC和Full GC的STW时间也算进去;当并发很高,对CPU负载也很高,处理会变慢,此时TPS会很长。还有磁盘IO、网卡等因素也需要考虑进去。

此时,按照均值每个请求所需要的耗时可能达到100ms左右。

以上是关于MySQL: 5 生产环境下的数据库机器配置的主要内容,如果未能解决你的问题,请参考以下文章

MySQL: 21 生产经验:在生产环境中,基于机器配置来合理设置Buffer Pool

生产环境下的配置和使用

Windows下MySQL生产环境配置

数据仓库006 - MySQL 5.6.x - Linux最佳生产环境离线部署

Django uwsgi Nginx 的生产环境部署

MySQL5.5.32生产环境大内存优化配置实例