更新SQL Server实例所有数据库表统计信息

引出问题

自从上次菜鸟为老鸟解决了《RDS SQL SERVER 解决中文乱码问题》问题,老鸟意犹未尽,决定再想个招来刁难刁难菜鸟:“我最近做T-SQL性能调优的时候,经常发现执行计划中的统计信息不准确,导致SQL Server查询性能低下,想个办法帮我一次性更新实例所有数据库下所有表统计信息吧?”

分析问题

“要一次性更新实例级别所有数据库下所有表统计信息啊,这个还真的有点犯难”,菜鸟一边小声嘀咕,一边不停的问G哥,终于功夫不负有心人,发现了两个非常有意思的系统存储过程。这两个系统存储过程均为SQL Server未对外公开(Undocumented)的系统存储过程,但是对于DBA或者日常数据库管理人员,非常有用。今天我们就可以使用它们来快速简洁的解决掉老鸟的问题。
查询这两个系统存储过程,需要在sys.all_objects中查找:

USE master
GO
SELECT * 
FROM sys.all_objects WITH(NOLOCK)
WHERE name IN('sp_msforeachtable','sp_msforeachdb')

如下截图
01.png
简单的功能解释
sys.sp_MSforeachdb:SQL Server遍历该实例下所有的数据库,包含系统数据库。sys.sp_MSforeachtable:SQL Server遍历某一个数据库下所有的表对象。

解决问题

好了,有了对这两个系统存储过程粗略的认识,让我们来如何解决老鸟的问题。话不多说,直接代码伺候

