引出问题

自从上次菜鸟为老鸟解决了《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')

如下截图

简单的功能解释
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数据库造成超预期的影响。

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

  1. 数据库SQL Server 如何将数据库表名等前缀转换成dbo

    数据库SQL Server 如何将数据库表名前缀,框架名前缀,视图前缀,存储过程前缀转换成dbo exec sp_msforeachtable 'sp_changeobjectowner ''?'', ...

  2. SQL Server中的数据库表分区

    什么是数据库表分区? (What is a database table partitioning?) Partitioning is the database process where very ...

  3. 用VB代码在SQL SERVER 中创建数据库,表,列.以及对数据库的操作

    前面看了一编用VB代码创建ACCESS数据库的文章,写的很好. 根据思路,写下创建SQL 数据库的方法,供大家参考. 1:引用ADO2.5lib 2:在窗体上添加一个按钮COMMAND1 3:按钮代码 ...

  4. SQL Server整合–在单个SQL Server实例上托管多个数据库

    介绍 (Introduction) Consolidating SQL Server databases and instances is a practice which, under certai ...

  5. SQL Server数据库系统和数据库简介

    一.SQL Server数据库系统概述 1.组成数据库系统的主要部分: 数据库系统(DataBase System,缩写为DBS)是采用数据库技术的计算机系统,是由数据库(DB).数据库管理系统(DB ...

  6. SQL Server实例的十大安全注意事项

    SQL Server is one of the world's leading data platforms. It is being broadly used hosting millions o ...

  7. 在SQL Server中的数据库之间复制表的六种不同方法

    In this article, you'll learn the key skills that you need to copy tables between SQL Server instanc ...

  8. sql server从一个数据库复制一张表到另外一个数据库

    sql server从一个数据库复制一张表到另外一个数据库 /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', ...

  9. sql server中创建数据库和表的语法

    下面是sql server中创建数据库,创建数据表以及添加约束的sql语句: use master --创建数据库 if exists (select * from sysdatabases wher ...

最新文章

  1. 【Unity3D】Tags和Layers
  2. 通过ISO镜像文件安装Ubuntu(可实现默认启动Windows的双系统)
  3. php 数组 1 开始,php数组使用1
  4. 数据结构java语言描述朱战立_数据结构——树(Java语言描述)
  5. C++ 高级数据类型(五)—— 数据结构
  6. 正面管教php_佛山市第三中学正面管教家长工作坊PHP分享会
  7. CVPR 2021 | 超越卷积,自注意力模型HaloNet
  8. Java正常关闭资源的方式
  9. 内核网络输出帧的处理
  10. 阻塞与非阻塞 异步 与同步
  11. 常见浏览器兼容性问题
  12. android+警告声音,在Delphi XE5 / Android平台上播放声音警报/哔哔声
  13. Python--快递收费小程序
  14. formality: 形式验证流程
  15. 计算机组成原理笔记--流水线的扩展(1):数据前推与增加宽度
  16. 解决文件名是中文时的下载乱码问题
  17. expdp与impdp导出导入特定表
  18. Android 控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
  19. java110 RedPacket 红包系统安装与使用
  20. .NET-房贷计算器

热门文章

  1. 分段二次插值例题_分段三次插值
  2. linux c程序加args,C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用
  3. ironpython console怎么用_如何在表單中插入ironpython控制台?
  4. html鼠标响应事件吗,学习JavaScript鼠标响应事件
  5. mysql报错级别_MySQL启动出现几个警告级别错误
  6. python获取excel数据进行判断输出结果到excel,如何使用python xlrd/xlwt从一个excel工作簿提取数据并输出到另一个excel工作簿?...
  7. mysql更新多条数据6_mysql语句:批量更新多条记录的不同值
  8. 单边指数信号的特点_今日股市分析:上证指数若能守住3400,蓄力反弹就有戏...
  9. android 根据资源名称,如何在Android中按名称访问可绘制资源
  10. matlab与专业应用,MATLAB应用技术--在电气工程与自动化专业中的应用