sql-server – 为什么查询导致溢出到tempdb?
配景 我正在将具有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以获取全部这些的具体声名. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |