AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 61369
Accepted
Scott Chamberlain
Scott Chamberlain
Asked: 2014-03-21 07:59:51 +0800 CST2014-03-21 07:59:51 +0800 CST 2014-03-21 07:59:51 +0800 CST

SHOWPLAN 不显示警告,但“包含执行计划”会显示相同的查询

  • 772

我在 SSMS 中运行以下查询,它在“包含执行计划”窗口中向我显示警告

select CLIENT_GUID, PMT_AMOUNT, DATE_COMPLETED
from
(
    select
     payment.CLIENT_GUID, payment.PMT_AMOUNT, hist.DATE_COMPLETED, ROW_NUMBER() over (partition by payment.client_guid order by payment.deposit_date desc, payment.create_date_time  desc) rn
     from 
     trnPMT payment WITH (NOLOCK)
     inner join trnHistory hist WITH (NOLOCK) on payment.TRANS_GUID = hist.TRANS_GUID
     Where 
     payment.REVISED = 0 and
     payment.mpmt_guid <> '00000000-0000-0000-0000-000000000000'
) pmt
where pmt.rn = 1

警告是“操作员在执行期间使用 tempdb 以溢出级别 1 溢出数据”

在此处输入图像描述
(在此处规划 XML)

我去调查了更多,但在他们的版本中既没有做SET SHOWPLAN_ALL ON也没有SET SHOWPLAN_XML ON显示警告。

显示计划_全部:

