Pau*_*ulB 190 sql-server caching
我有一个针对SQL Server 2005运行的简单查询
SELECT *
FROM Table
WHERE Col = 'someval'
Run Code Online (Sandbox Code Playgroud)
我第一次执行查询可以采取> 15 secs.后续执行重新进入< 1 sec.
如何让SQL Server 2005不使用任何缓存结果?我试过跑步
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
但这似乎对查询速度没有影响(仍然< 1 sec).
Saa*_*aar 247
这里有一些很好的解释.看看吧.
http://www.mssqltips.com/tip.asp?tip=1360
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
Run Code Online (Sandbox Code Playgroud)
来自链接的文章:
如果所有性能测试都在SQL Server中进行,最好的方法可能是发出CHECKPOINT,然后发出DBCC DROPCLEANBUFFERS命令.虽然CHECKPOINT过程是SQL Server自动内部系统进程,并发生定期,它发出此命令写入所有脏页当前数据库到磁盘和清理缓存是很重要的.然后可以执行DBCC DROPCLEANBUFFERS命令以从缓冲池中删除所有缓冲区.
Som*_*luk 13
DBCC FREEPROCCACHE;
Run Code Online (Sandbox Code Playgroud)
用它来仔细清除计划缓存.例如,释放计划高速缓存会导致重新编译存储过程,而不是从高速缓存中重用.这可能会导致查询性能突然暂时下降.
"DBCC执行完成.如果DBCC打印出错误消息,请联系您的系统管理员."
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
Run Code Online (Sandbox Code Playgroud)
DBCC FREESYSTEMCACHE ('SQL Plans');
Run Code Online (Sandbox Code Playgroud)
DBCC FREESYSTEMCACHE ('SQL Plans', 'LimitedIOPool');
Run Code Online (Sandbox Code Playgroud)
DBCC FREEPROCCACHE ('LimitedIOPool');
Run Code Online (Sandbox Code Playgroud)
-- Get DBID from one database name first
DECLARE @intDBID INT;
SET @intDBID = (SELECT [dbid]
FROM master.dbo.sysdatabases
WHERE name = N'AdventureWorks2014');
DBCC FLUSHPROCINDB (@intDBID);
Run Code Online (Sandbox Code Playgroud)
USE AdventureWorks2014;
GO
-- New in SQL Server 2016 and SQL Azure
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Run Code Online (Sandbox Code Playgroud)
USE AdventureWorks2014;
GO
-- Run a stored procedure or query
EXEC dbo.uspGetEmployeeManagers 9;
-- Find the plan handle for that query
-- OPTION (RECOMPILE) keeps this query from going into the plan cache
SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE OBJECT_NAME (st.objectid)
LIKE N'%uspGetEmployeeManagers%' OPTION (RECOMPILE);
-- Remove the specific query plan from the cache using the plan handle from the above query
DBCC FREEPROCCACHE (0x050011007A2CC30E204991F30200000001000000000000000000000000000000000000000000000000000000);
Run Code Online (Sandbox Code Playgroud)
虽然这个问题有点陈旧,但这可能仍有帮助.我遇到了类似的问题,使用下面的选项帮助了我.不确定这是否是一个永久的解决方案,但它现在正在修复它.
OPTION (OPTIMIZE FOR UNKNOWN)
Run Code Online (Sandbox Code Playgroud)
然后你的查询将是这样的
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
Run Code Online (Sandbox Code Playgroud)
请注意,SQL Azure / SQL 数据仓库既不支持DBCC DROPCLEANBUFFERS;也不DBCC FREEPROCCACHE;支持。
但是,如果您需要重置 SQL Azure 中的计划缓存,您可以更改查询中的一个表(例如,只需添加然后删除一列),这将产生从缓存中删除计划的副作用.
我个人这样做是为了测试查询性能,而不必处理缓存计划。
EXEC sys.sp_configure N'max server memory (MB)', N'2147483646'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)
您为服务器内存指定的值并不重要,只要它与当前值不同即可.
顺便说一句,导致加速的事情不是查询缓存,而是数据缓存.
| 归档时间: |
|
| 查看次数: |
327430 次 |
| 最近记录: |