首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行运行sys.dm_db_index_physical_stats

并行运行sys.dm_db_index_physical_stats
EN

Database Administration用户
提问于 2020-01-29 04:00:55
回答 1查看 324关注 0票数 3

我正在尝试在超过500 GB的几个表上获取碎片信息,并且我使用的是sys.dm_db_index_physical_statsD1选项。我是在产品前服务器上的生产数据库的还原副本上这样做的,所以我不关心会损害服务器上的任何性能。

我运行了它,它看起来像是在连续运行,而且要花费很长时间。有没有一种并行运行dm_db_index_physical_stats()的方法?或者其他环境是否干扰了它?

我想DBCC TRACEON (8649)OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))在Server 2014中不可用。

也尝试了DBCC SETCPUWEIGHT(1000);从保罗怀特的博客这里。博客提到并行性抑制剂,其中之一是系统表。dm_db_index_physical_stats()被认为是一个系统表吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-01-29 09:11:05

代码语言:javascript
复制
sys.dm_db_index_physical_stats 

是一个系统表值函数。

在内部,这将执行对内部INDEXANALYSIS系统数据源的openrowset调用。

代码语言:javascript
复制
create function [sys].[dm_db_index_physical_stats]
(
    @DatabaseId         SMALLINT        = 0,
    @ObjectId           INT             = 0,
    @IndexId            INT             = -1,
    @PartitionNumber    INT             = 0,
    @Mode               nvarchar(20)    = NULL
)
returns table
as
    return select *
        from OpenRowset
        (   TABLE
            INDEXANALYSIS,
            @DatabaseId,
            @ObjectId,
            @IndexId,
            @PartitionNumber,
            @Mode
        )
GO

关于这些内部数据源的更多信息,这里

您可以在执行计划中找到相同的INDEXANALYSIS TVF调用:

您还可以看到它是一个多语句表值函数。

因此,由于原因1:系统表访问,查询将无法使用并行性。

列表在不同版本之间都会发生变化,但是,例如,在Server 2012上的整个计划都是连续的:

  • ..。
  • 系统表访问(例如从sys.tables读取)

由于第二条理由:多语句TVF,TVF调用也将是串行的。

这些查询功能是需要在

  • ..。
  • 多语句T-SQL表值函数

来源

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/258395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档