数据库是当代信息系统中最关键的组件之一,它是数据管理、处理和交换的核心部分。由于现代数据库系统的复杂性和性能需求的挑战,一个关键的问题是如何有效地评估数据库系统的资源需求,尤其是CPU资源。在本文中,我们将讨论如何衡量数据库运行所需的CPU数量。

之一部分:CPU运行原理

CPU是计算机的核心部件,它是一种集成电路芯片,负责处理计算机的指令和运算。它由控制单元、算术逻辑单元、高速缓存和寄存器等组成。当操作系统启动时,它会将一些核心程序和相应的资源加载到内存中,这些程序需要利用CPU处理器的能力进行计算和操作。

在数据库应用程序运行时,CPU是数据库系统中的一个重要组件。它执行的操作包括SQL查询语句解析、索引查找、排序、连接、聚集等,其处理速度会直接影响数据库的响应速度和性能。因此,正确地衡量和配置CPU资源对于提高数据库效率至关重要。

第二部分:CPU利用率

在计算机系统中,CPU利用率(或CPU负载)是衡量系统性能的一个重要指标。它通常以百分比的形式呈现,并表示CPU正在运行进程的时间百分比。当CPU利用率接近100%时,表示该CPU正处于高负载状态,它可能会出现瓶颈问题。

在数据库系统中,CPU负载通常受到以下几个因素的影响:

1. 数据库的访问模式:不同的数据访问模式会产生不同的CPU负载水平。例如,当运行有大量的写操作(如插入、更新、删除)时,CPU的利用率通常较高。相反,只读操作(如查询)通常对CPU负载产生较小的影响。

2. 数据库的复杂度:复杂的查询或计算操作需要更多的CPU处理能力,因此会增加CPU的利用率。如大量的连接查询、复杂的聚合查询、排序和分页等。

3. 数据库系统的规模:规模更大的数据库系统通常需要更多的CPU资源来支持运行。因此,随着数据库规模的扩大,需要增加CPU数量来满足要求。

第三部分:确定CPU数量

确定CPU数量是一个复杂的过程,需要考虑多个因素,包括以下几个方面:

1. 应用程序性能需求:当前的应用程序是否需要更高的性能?如果是,增加CPU数量可能是一个解决方案。但需要注意的是,增加CPU不一定会带来线性的性能提升,并且需要投入更多的成本。

2. 现有硬件资源:在增加CPU数量之前,需要评估现有硬件资源的使用情况,以确保系统的其他组件(如内存、存储)也能支持增加CPU数量。

3. 预算:增加CPU数量需要投入更多的成本,包括硬件成本、部署成本、成本效益等。在确定CPU数量之前需要全面评估预算,并考虑采用云计算等技术来提高成本效益。

4. 负载均衡:在增加CPU数量之前,需要考虑负载均衡的问题,确保增加的CPU资源能够被充分利用。这需要根据负载的性质和数据库系统架构进行调整。

综上所述,确定数据库运行所需的CPU数量是一个复杂的问题,需要全面考虑多个因素。根据数据库的访问模式、复杂度和系统规模等因素,我们可以初步估算所需的CPU数量,然后进行实验测试和性能监控,最终确定更优CPU数量。这样可以确保数据库系统能够充分利用CPU资源,提高系统的性能,优化资源的利用,进而提高数据库应用的质量和效率。

相关问题拓展阅读:

如何选择数据库服务器硬件配置!急

这个….你有没有钱?

按你这么说性能需要提升30倍啊!

需要目前45nm四核至强CPU

不少于2GB的DDRECQ内存(更好能买到低周期的CL)

主板买的,这个牌子的服务器主板还是做的不错的!

显卡,用上面主板集成的就行了

硬盘你需要买个上万转的!推荐的!性能不错!

买机箱一定返旅要注意!牢渗世派固!结实!

电源买的节能静音的型号,这牌子稳定!省丛贺电!

数据库消耗内存大还是cpu大

作者 王文安,腾讯CSIG数据库专项的数据库工程师,主要负责腾讯云数据库 MySQL 的相关的工作,热爱技术,欢迎留言进行交流。文章首发于腾讯云+社区的腾讯云数据库专家服务专栏。

在日常工作中,发现 MySQL 的状态不太对劲的时候,一般都会看看监控指标,很多时候会看到熟悉的一幕:CPU 使用率又爆了。本文将给大家介绍 MySQL 和 CPU 之间的关系,对此有一定的了解之后可以更准确的判断出问题的原因,也能够提前发现一些引发 CPU 问题的隐患。

