gpt4 book ai didi

sql-server - 当在 T-SQL 存储过程中声明变量时,它是保存在内存中还是 tempdb 中?

转载 作者:行者123 更新时间:2023-12-02 12:16:07 25 4
gpt4 key购买 nike

我们正在尝试优化一些 T-SQL 存储过程以减少 tempdb 争用,但我无法弄清楚 SQL Server 如何存储非表变量:

  • 像 INT 和 DATETIME 这样的简单数据类型怎么样?感觉就像他们生活在内存中。
  • VARCHAR/VARCHAR(MAX) 怎么样?常规 VARCHAR 可以驻留在内存中,但 VARCHAR(MAX) 可能需要使用 tempdb 进行存储。
  • 表变量存储在 tempdb 中。不过我对这些不太感兴趣。

MSDN article on tempdb不解释常规变量。

最佳答案

The Capacity Planning article for tempdb回答您的问题:

The large object data types are varchar(max), nvarchar(max), varbinary(max) text, ntext, image, and xml. These types can be up to 2 GB in size and can be used as variables or parameters in stored procedures, user-defined functions, batches, or queries. Parameters and variables that are defined as a LOB data type use main memory as storage if the values are small. However, large values are stored in tempdb. When LOB variables and parameters are stored in tempdb, they are treated as internal objects. You can query the sys.dm_db_session_space_usage dynamic management view to report the pages allocated to internal objects for a given session.

这篇文章值得全文阅读,因为它还涵盖了 tempdb 的许多其他用途。

编辑:如果您想知道特定 session 在 tempdb 中使用了多少内存,您可以运行以下查询:

select * 
from sys.dm_db_session_space_usage
where session_id = @@SPID

使用这个,它看起来不像我的 VARCHAR(MAX) 变量存储在 tempdb 中,直到它的大小达到大约 1000 KB...但我确信这会根据您的服务器可用的内存。

关于sql-server - 当在 T-SQL 存储过程中声明变量时,它是保存在内存中还是 tempdb 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com