笔记16 DBCC DROPCLEANBUFFERS与DBCC freeproccache的区别
笔记16 DBCC DROPCLEANBUFFERS与DBCC freeproccache的区别
注意:清除了缓存,不会释放SQL Server所占用的内存,所以需要通过修改SQL Server内存或重启SQL Server服务器来释放内存。 --DBCC DROPCLEANBUFFERS与DBCC freeproccache的区别 --DBCC DROPCLEANBUFFERS清除buffer pool里的干净数据页面 --DBCC freeproccache清除memtoleave和buffer pool里的执行计划缓存 --绝大部分内存使用都会在buffer pool里,对于一些特别长的语句使用一部分multi-page DBCC FREEPROCCACHE --清除存储过程相关的缓存 DBCC FREESESSIONCACHE --会话缓存 DBCC FREESYSTEMCACHE('All') --系统缓存 DBCC DROPCLEANBUFFERS --干净缓存 --sqlserver2022从入门到精通 --清空缓存 --在优化存储过程的性能时,清空缓存是必要的。 --缓存池是 SQL Server 的缓存管理器,包含 SQL Server 的绝大部分缓存数据,例如执行计划缓存和数据缓存等。 --清空缓存常用的命令有如下 3 个: (1)CHECKPOINT --清空脏页 (2)DBCC DROPCLEANBUFFERS --清空干净缓存页 (3)DBCC FREEPROCCACHE --清空执行计划 (4)DBCC FREESYSTEMCACHE('All') --系统缓存 --CHECKPOINT --用于将脏缓存页写入磁盘,然后清理数据缓存中的脏缓存页。其中脏缓存页是指数据页在内存中被修改,但是还没有写入磁盘,导致缓存中的数据和内存中的数据不一致。 --DBCC DROPCLEANBUFFERS --用于清理数据缓存中的干净缓冲页。其中干净缓冲页是指内存中未被修改的数据页。需要注意的是,该命令只移除干净缓冲页,不移除脏缓冲页。 --因此,在执行这个命令前,应该先执行 CHECKPOINT,将所有的脏缓冲页写入硬盘,这样在运行 DBCC DROPCLEANBUFFERS 时,可以保证所有的数据缓存被清理,而不是其中的一部分。 --DBCC FREEPROCCACHE --用于清空所有的计划缓存。计划缓存用于缓存查询语句的执行计划,每一条查询语句在执行之后,其查询计划都会缓存到计划缓存中。 --在生产环境中,不要轻易清理掉计划缓存。如果检测到某个计划缓存产生参数嗅探问题,导致性能十分低下,推荐修改查询语句,重新编译存储过程,以单独刷新该存储过程的计划缓存。 DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle } ) ] --参数嗅探 --当 SQL Server 第一次执行查询语句或存储过程的时候,SQL Server 中有一个线程来评估传入的参数,并根据传入的参数生成对应的执行计划缓存。 --然后参数的值会伴随查询语句或存储过程执行计划并保存在执行计划缓存中。这个评估的过程就叫作参数嗅探。
f