小编Dav*_*son的帖子

我可以提高膨胀系统表的性能吗?

背景:
我有许多带有大量 VIEW 和大量 SYNONYM 的数据库。例如,一个数据库有超过 10k 的 VIEW's 和 2+ 百万的 SYNONYM's。

一般问题:
涉及sys.objects(和一般系统表)的查询往往很慢。涉及sys.synonyms的查询是冰川。我想知道我可以做些什么来提高性能。

具体示例
此命令由第三方工具运行。它在应用程序和 SSMS 中都很慢:

exec sp_tables_rowset;2 NULL,NULL
Run Code Online (Sandbox Code Playgroud)

我的问题
我怎样才能让它运行得更快?

我试过的
如果SET STATISTICS IO ON我得到这个输出:

(2201538 行受影响)
表“sysobjrdb”。扫描计数 1,逻辑读取 28,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob
预读读取 0。表 'sysschobjs'。扫描计数1,逻辑读53926,物理读0,预读0,lob逻辑读0,lob物理读0,lob预读0。

我已经能够更新底层系统表的统计信息。这在我的 SQL 2008 R2 或更新的环境中有效:

UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
Run Code Online (Sandbox Code Playgroud)

我还能够执行索引维护。这适用于我的 SQL 2012 或更新的环境。例如运行sp_help 'sys.sysschobjs'标识表上的索引,然后我从那里创建并运行这些命令:

ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER …
Run Code Online (Sandbox Code Playgroud)

sql-server system-tables

12
推荐指数
1
解决办法
792
查看次数

跟踪标志 4199

微软关于Trace Flag 4199的知识库文章有点混乱:

...任何可能影响查询执行计划的修补程序都必须由跟踪标志控制。除了对可能导致错误结果或损坏的错误的修复外,这些修补程序默认情况下处于关闭状态,并且需要跟踪标志才能启用修复。

注意:我假设“修补程序”是累积更新(又名“CU”)。如果我错了,请发表评论。

所以...让我们假设我正在运行最新的 Service Pack。SP 包括以前 CU 中的所有修复。是否为 SP(甚至RTM)打开了修补程序?还是仍需要跟踪标志 4199?

sql-server execution-plan

5
推荐指数
1
解决办法
899
查看次数

标签 统计

sql-server ×2

execution-plan ×1

system-tables ×1