数据库参数调优--自动更新统计信息
来源:互联网 发布:window python编译器 编辑:程序博客网 时间:2024/06/05 08:10
背景
我们都知道SQL SERVER 借助统计信息来产生执行计划,而过时的统计信息会导致SQL SERVER选择错误的执行计划,导致严重的性能问题。 在数据库中选项可以自动的更新统计信息。如下图:
默认他是开启的,所以我们很少去关注他或者修改他.
异步更新和同步更新
其实除了同步更新统计信息外,还有一个异步更新统计信息的选项。他和同步更新统计信息有什么关系呢?
同步更新
默认情况下,当自动更新统计信息设置为True时,当数据的更改(插入,更新,删除或合并)达到阈值时,估计的行数会过时,SQL Server查询优化器将自动更新统计信息。 当统计数据陈旧时,执行计划可能会变得不理想,这可能导致性能下降。这个项确保您的统计信息尽可能保持最新。 每次执行缓存的查询计划时,Optimizer将检查数据更改并根据情况生成新的统计信息。 这个行为正是我们想要的,但有需要注意的是,当统计信息过期时,查询优化程序在编译和执行查询之前要等待更新的统计信息。知道这个更新动作完成才会继续执行查询。 这会显着地减慢执行过程。
异步更新
即使现有统计信息过期,查询也会使用现有统计信息进行编译; 如果查询编译时的统计信息已过期,则查询优化器可以选择次优查询计划。 在异步更新完成后,优化器使用更新的统计信息进行编译
从上面的对比可以知道,在需要进行自动更新是,异步更新可以不用等待更新统计信息更新完成,再去编译执行当前的查询。
如何查看选项
SELECT name, is_auto_update_stats_on, is_auto_update_stats_async_onFROM sys.databases
使用ssms
如何修改
TSQL
ALTER DATABASE YourDatabaseName SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE YourDatabaseName SET AUTO_UPDATE_STATISTICS_ASYNC ON
GO
注意:要开启异步更新需要首先开启自动更新统计信息选项。因为异步更新统计信息依赖于自动更新。
SSMS
在上图中的选项处直接修改就可以
适用场景
1.这个选项适用于OLTP的环境。因为OLTP的数据变动比较频繁,容易造成统计信息的更新。OLAP要慎重使用
2.应用程序经历了一个或多个查询等待更新的统计信息导致的客户端请求超时。 在某些情况下,等待同步统计可能会导致应用程序出现大量超时,从而导致失败
3. 应用程序经常执行相同的查询,类似查询或类似的缓存查询计划。 异步统计信息更新的查询响应时间可能比使用同步统计信息更新更为可预测,因为查询优化器可以执行传入查询,而无需等待最新的统计信息。 这避免了延迟一些查询而不是其他查询。
- 数据库参数调优--自动更新统计信息
- 自动更新Oracle统计信息
- 统计信息自动更新导致查询超时
- 数据库索引统计信息
- SQL Server 自动更新统计信息的基本算法
- MySQL统计信息相关参数
- 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
- oracle 数据库统计信息收集
- PostgresQL 数据库统计信息查看
- dbms_stats收集统计信息no_invalidate参数
- MySQL中的统计信息相关参数介绍
- 数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs
- 重建数据库表所有统计信息
- oracle数据库统计信息的重要性
- SqlServer数据库统计信息的操作
- 自动更新svn版本号信息
- IP数据库的自动更新
- Android 数据库自动更新
- python3 + fiddler爬取微信公众号消息记录
- python3 datetime() 模块之 date、time 类
- Mysql处理海量数据时的一些优化查询速度方法
- httpie 命令行工具使用记录
- jQuery 获取当前节点的html包含当前节点的方法
- 数据库参数调优--自动更新统计信息
- git-fatal: Not a git repository (or any of the parent directories): .git
- 最佳图标尺寸
- 传值流程
- android Viewpager+TabLayout+Fragment遇到的问题记录
- java前后台之间传值的几种方式
- ubuntu下修改mysql的编码
- http https ftp tcp的区别
- Android普通截屏(不包括状态栏内容但有状态栏占位)