WEB开发网
开发学院数据库MSSQL Server 优化SQL Server的内存占用之执行缓存 阅读

优化SQL Server的内存占用之执行缓存

 2007-08-06 09:48:26 来源:WEB开发网   
核心提示:在论坛上常见有朋友抱怨,说SQL Server太吃内存了,优化SQL Server的内存占用之执行缓存,这里笔者根据经验简单介绍一下内存相关的调优知识,首先说明一下SQL Server内存占用由哪几部分组成,执行脚本:DECLARE @t datetimeSET @t = getdate()SET NOCOUNT ON

在论坛上常见有朋友抱怨,说SQL Server太吃内存了。这里笔者根据经验简单介绍一下内存相关的调优知识。首先说明一下SQL Server内存占用由哪几部分组成。SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer)、执行缓存(Procedure Cache)、以及SQL Server引擎程序。SQL Server引擎程序所占用缓存一般相对变化不大,则我们进行内存调优的主要着眼点在数据缓存和执行缓存的控制上。本文主要介绍一下执行缓存的调优。数据缓存的调优将在另外的文章中介绍。

对于减少执行缓存的占用,主要可以通过使用参数化查询减少内存占用。

1、使用参数化查询减少执行缓存占用

我们通过如下例子来说明一下使用参数化查询对缓存占用的影响。为方便试验,我们使用了一台没有其它负载的SQL Server进行如下实验。

下面的脚本循环执行一个简单的查询,共执行10000次。

首先,我们清空一下SQL Server已经占用的缓存:

dbcc freeproccache

然后,执行脚本:

  DECLARE @t datetime
  SET @t = getdate()
  SET NOCOUNT ON
  DECLARE @i INT, @count INT, @sql nvarchar(4000)
  SET @i = 20000
  WHILE @i <= 30000
  BEGIN
  SET @sql = 'SELECT @count=count(*) FROM P_Order WHERE MobileNo = ' + cast( @i as varchar(10) )
  EXEC sp_executesql @sql ,N'@count INT OUTPUT', @count OUTPUT
  SET @i = @i + 1
  END
  PRINT DATEDIFF( second, @t, current_timestamp )

输出:

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

1 2 3 4  下一页

Tags:优化 SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接