使用存储过程进行数据查询过程中,由于业务逻辑比较复杂因此使用了很多临时表进行分模块化进行数据查询,通过测试发现在清除缓存后,SQL服务的缓存明显提高了很多,这对于服务器造成很大压力;

sql server清除数据缓存 sql清理缓存_Server

通过查询资料发现SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer)、执行缓存(Procedure Cache)、以及SQL Server引擎程序。SQL Server引擎程序所占用缓存一般相对变化不大,重点在于对数据缓存和执行缓存的控制上;

对于减少执行缓存的占用,主要可以通过使用参数化查询减少内存占用。 
1、使用参数化查询减少执行缓存占用

参数化查询意义及注意点

1.可以防止SQL注入

2.可以提高查询性能(主要是可以复用查询计划),这点在数据量较大时尤为重要

3.参数化查询参数类型为可变长度时(varchar,nvarchar,char等)请指定参数类型及长度,若为值类型(int,bigint,decimal,datetime等)则仅指定参数类型即可

4.传值为varchar(max)或者nvarchar(max)时,参数长度指定为-1即可

5.看到有些童鞋对于存储过程是否要指定参数长度有些疑惑,这里补充下,若调用的是存储过程时,参数无需指定长度,如果指定了也会忽略,以存储过程中定义的长度为准,不会因为没有指定参数长度而导致重新编译,不过还是建议大家即便时调用存储过程时也加上长度,保持良好的变成习惯

2、检查并分析SQL Server执行缓存中的执行计划 
SQL Server执行缓存中的内容主要是各种SQL语句的执行计划。则要对缓存进行优化,就可以通过具体分析缓存中的执行计划,看看哪些是有用的、哪些是无用的执行计划来分析和定位问题。