3
如何提高MS SQL Server中原始查询的性能?
我有一个ASP.NET网站,它拥有自己的独立数据缓存,并且数据不会长时间更改,因此它不需要使用相同的查询第二次查询SQL Server。我需要提高转到该SQL Server的首次(原始)查询的性能。一些查询处理的数据太多,可能导致SQL Server使用tempdb。我不使用临时表变量或临时表,因此SQL Server决定tempdb在需要时自行使用。 我的数据库大小为16Gb,服务器计算机上有32Gb的物理RAM。 我了解MS SQL Server缓存策略会尝试将数据保留在RAM中,以加快类似查询的性能(如果它们需要再次加载相同的数据)。除此之外,它将尝试使用可用的RAM代替tempdb来提高性能,而不会引起磁盘访问。 我想当需要在tempdb SQL Server中存储一些内容的查询出现并且没有足够的RAM可用时,SQL Server有2个选择: 1)卸载一些缓存的数据并使用备用的RAM代替tempdb以避免磁盘写入 2)保留缓存的数据以备将来查询,并开始使用tempdb,这会导致写入慢速磁盘。 我不知道在这种情况下SQL Server会做出什么选择,但我希望它成为选择#1,因为我只关心首次查询(原始)的性能,因为我再也不会向SQL Server发送相同的查询了。 (尽管我可能会发送类似的查询)。 在这种情况下,SQL Server缓存策略是什么? 在避免针对原始查询的tempdb和第二次查询的速度之间,如何平衡RAM的使用? 是否可以以选择#1的方式配置SQL Server?如果是,那怎么办? 我还能如何提高所有原始SQL查询的性能? 由于我不了解SQL Server缓存策略,因此我想将数据库放在RAM磁盘上。这将确保即使SQL Server始终选择#1,任何原始查询都可以高速加载未缓存的数据。这样做的风险是,如果SQL Server继续选择#2,则可能会开始使用更多具有较少可用RAM的tempdb(在我将16Gb用于RAM磁盘后仅剩下16Gb),这将减慢那些导致溢出的原始查询的速度tempdb。 我对SQL 2008 R2的解决方案感兴趣,但是我想对于SQL 2008,SQL 2005可能是相同的,并且可能是SQL 2000。 说明: 该框上没有其他应用程序在运行,它专用于SQL Server。网站在单独的框中运行。 它是Windows Server 2008 R2 Enterprise 64位上的SQL Server 2008 R2 Standard Edition 64位。 …