怎么看懂CPU使用率

以 Linux 的 top 命令为例,效果如下:

Top 命令

在 %CPU 这一列就展示了 CPU 的使用情况,百分比指代的是总体上占用的时间百分比:

%us:表示用户进程的 CPU 使用时间(没有通过 nice 调度)

%sy:表示系统进程的 CPU 使用时间,主要是内核使用。

%ni:表示用户进程中,通过 CPU 调度(nice)过的使用时间。

%id:空闲的 CPU 时间

%wa:CPU 运行时在等待 IO 的时间

%hi:CPU 处理硬中断花费的时间

%si:CPU 处理软中断花费的时间

%st:被虚拟机偷走的 CPU 时间

通常情况下,我们讨论的 CPU 使用率过高,指的是 %us 这个指标,监控里面的 CPU 使用率通常也是这个值(也有用其他的方法计算出来的,不过简单起见,不考虑其他的情况 )。其他几个指标过高也代表出 MySQL 的状态异常,简单起见,这里主要还是指 %us 过高的场景。

MySQL和线程

MySQL 是单进程多线程的结构,意味着独占的 MySQL 服务器里面,只能用 top 命令看到一行数据。

TOP 命令效果

这里能看到的是 MySQL 的进程 ID,如果要看到线程的情况,需要用top -H

TOP 命令效果

在这里能看到的是 MySQL 各个线程的 ID,可以看到 MySQL 在启动之后,会创建非常多的内部线程来工作。

这些内部线程包括 MySQL 自己用来刷脏,读写数据等操作的系统线程,也包括处理用户 SQL 的线程,姑且叫做用户线程吧。用户线程有一个特殊的地方:程序端发送到 MySQL 端的 SQL,只会由一个用户线程来执行(one-thread-per-connection),所以 MySQL 在处理复杂查询的时候,会出现“一核有难,多核围观”的尴尬现象。

参考 %us 的定义,对于 Linux 系统来说,MySQL 进程和它启动的所有线程都不算内核进程,因此 MySQL 的系统线程和用户线程在繁忙的时候,都会体现在 CPU 使用率的 %us 指标上。

什么时候CPU会100%

MySQL 干什么的时候,CPU 会 100%?从前文的分析来看,MySQL 主要是两类线程占用 CPU:系统线程和用户线程。因此 MySQL 独占的服务器上,只需要留意一下这两类线程的情况,就能 Cover 住绝大部分的问题场景。

系统线程

在实际的环境中,系统线程遇到问题的情况会比较少,一般来说,多个系统线程很少会同时跑满,只要服务器的可用核心数大于等于 4 的话,一般也不会遇到 CPU 100%,当然有一些 bug 可能会有影响,比如这个:

MySQL BUG

虽然情况比较少,但是在面对问题的常规排查过程中,系统线程的问题也是需要关注的。

用户线程

提到用户线程繁忙,很多时候肯定会之一时间凭经验想到慢查询。确实 90% 以上的时候都是“慢查询”引起的,不过作为方法论,还是要根据分析再去得出结论的~

参考 us% 的定义,是指用户线程占用 CPU 的时间多少,这代表着用户线程占用了大量的时间。

一方面是在进行长时间的计算,例如:order by,group by,临时表,join 等。这一类问题可能是查询效率不高,导致单个 SQL 语句长时间占用 CPU 时间,也有可能是单纯的数据量比较多,导致计算量巨大。另一方面是单纯的 QPS 压力高,所以 CPU 的时间被用满了,比如 4 核的服务器用来支撑 20k 到 30k 的点查询,每个 SQL 占用的 CPU 时间并不多,但是因为整体的 QPS 很高,所以 CPU 的时间被占满了。

问题的定位

分析完之后,就要开始实战了,这里根据前文的分析给出一些经典的 CPU 100% 场景,并给出简要的定位方法作为参考。

PS:系统线程的 bug 的场景 skip,以后有机会再作为详细的案例来分析。

慢查询

在 CPU 100% 这个问题已经发生之后,真实的慢查询和因为 CPU 100% 导致被影响的普通查询会混在一起,难以直观的看 processlist 或者 slowlog 来发现尊敬的大船,这时候就需要一些比较明确的特征来进行甄别。

从前文的简单分析可以看出来,查询效率不高的慢查询通常有以下几种情况:

全表扫描:Handler_read_rnd_next 这个值会大幅度突增,且这一类查询在 slowlog 中 row_examined 的值也会非常高。

