如果数据库大于RAM,SQL server的性能是否会急剧下降?或者只有索引必须放入内存中?我知道这很复杂,但凭经验?
发布于 2010-05-23 17:56:20
是的,当索引无法放入内存或执行全表扫描时。对不在内存中的数据执行聚合函数也需要多次(可能是随机的)磁盘读取。
对于一些基准:
查询时间将在很大程度上取决于受影响的数据当前是驻留在内存中还是需要访问磁盘。对于磁盘密集型操作,磁盘顺序和随机I/O性能的特征也很重要。
http://www.sql-server-performance.com/articles/per/large_data_operations_p7.aspx
因此,如果您的数据库大小>内存大小,则不要期望相同的性能。
编辑: http://highscalability.com/充满了这样的例子:
一旦数据库在内存中放不下,你就会碰壁。
http://highscalability.com/blog/2010/5/3/mocospace-architecture-3-billion-mobile-page-views-a-month.html
或者在这里:
即使DB大小仅比RAM大小大10%,该测试也显示性能下降了2.6倍。http://www.mysqlperformanceblog.com/2010/04/08/fast-ssd-or-more-memory/
不过,请记住,这是针对热数据的,即您想要查询但不能缓存的数据。如果可以,您可以轻松地使用显著较少的内存。
发布于 2010-05-21 16:03:36
只有工作集或公共数据或当前使用的数据需要放入缓冲区缓存(也称为数据缓存)。这也包括索引。
还有计划缓存,网络缓冲区+其他东西。微软在SQL Server的内存管理上投入了大量的工作,而且效果很好,IMHO。
一般来说,更多的RAM会有所帮助,但这并不是必需的。
发布于 2010-05-21 15:37:56
所有的数据库操作都必须通过写入磁盘来备份,拥有更多的RAM是有帮助的,但不是必须的。
https://stackoverflow.com/questions/2880302
复制相似问题