我有一个每天晚上运行的数据库作业来创建一个仓库表。使用我的新数据库服务器和 SAN,我将过程从 4 1/2 小时缩短到 35 分钟。我已经将它优化为通过实验在最短的时间内运行(WITH INDEX NOLOCK、FORCE ORDER、LOOP JOIN、MAXDOP 0)。我对改进感到满意,但我讨厌不知道为什么查询需要这么长时间。我完全可以接受瓶颈,只要我知道它们在哪里。当此查询运行时,在很长一段时间内,明显的资源都未得到充分利用。SQL Server 在这些时候在做什么?
根据我对索引碎片的理解,这应该是不可能的。我在我的数据库中发现的案例是非集群的。
例子:
ALTER TABLE [dbo].[ClaimLineInstitutional] ADD CONSTRAINT [PK_ClaimLineInsitutional]
PRIMARY KEY NONCLUSTERED
(
[ClaimLineInstitutionalID] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,
FILLFACTOR = 100) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
更新:
我正在查询 dm_db_index_physical_stats.avg_fragmentation_in_percent,所以我相信这是我看到的物理碎片。