所以......如果我的BufferPoolCommitMemoryGB变量大于14.99,我试图让我的清除缓存语句运行。我的语法是否正确?提前谢谢!
ActorIdentity(correlationId, actorRef)
我的语法(尤其是IF语句)是否正确?我究竟做错了什么?我有点困惑的原因是,如果GB不高于14.99,我不知道第二个条件陈述应该是什么
提前致谢!
答案 0 :(得分:0)
这里有一些不同的问题。
首先,IF...
块的语法不正确。它应该是
IF @BufferPoolCommittedMemoryGB > 14.99
BEGIN
DBCC FreeProcCache
DBCC FreeSystemCache
DBCC FreeSessionCache
END
(BEGIN
不是THEN
)
SELECT
语句中的语法错误会将值插入临时表:
CAST ((bpool_commit_target * 8) / (1024.0 * 1024.0) AS DECIMAL (20, 2)) AS BufferPoolTargetMemoryGB,
(在)
之前遗失AS BufferPoolTargetMemoryGB
)
但是这不会修复查询;在IF
块中,您要测试未赋值的变量(@BufferPoolCommittedMemoryGB
)的值。您需要在测试之前为@BufferPoolCommittedMemoryGB
设置一个值,或者可能(并且我在这里猜测您的意图),直接测试临时表中的值:
IF (SELECT BufferPoolCommittedMemoryGB FROM #TempTable) > 14.99
在不知道您尝试解决的情况的具体情况之后,我倾向于建议刷新整个缓冲池可能不是一个好主意;缓存中可能存在查询计划和数据页面,这些页面最好保留在那里。
optimize for ad hoc workloads
设置?