索引效率不高,索引选错了:Handler_read_next 这个值会大幅度的突增,不过要注意这种情况也有可能是业务量突增引起的,需要结合 QPS/TPS 一起看。这一类查询在 slowlog 中找起来会比较麻烦,row_examined 的值一般在故障前后会有比较明显的不同,或者是不合理的偏高。

比如数据倾斜的场景,一个小范围的 range 查询在某个特定的范围内 row_examined 非常高,而其他的范围时 row_examined 比较低,那么就可能是这个索引效率不高。

排序比较多:order by,group by 这一类查询通常不太好从 Handler 的指标直接判断,如果没有索引或者索引不好,导致排序操作没有消除的话,那么在 processlist 和 slowlog 通常能看到这一类查询语句出现的比较多。

当然,不想详细的分析 MySQL 指标或者是情况比较紧急的话,可以直接在 slowlog 里面用 rows_sent 和 row_examined 做个简单的除法,比如 row_examined/rows_sent > 1000 的都可以拿出来作为“嫌疑人”处理。这类问题一般在索引方面做好优化就能解决。

PS:1000 只是个经验值,具体要根据实际业务情况来定。

计算量大

这一类问题通常是因为数据量比较大,即使索引没什么问题,执行计划也 OK,也会导致 CPU 100%,而且结合 MySQL one-thread-per-connection 的特性,并不需要太多的并发就能把 CPU 使用率跑满。这一类查询其实是是比较好查的,因为执行时间一般会比较久,在 processlist 里面就会非常显眼,反而是 slowlog 里面可能找不到,因为没有执行完的语句是不会记录的。

这一类问题一般来说有三种比较常规的解决方案:

读写分离,把这一类查询放到平时业务不怎么用的只读从库去。

在程序段拆分 SQL,把单个大查询拆分成多个小查询。

使用 HBASE,Spark 等 OLAP 的方案来支持。

高 QPS

这一类问题单纯的就是硬件资源的瓶颈,不论是 row_examined/rows_sent 的比值,还是 SQL 的索引、执行计划,或者是 SQL 的计算量都不会有什么明显问题,只是 QPS 指标会比较高,而且 processlist 里面可能什么内容都看不到,例如:

processlist

总结

实际上 CPU 100% 的问题其实不仅仅是单纯的 %us,还会有 %io,%sys 等,这些会涉及到 MySQL 与 Linux 相关联的一部分内容,展开来就会比较多了。本文仅从 %us 出发尝试梳理一下排查&定位的思路和方法,在分析 %io,%sys 等方面的问题时,也可以用类似的思路,从这些指标的意义开始,结合 MySQL 的一些特性或者特点,逐步理清楚表象背后的原因。

Cpu消耗大,主要看编写什么样的程序了。

简单的程序如果代码不是很多,速度追求也不是很高,通用的CPU和内存就可以了。

大型程序的话就得考虑CPU指令集的丰富程度了,复杂指令的效率比较高,可以减少代码执行时间。 内存自然是越大越好,要配合操作系统的寻址范围和管理方式。

比如大型的有丰富画面的游戏软件,不仅要求cpu、内存高,还对显卡要求高。

而数据量很大的连接数据库的管理软件编写,主要要求高内存

数据库需要多少cpu的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库需要多少cpu,数据库运行所需CPU数量如何衡量?,如何选择数据库服务器硬件配置!急,数据库消耗内存大还是cpu大的信息别忘了在本站进行查找喔。


新软师兄 » 数据库运行所需CPU数量如何衡量? (数据库需要多少cpu)
50T免费网盘资源大集合【持续更中~~~~】:点击查看

dase kand pornhan.mobi xvideo desi gay pcso 2pm result today pinoytvfriends.com where i can watch bad romeo كلام فى النيك wfporn.com قصص محارم حديثة busporn porngugu.mobi indian sexx vedios sex ka video noticieroporno.com himachal pradesh sex com
nero hentai hentaitgp.com ламия хентай www.mom xxx.com alohaporn.me sahara knite mature fucking tubepatrolporn.com bhabi sex indian girl sex gotporn.mobi xnxx family strocks ang probinsyano july 20 2022 full episode youtube pilipinoteleserye.com ano ang pambansang sasakyan ng pilipinas
احلي سكس محارم pornxporn.org نيك فلاحى multi.xnxx alohaporn.net telugu sex chart سكس قصيرات arabysexy.org نيك نقاب www assames sex com umora.info desi sexy bhabi 8teenx bukaporn.com india hot sex videos