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

2024-02-13

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

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

The 有关 tempdb 的 MSDN 文章 http://msdn.microsoft.com/en-us/library/ms190768.aspx不解释常规变量。


tempdb 的容量规划文章 http://msdn.microsoft.com/en-us/library/ms345368.aspx回答你的问题:

大对象数据类型有 varchar(max)、nvarchar(max)、 varbinary(max) 文本、ntext、图像和 xml。这些类型最多可以有 2 个 GB大小,可作为变量或参数存储 过程、用户定义的函数、批处理或查询。参数 定义为 LOB 数据类型的变量使用主内存作为 如果值很小则存储。然而,大值存储在 临时数据库。当 LOB 变量和参数存储在 tempdb 中时,它们 被视为内部对象。您可以查询 sys.dm_db_session_space_usage 动态管理视图报告 分配给给定会话的内部对象的页面。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当在 T-SQL 存储过程中声明变量时,它是保存在内存中还是 tempdb 中? 的相关文章

随机推荐

  • 如何在 gulp 任务中运行 shell 命令并检测它何时完成?

    我正在尝试使用以下命令在 gulp 任务中运行 shell 命令child process spawn 我必须检测任务何时完成运行 所以我正在使用stdout检查我在命令末尾发出的特定字符串 但由于某种原因 它看起来不像我的字符串正在发出
  • 如何在 XSLT 中调用点网程序集/命名空间

    我正在 XSLT 中编写点网代码 当我调用任何名称空间或在 XSLT 中写入 using 指令时 它会给出以下错误 错误 无法识别 com myassemble 是否可以在 xslt 中使用任何程序集 这是可能的 并且您需要使用扩展对象 h
  • TCPDF 将底部边距设置为零

    我正在 php 中使用 TCPDF 创建 pdf 我需要将我的数据包含到没有下边距的 pdf 中 数据将包含在页面末尾 pdf gt SetLeftMargin 14 pdf gt SetTopMargin 6 pdf gt SetFont
  • super() 和显式 super(Cl,self) (带有 __slots__ 和 attrs)有什么区别

    我正在使用attrspython 包 结合继承和槽 我想从派生方法中调用父类的方法 该问题演示如下 import attr attr s slots True class Base def meth self print hello att
  • javascript:获取函数中传递的实际参数的名称

    我们能知道函数中传递的实际参数的名称吗 喜欢 func a b c d 当我们调用它时 我希望在输出中打印 a b c d 就像我将 func 定义为 function func e f g h do something here so t
  • DataAnnotation 正则表达式对于文件输入始终返回 false

    我已经尝试了很多正则表达式RegularExpression数据注释来检查文件扩展名是否是图像 并且它总是返回 false 例如我也尝试过FileExtension属性 但它会在 jquery validation 上产生错误 我正在使用
  • 读取输入后无法写入输出

    我正在编写一个连接到 servlet 的程序 这要归功于HttpURLConnection但我在检查网址时卡住了 public void connect String method throws Exception server HttpU
  • Android 关闭自定义对话框

    我正在尝试让自定义对话框在按下按钮时关闭 set up dialog Dialog dialog new Dialog BrowseActivity this dialog setContentView R layout about dia
  • 使 Eclipse 出现错误时不运行项目

    是否可以使 Eclipse Helios SR2 在出现错误时不运行您的项目 而不是提示答案或无论如何运行 设想 在 Eclipse 中 我点击了 运行 按钮 有编译错误 Eclipse 询问我是否仍要继续运行 我有 是 和 否 两个选项
  • 标签“bg”不存在

    这是我的标签代码 from Tkinter import Tk BOTH Canvas Text END import Tkinter as tk from ttk import Frame Button Style Label Entry
  • SUMIF 单元格不是公式

    我正在尝试创建一个 Excel 电子表格 其中包含公司每位员工的一行 其中每列引用他们每周的工作时间 最初 单元格中填充的是另一张工作表中的预期每周工作小时数 但随后会手动替换为人们每周实际工作的小时数 我希望能够对人们实际工作的小时数进行
  • Web 共享 API 级别 2 PDF 支持

    我正在为我的 PWA 应用程序使用网络共享级别 2 除了 PDF 之外 所有媒体格式都可以正常工作 Web api 返回 PDF 的 base64 字符串 在客户端 我正在从中创建 blob 对象 但是当我分享它时 抛出异常 权限被拒绝 v
  • 没有 .NET 的 Windows 身份验证标头。可能的?

    我想知道是否有人知道一种无需托管在 ASP 站点上即可使用 Windows 身份验证的方法 这是一个可以访问 LDAP 的 Intranet 所以我想知道是否有办法强制客户端向我提供数据 就好像数据来自 ASP 站点一样 我只需要登录域和用
  • 重新排序 Django 模型中的字段

    我想向 django 应用程序中的每个模型添加一些字段 这次是created at updated at and notes 为 20 多个模型中的每一个模型重复代码似乎很愚蠢 因此 我决定使用抽象基类来添加这些字段 问题是从抽象基类继承的
  • gcc std::unordered_map 实现速度慢吗?如果是这样 - 为什么?

    我们正在用 C 开发高性能关键软件 我们需要一个并发哈希映射并实现它 因此 我们编写了一个基准测试来弄清楚 我们的并发哈希映射与std unordered map But std unordered map似乎非常慢 所以这是我们的微基准测
  • 如何在发生错误时中止 Firestore 事务

    我正在使用 FirestorerunTransactionhttps 云函数中的方法 运行 Express 我想要的是确保如果任何读取或写入失败 其他事务读取或写入将不会运行或在需要时回滚 交易 admin firestore runTra
  • Thymeleaf 获取当前语言环境

    如何获取 thymeleaf 模板中的当前区域设置 Thymeleaf 上下文是区域设置感知的 因此在每个请求上注入区域设置会很奇怪 我可以在模板中请求一些变量吗 div div 使用 locale表达式 div div
  • 未找到架构 arm64 的符号

    面临 ObjC 文件引用问题 我尝试了 pod 分解 删除 DerivedData 清理项目 添加 Objc 和 inherited FLAGS I am using cocoapods Xcode 9 Swift 4 Please rev
  • 无效的表达术语

    int hour 10 if hour gt 0 lt 12 Console WriteLine It s morning else if hour gt 12 lt 18 Console WriteLine It s afternoon
  • 当在 T-SQL 存储过程中声明变量时,它是保存在内存中还是 tempdb 中?

    我们正在尝试优化一些 T SQL 存储过程以减少 tempdb 争用 但我无法弄清楚 SQL Server 如何存储非表变量 那么像 INT 和 DATETIME 这样的简单数据类型呢 感觉他们就活在记忆里了 VARCHAR VARCHAR