+------------------------------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------------------------------------+ ------+--------+--------+--------------------+ ----------------------+------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------+---------------------------- ---------------------------------------------- ------------------------------------------------+ --------------+------------+------------+-------- ----+----------------+------------------------ -------------------------------------------------------- ---------------------------------------------- ----------+------------+---------+--------+------ --------------+
| 文本 | 状态 | 节点编号 | 家长 | 物理操作 | 逻辑运算 | 争论 | 定义值 | 估计行 | 估计IO | 预估CPU | 平均行大小 | 总子树成本 | 输出列表 | 警告 | 类型 | 并行| 估计执行 |
+------------------------------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------------------------------------+ ------+--------+--------+--------------------+ ----------------------+------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------+---------------------------- ---------------------------------------------- ------------------------------------------------+ --------------+------------+------------+-------- ----+----------------+------------------------ -------------------------------------------------------- ---------------------------------------------- ----------+------------+---------+--------+----- --------------+
| 选择 CLIENT_GUID、PMT_AMOUNT、日期_完成 | | | | | | | | | | | | | | | | | |
| 来自 | | | | | | | | | | | | | | | | | |
| ( | | | | | | | | | | | | | | | | |
| 选择 | | | | | | | | | | | | | | | | | |
| payment.CLIENT_GUID, payment.PMT_AMOUNT, hist.DATE_COMPLETED, ROW_NUMBER() over (partition by payment.client_guid order by payment.deposit_date desc, payment. create_date_time desc) rn | | | | | | | | | | | | | | | | |
| 来自 | | | | | | | | | | | | | | | | | |
| trnPMT 支付 WITH (NOLOCK) | | | | | | | | | | | | | | | | | |
| inner join trnHistory hist WITH (NOLOCK) on payment.TRANS_GUID = hist. TRANS_GUID | | | | | | | | | | | | | | | | | |
| 在哪里 | | | | | | | | | | | | | | | | | |
| 支付。修订 = 0 和 | | | | | | | | | | | | | | | | | |
| payment.mpmt_guid '00000000-0000-0000-0000-000000000000' | | | | | | | | | | | | | | | | | |
| ) 下午 | | | | | | | | | | | | | | | | | |
| 其中 pmt.rn = 1 | 1 | 1 | 0 | 空 | 空 | 1 | 空 | 9283.128 | 空 | 空 | 空 | 40. 03822 | 空 | 空 | 选择 | 0 | 空 |
| |--过滤器(哪里:([Expr1004]=(1))) | 1 | 2 | 1 | 过滤器 | 过滤器 | 其中:([Expr1004]=(1))| 空 | 9283.128 | 0 | 0.09364839 | 39 | 40.03822 | [付款].[CLIENT_GUID], [付款].[PMT_AMOUNT], [历史].[DATE_COMPLETED] | 空 | 计划行 | 0 | 1 |
| |--序列项目(DEFINE:([Expr1004]=row_number)) | 1 | 3 | 2 | 序列项目 | 计算标量 | 定义:([Expr1004]=row_number) | [Expr1004]=行号 | 195100.8 | 0 | 0.01560807 | 47 | 39.94458 | [付款].[CLIENT_GUID], [付款].[PMT_AMOUNT], [历史].[DATE_COMPLETED], [Expr1004] | 空 | 计划行 | 0 | 1 |
| |--段| 1 | 4 | 3 | 段 | 段 | [付款].[CLIENT_GUID] | 空 | 195100.8 | 0 | 0.003902016 | 47 | 39.92897 | [付款].[CLIENT_GUID], [付款].[DEPOSIT_DATE], [付款].[PMT_AMOUNT], [付款].[CREATE_DATE_TIME], [hist].[DATE_COMPLETED], [Segment1005] | 空 | 计划行 | 0 | 1 |
| |--排序(排序方式:([付款]。[CLIENT_GUID] ASC,[付款]。[DEPOSIT_DATE] DESC,[付款]。[CREATE_DATE_TIME] DESC))| 1 | 5 | 4 | 排序 | 排序 | ORDER BY:([payment].[CLIENT_GUID] ASC, [payment].[DEPOSIT_DATE] DESC, [payment].[CREATE_DATE_TIME] DESC) | 空 | 195100.8 | 0.01126126 | 15.73772 | 55 | 39.92507 | [付款].[CLIENT_GUID], [付款].[DEPOSIT_DATE], [付款].[PMT_AMOUNT], [付款].[CREATE_DATE_TIME], [hist].[DATE_COMPLETED] | 空 | 计划行 | 0 | 1 |
| |--Hash Match(Inner Join, HASH:([payment].[TRANS_GUID])=([hist].[TRANS_GUID]), RESIDUAL:([TestDb].[dbo].[trnHistory].[TRANS_GUID] as [hist].[TRANS_GUID]=[TestDb].[dbo].[trnPMT].[TRANS_GUID] as [payment].[TRANS_GUID])) | 1 | 6 | 5 | 哈希匹配 | 内部加入 | HASH:([payment].[TRANS_GUID])=([hist].[TRANS_GUID]), RESIDUAL:([TestDb].[dbo].[trnHistory].[TRANS_GUID] as [hist].[TRANS_GUID]=[ TestDb].[dbo].[trnPMT].[TRANS_GUID] 作为[payment].[TRANS_GUID]) | 空 | 195100.8 | 0 | 14.81137 | 55 | 24.17609 | [付款].[CLIENT_GUID], [付款].[DEPOSIT_DATE], [付款].[PMT_AMOUNT], [付款].[CREATE_DATE_TIME], [hist].[DATE_COMPLETED] | 空 | 计划行 | 0 | 1 |
| |--聚簇索引扫描(OBJECT:([TestDb].[dbo].[trnPMT].[imp_clpk_trnPMT] AS [payment]), WHERE:([TestDb].[dbo].[trnPMT].[REVISED] as [payment].[REVISED]=(0) AND [TestDb].[dbo].[trnPMT].[MPMT_GUID] 作为 [payment].[MPMT_GUID]{guid'00000000-0000-0000-0000-000000000000'}) ) | 1 | 7 | 6 | 聚簇索引扫描 | 聚簇索引扫描 | 对象:([TestDb].[dbo].[trnPMT].[imp_clpk_trnPMT] AS [payment]), WHERE:([TestDb].[dbo].[trnPMT].[REVISED] as [payment].[REVISED] =(0) 和 [TestDb].[dbo].[trnPMT].[MPMT_GUID] 作为 [payment].[MPMT_GUID]{guid'00000000-0000-0000-0000-000000000000'}) | [付款].[TRANS_GUID], [付款].[CLIENT_GUID], [付款].[DEPOSIT_DATE], [付款].[PMT_AMOUNT], [付款].[CREATE_DATE_TIME] | 231167.7 | 6.566088 | 0.2730604 | 80 | 6.839149 | [支付]。[TRANS_GUID],[付款]。[CLIENT_GUID],[付款]。[DEPOSIT_DATE],[付款]。[PMT_AMOUNT],[付款]。[CREATE_DATE_TIME] | 空 | 计划行 | 0 | 1 |
| |--索引扫描(OBJECT:([TestDb].[dbo].[trnHistory].[IX_trnHistory_DATE_COMPLETED_TRANS_GUID_TRANS_NUMBER] AS [hist])) | 1 | 8 | 6 | 索引扫描 | 索引扫描 | 对象:([TestDb].[dbo].[trnHistory].[IX_trnHistory_DATE_COMPLETED_TRANS_GUID_TRANS_NUMBER] AS [hist]) | [历史].[TRANS_GUID], [历史].[DATE_COMPLETED] | 503270 | 1.753495 | 0.553754 | 31 | 2.307249 | [历史].[TRANS_GUID],[历史]。[DATE_COMPLETED] | 空 | 计划行 | 0 | 1 |
+------------------------------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------------------------------------+ ------+--------+--------+--------------------+ ----------------------+------------------------ ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- ------------------+---------------------------- ---------------------------------------------- ------------------------------------------------+ --------------+------------+------------+-------- ----+----------------+------------------------ -------------------------------------------------------- ---------------------------------------------- ----------+------------+---------+--------+----- --------------+

