官术网_书友最值得收藏!

To cache or not to cache

In general, caching and reusing query plans is a good thing, and writing T-SQL code that encourages plan reuse is recommended.

In some cases, such as with a reporting or Online Analytic Processing (OLAP) workloads, caching queries might make less sense. These types of systems tend to have a heavy ad hoc workload. The queries that run are typically long-running and, while they may consume a large quantity of resources in a single execution, they typically run with less frequency than OLTP systems. Since these queries tend to be long-running, saving a few hundred milliseconds by reusing a cached plan doesn't make as much sense as creating a new plan that is designed specifically to execute that query. Spending that time compiling a new plan may even result in saving more time in the long run, since a fresh plan will likely perform better than a plan that was generated based on a different set of parameter values.

In summary, for most workloads in SQL Server, leveraging stored procedures and/or parameterized queries is recommended to encourage plan reuse. For workloads that have heavy ad hoc queries and/or long-running reporting-style queries, consider enabling the Optimize for Ad hoc Workloads server setting and leveraging the RECOMPILE hint to guarantee a new plan for each execution (provided that the queries are run with a low frequency). Also, be sure to review Chapter 8Building Diagnostic Queries Using DMVs and DMFs, for techniques to identify single-use plans, monitor for excessive recompilation, and identify plan variability and potential parameter-sniffing issues.

主站蜘蛛池模板: 武宣县| 桃源县| 汤原县| 乳山市| 进贤县| 岫岩| 嘉祥县| 上栗县| 奎屯市| 菏泽市| 新源县| 崇仁县| 阿勒泰市| 上林县| 屏东县| 永嘉县| 冕宁县| 扶余县| 崇信县| 睢宁县| 滕州市| 曲水县| 布尔津县| 方山县| 沙河市| 介休市| 成安县| 满城县| 图片| 康定县| 枞阳县| 吉安县| 许昌市| 阿鲁科尔沁旗| 柘荣县| 长沙市| 阿鲁科尔沁旗| 甘孜| 大姚县| 四川省| 来凤县|