【发布时间】:2013-06-14 07:04:09
【问题描述】:
是否有可能在执行 select 语句后清除缓存?
我尝试使用我的一个 sql,第一次执行它,它返回我 3.15 分钟,第二次(尝试更改任何东西)它返回我 2.55 分钟。
在sql上测试实际性能对我来说有点乏味。
我在this 帖子上发现 Sql Server 2005 上有缓存。
我对 sql server 2008 上的缓存是否正确?
【问题讨论】:
标签: sql sql-server-2008 caching
是否有可能在执行 select 语句后清除缓存?
我尝试使用我的一个 sql,第一次执行它,它返回我 3.15 分钟,第二次(尝试更改任何东西)它返回我 2.55 分钟。
在sql上测试实际性能对我来说有点乏味。
我在this 帖子上发现 Sql Server 2005 上有缓存。
我对 sql server 2008 上的缓存是否正确?
【问题讨论】:
标签: sql sql-server-2008 caching
这就是我为了同样的目的而做的:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO
DROP TABLE [WHATEVER I NEED TO DROP]
GO
TRUNCATE TABLE [WHATEVER I NEED TO EMPTY]
GO
UPDATE [WHATEVER HAS TO BE "RESET"]
GO
[DO REST OF "RESET ACTIONS" HERE]
USE [YOUR DATABASE NAME]
GO
DECLARE @start_time datetime, @end_time datetime, @miliseconds int
DECLARE @ALL_YOUR_VARS -- _YOU'LL_USE_WHILE_YOU_MEASURE
/* BECAUSE YOU DON'T WANT TO MEASURE THE TIME SPENT ON TEMP VARS YOU CREATE FOR MEASURING EXEC TIME ONLY */
-- TODO: SET VARS' VALUES HERE, SAME REASON AS ABOVE
SET @start_time = GETDATE()
-- [EXECUTE ALL YOUR STATEMENTS HERE]
-- [YOU WANT TO MEASURE]
SET @end_time = GETDATE()
SET @miliseconds = DATEDIFF(ms, @start_time, @end_time)
SELECT @start_time, @end_time, CAST(@miliseconds AS VARCHAR(max)) + ' ms'
GO
USE master
GO
SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
Set @DBName = 'YOURDBNAMEHERE'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
【讨论】: