我正在尝试获取一些超过 500 GB 的表的碎片信息,并且我正在...DETAILED
使用sys.dm_db_index_physical_stats
. 我在我们的 pre-Prod 服务器上的生产数据库的还原副本上执行此操作,因此我不在乎损害服务器上的任何性能。
我运行了它,它看起来像是在串行运行并且它需要永远。有没有办法dm_db_index_physical_stats()
并行运行?还是有其他设置干扰它?
我猜在 SQL Server 2014DBCC TRACEON (8649)
中OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))
不可用。
DBCC SETCPUWEIGHT(1000);
也从 Paul White 的博客中尝试过。该博客提到了并行抑制器,其中之一是系统表。算不算dm_db_index_physical_stats()
系统表?
是系统表值函数。
在内部,这将对内部
INDEXANALYSIS
系统数据源执行 openrowset 调用。有关这些内部数据源的更多信息,请点击此处。
INDEXANALYSIS
您可以在执行计划中找到相同的TVF 调用:而且你还可以看到它是一个多语句表值函数。
因此,由于原因#1:系统表访问,查询将无法使用并行性
由于原因#2 ,TVF 调用也将是串行的:Multi statement TVF
资源