【问题标题】:Sql Server 2008 Clear Select statement cache?Sql Server 2008 清除 Select 语句缓存?
【发布时间】: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


    【解决方案1】:

    这就是我为了同样的目的而做的:

    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

    【讨论】:

    • 我尝试使用代码 DBCC DROPCLEANBUFFERS 和 DROP FREEPROCCACHE 它返回给我的错误是“此版本的 SQL Server 不支持 DBCC 命令 'DROPCLEANBUFFERS'”,我的 sql server 版本是 SqlServer 2008 R2。是版本问题吗?我试图在此链接msdn.microsoft.com/en-us/library/ms187762.aspx 上的 Msdn 上找到它,它似乎缺少 2008 版本。不支持吗?
    • @Worgon 2005 支持它,2012 也支持,但不是 2008...奇怪...试试这些:DBCC FREESYSTEMCACHE、DBCC FREEPROCCACHE、DBCC FREESESSIONCACHE 和 DBCC FLUSHPROCINDB (db_name),如果这些,请告诉我也“不支持”。 PS.:MSDN“其他版本”列表中完全缺少 2008,因为 2008 应该支持 2005 支持的所有内容。很奇怪。现在我记得为什么我跳过了一个版本:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2010-12-24
    相关资源
    最近更新 更多