SHOWPLAN_XML:(
在此处输入图像描述
在此处规划 XML)

我是偶然发现了某种错误,还是我做错了什么我应该做不同的事情?

(PS 我知道警告的含义以及如何修复它,我对出现在一个地方而不是另一个地方的警告更感兴趣。)

编辑:
这是“关于”帮助页面中我的 SSMS 的版本信息。

Microsoft SQL Server 管理工作室:11.0.3128.0
Microsoft Analysis Services 客户端工具:11.0.3128.0
Microsoft 数据访问组件 (MDAC):6.3.9600.16384
微软 MSXML:3.0 4.0 6.0
微软 Internet Explorer:9.11.9600.16521
微软 .NET 框架:4.0.30319.34011
操作系统:6.3.9600

我正在针对数据库引擎版本运行11.0.3128

sql-server sql-server-2012
  • 1 1 个回答
  • 893 Views

1 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-03-21T11:03:55+08:002014-03-21T11:03:55+08:00

    这个:

    SET SHOWPLAN_XML ON;
    GO
    SELECT * FROM sys.objects;
    GO
    

    相当于按下Display Estimated Execution Plan工具栏(或点击Ctrl+ L)。您会注意到查询没有返回任何行,就像您使用Include Actual Execution Plan( Ctrl+ M) 时一样。

    溢出警告只是运行时警告。在显示估计计划时,SQL Server 无法知道在运行时会发生溢出。这是因为溢出是由可能只在查询的某些调用期间出现的因素引起的(例如,当存在内存压力时)。估计的计划大致知道它要请求多少内存,但是直到执行它才能知道它不会得到它。

    另外,我可以推荐*我们的免费工具 SQL Sentry Plan Explorer吗?我认为它提供的信息比 Management Studio 明显得多。我最近写了一篇很长的博客文章,可以作为教程,Jonathan Kehayias 也有一个很棒的 PluralSight 课程。

    *免责声明:我为 SQL Sentry 工作。

    • 4

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve