这些天看了一篇微软官方发布的MS SQL Server2008性能问题处理及优化的英文文档,里面知识点介绍地很详细,在现实工作中也很实用,遂产生了想把它翻译一下的念头。翻译的过程,既可以帮助自己复习一下这些技术,也可以向其他还不熟悉这一块的朋友介绍一些新的知识,何乐而不为呢。只是这篇文章有点长,我会分成几篇随笔去介绍,所以,不光是对我耐性的考验,也是对你的考验哦!

--------------------------------------------

解决方案

如果你诊断出了过度的编译及重复编译,考虑下面的选择:

--如果重复编译是由SET option改变而导致,使用SQL Server Profiler去确定哪个SET option改变了。避免在存储过程中改变SET options。最好在连接级别去设定它们。确保在整个连接周期内SET options不会改变。

--临时表被激发进行重复编译的阈值要低于正常表。如果发生在临时表上的重复编译是由于统计信息改变,你可以使用表变量替代临时表。表变量的基数改变不会造成重复编译。这种方案的一个不足之处在于,查询优化器不会持续监视表变量的基数信息,因为统计不会再在表变量上创建或者维护。这样做会导致较少的查询优化。你可以测试不同的选项并且选择最好的一种。

--另外一种选择是使用KEEP PLAN 查询提示。这种选择设定临时表具有正常表级别的阈值。EventSubclass列会显示出该临时表“statistics changed”的信息。

--为了避免重复编译是由统计信息改变导致的(例如,如果这个计划变得次优化是由于数据统计信息的改变),指定KEEPFIXED PLAN查询提示。如果这个设定生效的话,重复编译只会在为了确保有效性(例如,基础表结构已经改变并且计划不再应用)并且不响应统计信息的改变时发生。例如,一个重复编译会在查询语句所依赖的表的结构发生变化时发生,或者如果一个表被sp_recompile存储过程标记了。

--关闭这些统计信息的自动更新:索引统计信息及定义在表或者索引视图上的改变后会导致重新编译的统计信息。注意,然而,使用这种方法关闭auto-stats特性,并不是一个很好的注意。这是因为查询优化器不会再对这些对象上的数据改变很敏感,而次优化的查询计划可能会导致。可以这种方法当成是最后一种手段,如果你已经尝试了其它非主流的选择。

--批处理应该有一个完整的对象名(例如,dbo.Table1),以避免重复编译及避免在不同事物之间的含糊不清。

--去避免由于延迟编译导致的重复编译,你应该避免交叉使用DML和DDL或者创建一个使用If进行情况选择的DDL。

--运行Database Engine Tuning Advisor(DTA)去查看是否任意索引改变提升了查询的编译时间和运行时间。

--检查存储过程中是否使用了WITH RECOMPILE选项,在SQL Server 2008及SQL Server 2005中,如果某个存在于该存储过程中的特殊的语句确实需要重复编译,你可能可以使用一个语句级别的 RECOMPILE提示。在语句级别使用这个选项以避免每次都编译整个存储过程,而在同一时间指定单独的语句被编译。更多信息可以查看:query hints

转载于:https://www.cnblogs.com/sharpwang/archive/2012/05/06/2485839.html

CPU瓶颈(五)--过度编译与不必要重复编译的解决方案相关推荐

  1. 20211129编译RK3399的Android发生编译服务器的CPU看门狗软件死锁的问题

    20211129编译RK3399的Android发生编译服务器的CPU看门狗软件死锁的问题 2021/11/29 10:39 出现的问题: Message from syslogd@rootroot- ...

  2. 通常人们说i5处理器的计算机其中二五是指,计算机cpu?学会看CPU只要五分钟

    计算机cpu(学会看CPU只要五分钟)CPU很多人都只知道i3/i5/i7,那么i3/i5/i7难道不是CPU型号吗?这CPU型号到底指的是什么,CPU型号又是如何命名的?今天,5分钟教会你. Int ...

  3. aix kill java_AIX环境Java进程cpu瓶颈分析(转)

    http://blog.csdn.net/fjpqzm/article/details/24261773 1.   环境信息 机器 CPU(个) 内存 系统 DBA(数据库服务器A) 16(64 co ...

  4. 通过Visual Studio诊断工具定位软件CPU瓶颈

    通过VS诊断工具定位软件CPU瓶颈 前情提示:正常情况下我们使用调试模式会看不到诊断工具窗口,控制台会报"无法启动标准收集器.请尝试修复 Visual Studio 的安装. (HRESUL ...

  5. moses 编译_手把手教你编译MOSES机器翻译系统 | 学步园

    摩西是一个由英国爱丁堡大学的SMT先锋团队[科恩等人,2007 ]开发的翻译系统.摩西的最新版本支持许多特征和功能.例如,它支持基于短语和基于语法基础的模型(从短语/规则提取解码).同时,它提供的因素 ...

  6. 反编译与反汇编、C++编译过程,包括预编译--汇编--编译--链接

    参考:C/C++程序编译流程(预处理->编译->汇编->链接) - ProLyn - 博客园 反汇编和反编译的区别_代码小卒_新浪博客 反汇编与反编译: 汇编:是把汇编源程序转变为目 ...

  7. 工作五年,后面四年重复着第一年的活儿?

    当我们沉浸在旺盛的需求之中时,整个人便会成为一台工作的机器,切着类似的页面,写着同样的逻辑,重复着昨天或者上个月做的事情,时间久了,觉得腻味,没有什么创新,也没有明显的成长.用一句通俗的话来讲:工作五 ...

  8. 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

    文章目录 一.查看 .config 编译配置文件 二.正式编译内核 一.查看 .config 编译配置文件 在上一篇博客 [Linux 内核]编译 Linux 内核 ④ ( 打开 Linux 内核编译 ...

  9. php编译优化,浅析使用Turck-mmcache编译来加速、优化PHP代码

    php_screw确实很不错,但是只能起到加密的作用,并没有加速和优化的作用. 下面我们来看看:Turck MMCache它的作用是通过对php代码的编译来加速.优化php代码,我们如果发布的php代 ...

  10. deepin编译Linux内核,为Deepin编译Linux 5.10内核的悲伤故事经历:从入门到卸载

    简介 目的 解决Linux Deepin在更新内核到5.10后无法使用蓝牙的问题. 硬件:联想小新13 Pro 2020 AMD R5 4600U OS: win 10 + deepin 20 原因 ...

最新文章

  1. Krona绘制物种或功能组成圈图
  2. TCL中Ports/Pins/Nets/Cells/Clocks之间的交互关系?
  3. JavaScript 技术篇-js语句创建dom节点,并给节点设置属性
  4. 电脑换ip_代理ip地址怎么换
  5. Java 数组的 12 个常用操作
  6. gc cr block lost
  7. 页脚代码html,博客园页脚 HTML 代码 .html
  8. 前后端分离是什么意思?
  9. 罗技的鼠标驱动试用感受
  10. 【汽车制造业】“新三化+新能源”蓝海,加速车企数字化转型进入“深水区”
  11. 机器学习(五)贝叶斯分类器之估算收入阶层
  12. C2: 随机事件与样本空间/关系运算
  13. 深入理解机器学习中的:目标函数,损失函数和代价函数
  14. 什么是物联卡,物联卡注意事项
  15. hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)
  16. Windows 平台安装 MongoDB数据库(检测是否安装成功、启动和关闭MongoDB数据库)
  17. skin卓沿护肤品怎么样_卓沿白金护肤品怎么样 卓沿白金护肤品是哪个国家的
  18. 楼天成男人8题(树的分治-POJ1741)
  19. 用fluent模拟内循环床气化燃烧(调试过程记录)
  20. 蓝牙最新版本6.0_连续看影视最新版本下载2021-连续看影视无广告不升级版v1.6.0 安卓版...

热门文章

  1. oracle+11g+32位数据库能导入到64位么,Oracle 11G数据库导出问题解决
  2. 冯诺依曼计算机主机,冯诺依曼计算机的基本思想是什么?
  3. python爬虫爬取网页图片_Python之多线程爬虫抓取网页图片
  4. 树莓派python蓝牙_怎样通过蓝牙仅使用Android手机为树莓派配置Wi-Fi网络
  5. C++ map转为vector
  6. 数据库学习笔记3-隔离级别 Read Uncommitted
  7. 微信小程序云开发教程-微信小程序的API入门-常用API
  8. android 图层绘画分析,Android绘图技巧使用详解
  9. c# xml文件新增同级节点_C# xml文件的创建,修改和添加节点 。
  10. emc re 整改 超标_两种常见EMC整改流程