0
Posted on Tuesday, December 29, 2015 by 醉·醉·鱼 and labeled under
引用: https://technet.microsoft.com/en-us/library/ms181055(v=sql.105).aspx
https://www.youtube.com/watch?list=PLoGAcXKPcRvanix7u9eqg_qt1tp849rX3&v=p-6ii2NiUI0

MSDN上面有这么一段关于plan cache的文章。大致就是说

  1. 当没有cached query plan 的时候,执行query就会创建一个query plan并被cache起来。
  2. 下面这些操作可以导致cached plan被清掉
    • SERVER RESTART/DATABASE LEVEL CHANGES/CONFIGURATION CHANGES
    • DBCC FREEPROCCACHE/DBCC FREESYSTEMCACHE/SP_RECOMPILE
    • DROP & RECREATE SP
    • Object changes,包括view,table,statistics
    • 长时间没用
MSDN提到,SQL SERVER采用了基于COST的机制去清理query plan。如果当前没有内存压力,SQL SERVER 不会去清query plan。如果有内存压力,SQL SERVER回去验证每个query plan,并且降低他们的currect cost,直至0。一旦当它变成0并且内存压力来的时候,每次验证的同时就会清掉这个plan。如果在这之前这个query plan被用掉,那current cost又会被reset成最原来的cost,即不会被清掉。



0
Responses to ... Query plan如何自动被清掉

Post a Comment