数据库服务器,Web服务器 – 服务器之间的RAM与服务器负载关系

我们有一个网站运行在2个服务器上:1个数据库服务器,1个networking服务器。 我们的理解是,我们在networking服务器上有4GB的RAM,在数据库服务器上有8GB的RAM。

该网站数据库密集,每个页面上有许多查询。

值得一提的是,我们最近发现数据库服务器正在运行32位,我们认为这意味着8GB的内存不能被利用。 因此,我们假设4 GB是数据库服务器上的所有内容。

该网站没有达到最佳状态,我们正试图了解如何调整它。

它目前接近高峰stream量,这就是我们的服务器负载/内存看起来像:

我们的networking服务器:服务器负载0.49(4个CPU)使用的内存59.72%(4,137,968中的2,471,180)交换使用0.01%(2,096,440中的120)

我们的数据库服务器:服务器负载2.8(8个CPU)使用的内存10.76%(8,300,376中的893,004)交换使用了0.01%(2,096,440中的116)

以下是问题:

这是否表明我们的数据库服务器在2.8的负载下运行效率低下,但内存只有10%(即使只有4GB的内存,这仍然只有20%)?

如果是这样,这是我们应该在my.cnf文件中解决的问题?

什么是思考记忆的好方法? “使用的内存”越高越好,说明它正在利用资源,还是更好? 效率低下还是效率低下,10%是非常低的?

在此先感谢您的任何见解。

8 CPU服务器上的2.8负载并不是真正的问题。 8以上的负载是。

对于任何数据库,您都希望至less所有的索引都适合RAM,并且还有其他一些MySQL任务可供使用,并caching经常访问的数据。

您可能需要在my.cnf中增加一些值,具体取决于您使用InnoDB表,MyISAM表还是两种types。

如果需要的话,你真的不应该害怕让MySQL吃更多的RAM,毕竟它是一个专用的数据库服务器。

以下查询应该为您提供给定数据库的索引大小。

SELECT CONCAT( ROUND( SUM( index_length ) / ( 1024 *1024 ) , 2 ) , ' MB' ) AS 'Index Size' FROM information_schema.TABLES WHERE table_schema LIKE 'dbname' 

这不能直接回答你的问题,但是如果你不是没有使用内存(交换),并且你的负载平均值不是很差(他们看起来不是这样),那么你的问题很可能在应用程序级而不是硬件相关(禁止任何其他硬件问题,如iSCSI,NAS,networking问题)

你做了彻底的数据库优化? 您的查询需要多长时间才能运行?

您可以通过监视哪些查询运行得最多,logging缓慢查询(例如,需要2秒以上的查询)以及使用丰富的EXPLAIN语句来查看查询执行计划来了解这一点。 问题是,如果你的查询正在对大量的无序数据进行全表扫描,而不是仅仅search在RAM中加载的索引,那么RAM不会帮你太多。

你也可以通过从前端查询服务器的负载来帮助你,例如使用memcached。

网上有大量资源用于优化数据库,增加索引等。

希望这有助于和祝你好运!

[..]假设4 GB是数据库服务器上的所有内容[..]使用的内存10.76%(8,300,376的893,004)[..]

你显然运行一个32Bit Bigmem内核,解决全部8GB。

数据库服务器在2.8负载下运行

你有没有检查,如果数据库服务器的负载从I / O等待的结果? 在我看来,你的系统是足够强大的CPU和RAM,但可能会受到一个缓慢的存储子系统。

顶部显示了CPU线中%wa参数的含义?