USE master
GODECLARE@sql NVARCHAR(MAX)
;SET@sql = N'
USE [?]
IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'', ''distribution'') 
BEGINRAISERROR(N''----------------------------------------------------------------
Search on database: ?'', 10, 1) WITH NOWAITEXEC SYS.SP_MSFOREACHTABLE N''UPDATE STATISTICS * WITH FULLSCANRAISERROR(''''on table:*'''',10,1) with nowait'',@replacechar =N''*'',@whereand=N''and o.name NOT LIKE ''''#%''''''
END
'
;EXEC SYS.SP_MSFOREACHDB @sql,@replacechar=N'?'

哇,相当牛X,总共仅仅24行代码解决了老鸟的所有问题,一次性,简单,快捷,简洁的更新了老鸟的表统计信息,这下老鸟不会再遇到统计信息未及时更新的问题了。
嘚瑟下执行结果输出,限于篇幅,省略掉了一些输出:

----------------------------------------------------------------
Search on database: ReportServer
on table:[dbo].[History]
on table:[dbo].[ConfigurationInfo]
on table:[dbo].[Catalog]
...
on table:[dbo].[ServerUpgradeHistory]
----------------------------------------------------------------
Search on database: ReportServerTempDB
on table:[dbo].[ExecutionCache]
on table:[dbo].[SnapshotData]
...
on table:[dbo].[SessionData]
----------------------------------------------------------------
Search on database: AdventureWorks2008R2
on table:[Production].[ProductInventory]
on table:[Sales].[SpecialOffer]
on table:[Person].[Address]
...
on table:[dbo].[ErrorLog]
----------------------------------------------------------------
...

写在最后

这段脚本很好很强大,威猛又持久,如果需要在产品环境使用,请选择在流量低谷时段执行,以免对你的生产线SQL Server数据库造成超预期的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职工考勤管理信息系统数据库课设_数据库课程设计--职工考勤管理信息系统

目录1概述........................................................................................................................................ 11.1设计背景..................................................................................................…

python—元组

1 . 元组的创建: 1 . 简介 :元组与列表类似,可以存储任意数据类型。不同之处在于元组的元素不能修改。属于不可变数据类型,没有增删改。 2 . 创建一个元组: t ([1, 2, 3], ssh, True) #和列表不同是,元组…

java clock计时_Java Clock类| systemDefaultZone()方法与示例

java clock计时Clock Class systemDefaultZone()方法 (Clock Class systemDefaultZone() method) systemDefaultZone() method is available in java.time package. systemDefaultZone()方法在java.time包中可用。 systemDefaultZone() method is used to get the current inst…

从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.com/lyhabc/p/4682028.html第三篇http://www.cnblogs.com/lyhabc/p/4682986.html第四篇http://www.cnblogs.com…

vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码

vue点击切换显示隐藏*{padding: 0;margin: 0;font-size: 14px;}ul{width: 200px;height: auto;}h2{background: green;border: 1px solid #fff;color: #fff;height: 30px;line-height: 30px;text-indent: 24px;}h3{background: #999;height: 24px;line-height: 24px;border: 1p…

Java LocalDateTime类| 带示例的getMinute()方法

LocalDateTime类getMinute()方法 (LocalDateTime Class getMinute() method) getMinute() method is available in java.time package. getMinute()方法在java.time包中可用。 getMinute() method is used to get minute-of-hour field value from this date-time object. getM…

python—集合

1. 集合的概念和建立: Python中的集合和数学中的集合类似,可以保存不重复的元素。它有可变集合(set)和不可变集合(frozenset)两种。 集合是不重复的并且无序的序列。 集合创建可以使用{}以及set()的方式。…

第十九天

今天是学习js的第三天,已经感觉脑内存不够用了。 想想后续还有这么多Php的课程要学习,真心有点怕怕的。希望以后时间过的慢一些,让我好好的掌握这门技术吧。 另外,学习js里面还有好多的应用需要自己去掌握,我希望能够通…

弹性理论法研究桩基受力计算公式_竖向荷载下群桩的承载力分析

竖向荷载下群桩的承载力分析桩基础在工程建设当中得到广泛地应用,从安全性上考虑,对群桩承载力的研究尤为重要。文章结合一工程实例,根据现场取得的静载荷试验数据,(本文共4页)阅读全文>>墙体顶部斜裂缝问题一直是困扰设计和施工人员的重要课题,以往的研究往往将这种斜裂…

Java LocalDate类| getChronology()方法与示例

LocalDate类getChronology()方法 (LocalDate Class getChronology() method) getChronology() method is available in java.time package. getChronology()方法在java.time包中可用。 getChronology() method is used to return the IsoChronology of this LocalDate object. …

python—字典

1.字典的含义: 字典和列表类似,是可变序列,与列表不同的是,字典是无序的可变序列,保存的内容是以 键值对 的形式存放的。键是唯一的,而值可以是多个。值可以取任意数据了类型,但键必须是不可变…

js中加“var”和不加“var”的区别,看完觉得这么多年js白学了

Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。var num 1; 是在当前域中声明变量. 如果在方法中声明&#xff0…

解决方案_智能工厂全套解决方案

最近弱电社群资料更新情况:1、弱电学习圈VIP群资料整理-希望对您有用!2、弱电学习圈VIP技术交流2群成立,欢迎您加入!3、智慧校园整体解决方案!4、智能化弱电项目管理表单大全-弱电项目经理必备!5、弱电项目…

退火算法 贪婪算法_算法贪婪策略简介

退火算法 贪婪算法介绍 (Introduction) The solution is determined by a sequence of steps each step has given a particular solution and later a complete solution to given the problem can be achieved. In short, while making a choice there should be a greed for…

windows 2008 R2系统安装拨号v p n详细配置

windows 2008 R2系统单网卡安装拨号v p n系统环境:windows 2008 R2操作步骤首先设置服务端在服务器管理器中添加角色“网络策略和访问服务”,并安装以下角色服务右击路由与远程访问,选择“配置并启用路由和远程访问”右击路由与远程访问&…

python—函数

1. 函数的定义: 1 . 含义:我们把实现某一功能的代码定义为一个函数,在需要使用时,随时调用,十分方便。对于函数,简单理解就是可以完成某功能的代码块,可反复使用。 Python提供了许多内建函数&a…

word打开老是配置进度_小白教程 | office出现配置进度框,怎么办?

最近很多同学在备考二级时候,自己的电脑上office软件Word或者Excel出问题了,每次打开都会出现配置进度框。这种情况怎么办呢?这种情况都是注册表的问题,马上安排解决之前在 右键菜单没有office新建怎么办(点击即可阅读)也是用注册…

【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~...

一、写在前面 自使用android studio开始,就被它独特的依赖方式:compile com.android.support:appcompat-v7:25.0.1所深深吸引,自从有了它,麻麻再也不用担心依赖第三方jar包繁琐无趣啦。而,如果自己写一个开源库是一种怎…

scala集合中添加元素_如何在Scala中获得列表的第一个元素?

scala集合中添加元素清单 (List) A list is a linear data structure. It is a collection of elements of the same data types. 列表是线性数据结构。 它是相同数据类型的元素的集合。 Scala libraries have many functions to support the functioning of lists. Methods l…

python—列表、字典生成式

1 列表生成式 Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。 示例: 需求1:接收变量 k a b s 51 5000 10000 a s.split() li [] for item in s.split():li.append(int(item)) k,a,b li print(k,a,b)运行结果:…