加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 为什么查询导致溢出到tempdb?

发布时间:2021-01-11 16:45:29 所属栏目:编程 来源:网络整理
导读:配景 我正在将具有48gb RAM的Win 2008处事器上的160gb数据库从MSSQL 2008(尺度)迁徙到Win 2012上运行MSSQL 2012(64位收集版)的新处事器,个中包括64 GB的RAM.旧处事器正在运行且负载不敷;新处事器尚未投入出产.新处事器有8个tempdb文件(每个4GB). 题目 在新服

配景

我正在将具有48gb RAM的Win 2008处事器上的160gb数据库从MSSQL 2008(尺度)迁徙到Win 2012上运行MSSQL 2012(64位收集版)的新处事器,个中包括64 GB的RAM.旧处事器正在运行且负载不敷;新处事器尚未投入出产.新处事器有8个tempdb文件(每个4GB).

题目

在新处事器长举办测试时,我看到很多查询中的步调导致警报提到“运算符在执行时代行使tempdb溢出数据”.我已经可以或许通过重写一些查询来停止排序,但这并没有真正办理这个题目.旧处事器上的沟通查询不会导致溢出.我已经读过当MSSQL无法在内存中完成操纵而且必需溢出/分页到tempdb时产生溢出.我应该存眷走漏吗?

例子

我在数据库上运行了sp_updatestats,因此统计信息应该是最新的,但您会留意到预计行数和现实施数之间存在一些差别.

影象存眷

我为64gb中58的MSSQL配置了最大内存配置.今朝,MSSQL耗损了约莫35GB的内存,但其事变集只有682mb.旧处事器(固然在出产中,处理赏罚负载)有44GB的内存提交给MSSQL,个中43.5gb在其事变齐集.

我不知道走漏是否与影象配置有关 – 任何人都有任何设法? MSSQL今朝有大量的RAM可供行使,那么为什么它会溢出到某些范例和哈希匹配的tempdb?

办理要领

这里有几个差异的题目:

问:为什么早年的查询没有溢出?

他们是,可是SQL Server Management Studio在SQL 2012之前没有将其示意为明明的错误.这是一个很好的例子,声名为什么当你举办机能调优时,你必需比图形执行打算更深入.

问:为什么查询溢出到磁盘?

由于SQL Server没有授予他们足够的内存来完成其操纵.大概执行打算低估了所需的内存量,可能盒子处于内存压力之下,可能它们只是大题目. (请记着,SQL Server将内存用于三件事 – 缓存原始数据页,缓存执行打算和查询事变空间.事变空间内存最终相等小.)

问:怎样镌汰走漏?

通过编写可搜刮的T-SQL语句,拥有最新的统计信息,在处事器中安排足够的内存,构建正确的索引,以及在工作无法按预期方法办理时表明执行打算.查察Grant Fritchey’s book SQL Server Query Performance Tuning以获取全部这些的具体声名.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读