UPDATE STATISTICS更新所有SQL Server数据库

2016-02-19 16:04 38 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐UPDATE STATISTICS更新所有SQL Server数据库,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

  如果你像我一样,那么你就会有一个在适当位置的SQL Agent任务需要重建和重新组织,而实际上只有你数据库中的索引需要这样的操作。如果你依赖于Microsoft SQL Server中的标准技术维护计划,那么重建所有索引的焦土政策将产生。更确切地说,无论这些操作是否要求被用到具体的索引中,索引的重建以及对所有锁和日志的搅拌都会发生。这就是为什么可以说大多数人都会推出自己的索引维护解决方案。这也正是我最大的烦恼之一。无论如何,通过只维护成为碎片的索引,相对于你数据库中的表/索引,统计数据不能发生全面自动更新。我们所需要的正是对我们的SQL Server实例上的每一个数据库采取更新所有统计这样一个快速的解决方案。

  在你开始操作前,我必须声明一个事实,那就是你在自己的数据库上有AUTO_UPDATE_STATISTICS ON,但请记住那并不意味着它们正在更新!

  可能你对此会很不屑。那么请稍微思考这个问题。当处在下面的情况时,SQL Server的引擎将会自动更新:

  l 当数据刚被添加到一张空表时

  l 当统计是上次搜集的并且从搜集开始,统计数据对象的主要字段每500秒增长一次时,这张表的记录超过500。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  l 当统计数据是上次搜集的,并且,从上次统计数据搜集日期起统计数据对象的主要字段按照每500秒加上行数的20%更改时。

  在这个标准下,有很多这样的情况:当潜在的数据以这样一种方式或者层次变化时,存在于一个索引中的统计不能正确反映数据库中真实的数据。正因为如此,你不能仅仅依赖于引擎来使你的统计保持检查和更新成当前的状态。这是一个简单的代码块,它将迭代处理你的数据库以此来建立sp_updatestats命令,该命令随后将被复制粘贴到一个新的查询窗口来执行。这些代码将与所有当前的和先前的SQL Server版本一道回到SQL 7.0工作。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

   DECLARE @SQL VARCHAR(1000)
  DECLARE @DB sysname
  DECLARE curDB CURSOR FORWARD_ONLY STATIC FOR
  SELECT [name]
  FROM sys..sysdatabases
  WHERE [name] NOT IN ('model', 'tempdb')
  ORDER BY [name]
  OPEN curDB
  FETCH NEXT FROM curDB INTO @DB
  WHILE @@FETCH_STATUS = 0
  BEGIN
  SELECT @SQL = 'USE [' + @DB +']' + CHAR(13) + 'EXEC sp_updatestats' + CHAR(13)
  PRINT @SQL
  FETCH NEXT FROM curDB INTO @DB
  END
  CLOSE curDB
  DEALLOCATE curDB

  在我的测试数据库中,这些代码产生了下面的结果:

图1

  接下来我们把复制这个文本,把它粘贴到SQL Server管理套件的一个查询窗口,然后针对这个实例执行它。另一种方法是,你可以选择只针对select数据库执行它,但这完全取决于你。

   USE [Dummy]
  EXEC sp_UpdateStats
  USE [master]
  EXEC sp_UpdateStats
  USE [msdb]
  EXEC sp_UpdateStats
  USE [MSSQLTips]
  EXEC sp_UpdateStats
  USE [MSSQLTips_DUPE]
  EXEC sp_UpdateStats
  USE [Northwind]
  EXEC sp_UpdateStats
  USE [Sitka]
  EXEC sp_UpdateStats
  USE [Utility]
  EXEC sp_UpdateStats

  我已经提供了上面执行的SQL语句搜集产生的输出结果实例。正如你看到的,引擎仍然会审查这些统计,看看它们是否需要更新。它将忽略哪些可以接受的,只更新那些要求这种操作的统计。我可以向你保证,上面列出的每一个数据库都把AUTO_UPDATE_STATISTICS和AUTO_CREATE_STATISTICS设置成ON,但下面的结果表明统计数据将变成过时的。

图2

来源:https://www.tulaoshi.com/n/20160219/1611004.html

延伸阅读
标签: SQLServer
4.5.1 注释符(Annotation) 在Transact-SQL 中可使用两类注释符。 ANSI 标准的注释符“--” 用于单行注释; 与C语言相同的程序注释符号,即“/**/”。“/*”用于注释文字的开头,“*/”用于注释文字的结尾,可在程序中标识多行文字为注释。 4.5.2 运算符(Operator)     1 算术运算符 包括:+(加)、―(...
标签: SQLServer
Enterprise Manager 提供了可视化的界面,在其中建立数据库及其对象,如表、视图、缺省值等,很少需要用户自己编辑程序代码。但对用户来说,了解这些对象是如何通过SQL语言建立,的并得到其SQL 语言脚本(Script) 是很有好处。的在Enterprise Manager 中提供了工具,以帮助用户产生这些对象的SQL 语言脚本。 生成对象的SQL 脚本方法如下: (1) ...
标签: SQLServer
4.7.1 BACKUP BACKUP 命令用于将数据库内容或其事务处理日志备份到存储介质上(软盘、硬盘、磁带)。等SQL Server 7.0 以前的版本用的是DUMP 命令来执行此功能,从SQL Server 2000起,不再使用DUMP 命令。关于BACKUP 命令的详情请参见“数据备份与恢复”章节。      4.7.2 CHECKPOINT 语法如下: CHECKPOINT CH...
标签: SQLServer
在企业管理器中可以很方便地调用其它SQL Server 工具,如SQL Server Query Analyzer (查询分析器)、SQL Server Profiler (跟踪器)等,只须从“Tools (工具)”菜单中选择相应的工具即可。 SQL Server 2000 中提供了大量的向导工具,可以引导用户完成一系列的数据库与服务器管理工作。可以从“Tools (工具)”菜单中选择“Wizards” 选项,或从工...
标签: SQLServer
除了使用系统提供的数据类型外,用户还可以根据需要用自定义的数据类型来定义表的列或声明变量。 7.3.1 用Enterprise Manager 创建用户自定义数据类型 用Enterprise Manager 创建用户自定义数据类型的方法是:在Enterprise Manager 中选择要创建用户自定义类型的数据库,在数据库对象“User Defined Data Types”上单击右键,从开始菜单...

经验教程

72

收藏

45
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部