我正在寻找关于添加更多 RAM 会提高多少服务器性能的意见和资源。哪些因素会起作用?是否有可以执行的通用计算?
答案1
这完全是主观的……
- 您是否使用 SQL Server 2005 作为 64 位程序?
- 数据库是服务器上唯一的应用程序吗?
- 您是否对服务器进行了性能分析,以查看是否存在内存不足的问题? 还是磁盘 I/O? 还是网络? 还是处理器?
如果您发现性能出现问题,则需要确定瓶颈在哪里并从那里开始。使用 Windows 性能监视器可能会有所帮助。随机使用硬件来解决问题可能根本没有帮助(尽管内存通常不会造成影响)。
答案2
一般来说,如果工作数据集完全适合 RAM,则可以从数据库获得最佳性能。工作集是查询定期读取的数据子集(更新和插入总是会访问数据库,因此更多的 RAM 不一定能加快速度)。因此,首先您需要确定缓存所有相关数据真正需要多少内存。然后您需要研究为 SQL 服务器提供该 RAM 的最佳方法。
答案3
据我所知,没有任何计算可以预测基于给定内存量增加的性能提升。两者之间的关系不是线性的,而且正如其他人所指出的那样,总是有其他因素参与其中。不过,假设您在其他地方没有遇到巨大的瓶颈,那么添加 RAM 几乎总是有帮助的。
还有一点需要注意:如果您运行的是 32 位版本的 Windows 和/或 SQL Server,则 RAM 数量会受到限制,介于 2GB 和 4GB 之间,具体取决于两台服务器的配置。如果您升级两个都对于 64 位版本,您可以使用超过 4GB 的 RAM 来提高性能。
答案4
正如 Bart 所建议的,您需要隔离并识别服务器上的主要瓶颈,并解决它们以获得最佳性能。由于您已经在使用 SQL Server 2005,因此您可以使用服务器上的等待统计数据。这是 Glenn 的诊断查询中的一个查询。这是链接。http://glennberrysqlperformance.spaces.live.com/blog/cns!45041418ECCAA960!1340.entry
-- 隔离自上次重启或清除统计信息以来服务器实例的最大等待 WITH Waits AS (SELECT wait_type, wait_time_ms / 1000. AS wait_time_s, 100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct, ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn FROM sys.dm_os_wait_stats WHERE wait_type NOT IN( 'SLEEP_TASK', 'BROKER_TASK_STOP', 'SQLTRACE_BUFFER_FLUSH', 'CLR_AUTO_EVENT', 'CLR_MANUAL_EVENT', 'LAZYWRITER_SLEEP')) -- 过滤掉额外的不相关的等待 SELECT W1.wait_type, CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s, CAST(W1.pct AS DECIMAL(12, 2)) AS pct, CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct FROM Waits AS W1 INNER JOIN Waits AS W2 ON W2.rn话虽如此,一般来说,SQL Server 主要受内存、IO 和 CPU 的限制,并且主要按此顺序排列。您需要使用 perfmon/sql server DMV 查看页面预期寿命值。如果内存更多,SQL Server 会蓬勃发展。但请注意,我反对在问题上投入硬件,因为最好在 TSQL 领域处理。最有可能的是,您需要查看执行大多数 IO 的查询(这些查询可能会破坏缓冲池)、创建有意义的索引、删除未使用的索引、处理缺失的索引或优化 sql。优化 sql 通常是人们由于缺乏技能而失败的地方。