【问题标题】:Use of variable tables, tempdb growth and db session sleeping使用变量表、tempdb 增长和 db session 休眠
【发布时间】:2023-03-22 14:55:01
【问题描述】:

虽然我从 this post 获得了一些进一步的见解,但我仍在努力更全面地了解我最近对变量表的使用以及相关的 tempdb 增长。

我最近在存储过程和表值函数中都使用了变量表。我对变量表 v 的本地/全局临时表的使用是一个可能会影响我正在经历的更大挑战的领域。

由于使用这种类型的临时表,tempdb 已增长到大约 50+GB 区域,并且当使用 exec sp_spaceused @updateusage=true 检查表时,我看到:database_size: 51935.13MBunallocated_space: 51908.80MB并且在检查 DB 的内容时没有临时或系统表存在。对于 ref,tempdb.ldf 非常小。

在使用 exec sp_who 检查我的会话使用情况时,我还看到多行表明处于睡眠状态,我怀疑这可能是我们遇到连接未正确关闭的问题。

通过阅读各种帖子和 SO,普遍的共识是不要尝试缩小 tempdb 和相关文件,事实上,我更愿意解决根本问题,而不是转向更碎片化的数据存储。

对于我现有的方法为什么会影响 tempdb 增长以及使用本地/全局临时表是否更合适,是否有任何建议。

关于 tempdb 它本身,虽然存储很便宜,但我需要确保这种增长得到控制,因此任何有关维护的建议(将数据库拆分为多个文件,可能缩小,将数据库移动到单独的驱动器)等都将不胜感激.

【问题讨论】:

  • Sql server 是 24/7 天工作还是可能宕机?
  • 您要解决的“潜在问题”是什么?在过去的某个时候,您的使用需要 TempDB 增长到今天的大小。如果它没有继续增长,那么它需要达到的大小,直到出现需要更多空间的东西。

标签: sql tsql tempdb


【解决方案1】:

您可以检查 tempdb 数据库中的对象以了解发生了什么

以下代码列出了 tempdb 中的对象,并根据创建日期和计算持续时间(以分钟为单位)进行 asc 排序

use TempDb
go

SELECT 
 name ,object_id , SCHEMA_NAME(schema_id) obj_schema,
 type ,  type_desc,
 create_date ,  modify_date, 
 OBJECT_NAME(parent_object_id)  parent_obj ,
 DATEDIFF(hour,create_date , GETDATE()) duration_hour
FROM sys.objects  
where name  not like 'sys%'
order by create_date

tempDb 中的对象分为三组:

  • 内部对象
  • 外部对象
  • 版本商店

以下代码显示了为每个类别分配了多少 tempdb 磁盘空间

SELECT 
SUM(user_object_reserved_page_count)/128.0 UserObjectsMB,
SUM(user_object_reserved_page_count) UserObjectPages_count  ,

SUM(version_store_reserved_page_count)/128.0 VersionStoreMB,
SUM(version_store_reserved_page_count) VersionStorePages_count, 

SUM(internal_object_reserved_page_count) InternalObjectPages_count, 
SUM(internal_object_reserved_page_count)/128.0 InternalObjectsMB,

SUM(unallocated_extent_page_count)/128.0 FreeSpaceMB,
SUM(unallocated_extent_page_count)  FreePages_count

FROM sys.dm_db_file_space_usage;

您可以查看: local-and-global-temporary-tables-in-sql-server

tempdb 的大小应该足够大以应付日常和高峰工作负载,以避免在 WorkLoad 运行时增长。

我的建议,除非有必要,否则不要在启动期间或任何其他时间缩小 tempDb。 存储很便宜,您可以为 tempDb(甚至 SSD)分配专用存储

更多详情:

Capacity Planning for tempdb

Optimizing tempdb Performance

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2011-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多