提问人:J. Mini 提问时间:9/24/2023 更新时间:9/25/2023 访问量:54
页面可以是除已分配或解除分配之外的任何内容吗?
Can a page be anything other than allocated or deallocated?
问:
这些列中最令人困惑的是与 tempdb 相关的列。每列报告的页数为 8 KB。[tempdb_allocations] 列直接从与 tempdb 相关的 DMV 中收集,并指示由于临时表、LOB 类型、后台处理程序或其他使用者而在 tempdb 中分配的页数。[tempdb_current] 列的计算方法是从分配数中减去 tempdb DMV 报告的已解除分配的页面信息。看到大量具有少量当前页的分配意味着查询可能会猛烈抨击 tempdb,但不会导致它增长。看到大量当前页面意味着您的查询可能是您不断注意到的所有自动增长的原因。
tempdb_current
是让我一头雾水的专栏。我简单的英语理解是,一个页面只能被分配或解除分配,这意味着从另一个数字中减去一个数字不应该产生任何有用的东西。显然,我错了。如果既没有分配也没有解除分配,页面可以是什么?
答:
2赞
David Browne - Microsoft
9/24/2023
#1
数据来自这里
SELECT TOP(@i)
tsu.session_id,
tsu.request_id,
tsu.user_objects_alloc_page_count +
tsu.internal_objects_alloc_page_count AS tempdb_allocations,
tsu.user_objects_alloc_page_count +
tsu.internal_objects_alloc_page_count -
tsu.user_objects_dealloc_page_count -
tsu.internal_objects_dealloc_page_count AS tempdb_current
FROM sys.dm_db_task_space_usage AS tsu
这是针对会话的当前查询。这个想法是,如果查询分配了 1000 页并解除了 800 页,那么当前仍有 200 页被分配。
评论
0赞
J. Mini
9/25/2023
你确定就这么简单吗?您的屏幕截图给人的印象是页面也可以“保留”,那么知道已取消分配的页面数和总页数实际上是否告诉您分配的页面数?最后,我的理解是,您的示例将给出 200 - 800 = -600 的值,我看不出有什么用。tempdb_current
0赞
David Browne - Microsoft
9/25/2023
它只是表示 TempDb 利用率。DMV 告诉您分配的页数和取消分配的页数。Adam 正在使用它们来估计当前分配的页面数量。
评论