【发布时间】:2020-01-08 13:30:57
【问题描述】:
对于 PowerBI 使用情况,我们可以查看我们最大的表格。但是,它不会运行,会因 PAGEIOLATCH_SH 而超时。查询很简单:
select * from view where ProgramId = 'ParticularProgram'
但是,如果我们在视图中运行查询,它不会出现任何问题或超时。你知道是什么原因造成的吗?视图中的原始查询是:
select column 1, column 2 etc from table where ProgramId = 'ParticularProgram'
为分区指定 where 子句不会改变行为并使其保持缓慢。当两者一起运行时,第一个的查询成本为 99%。 ProgramId 在表中进行了分区,并且此特定程序是该分区的一部分。
在此先感谢
请为正在运行的查询找到附加的实际查询计划: DirectQueryOnTable,XML DirextQueryExecutionPlanXML 和对应的ddl:
/****** Object: Table [dm].[AggProgramPeriodLoyalty] Script Date: 1/8/2020 3:47:03 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dm].[AggProgramPeriodLoyalty](
[AggProgramPeriodLoyaltyKey] [int] IDENTITY(1,1) NOT NULL,
[ProgramId] [nvarchar](100) NOT NULL,
[ProgramTitle] [nvarchar](255) NOT NULL,
[ProgramCurrency] [nvarchar](3) NULL,
[ProgramPeriodType] [nvarchar](50) NOT NULL,
[ProgramPeriodTypeLabel] [nvarchar](50) NULL,
[IsCurrentProgramPeriod] [tinyint] NOT NULL,
[IsLastCompletedProgramPeriod] [tinyint] NOT NULL,
[LoyaltyId] [nvarchar](100) NOT NULL,
[IsRegistered] [int] NOT NULL,
[IsRegisteredCml] [int] NOT NULL,
[UsedPlatforms] [nvarchar](100) NULL,
[DigitalStampsBalanceMutation] [int] NOT NULL,
[DigitalStampsBalance] [int] NOT NULL,
[DigitalRedeemPotential] [int] NOT NULL,
[DigitalParticipationBonusInteractions] [int] NOT NULL,
[DigitalParticipationBonusInteractionsCml] [int] NOT NULL,
[DigitalParticipationBonusStamps] [int] NOT NULL,
[DigitalParticipationBonusStampsCml] [int] NOT NULL,
[DigitalCollectInteractions] [int] NOT NULL,
[DigitalCollectInteractionsCml] [int] NOT NULL,
[IsNewDigitalCollector] [int] NOT NULL,
[IsDigitalCollector] [int] NOT NULL,
[IsDigitalCollectorCml] [int] NOT NULL,
[DigitalCollectedStamps] [int] NOT NULL,
[DigitalCollectedStampsCml] [int] NOT NULL,
[TurnoverByDigitalCollectors] [decimal](18, 5) NOT NULL,
[TurnoverByDigitalCollectorsCml] [decimal](18, 5) NOT NULL,
[DigitalRedeemInteractions] [int] NOT NULL,
[DigitalRedeemInteractionsCml] [int] NOT NULL,
[IsNewDigitalRedeemer] [int] NOT NULL,
[IsDigitalRedeemer] [int] NOT NULL,
[IsDigitalRedeemerCml] [int] NOT NULL,
[DigitalRedeemedStamps] [int] NOT NULL,
[DigitalRedeemedStampsCml] [int] NOT NULL,
[DigitalRewards] [int] NOT NULL,
[DigitalRewardsCml] [int] NOT NULL,
[TurnoverByDigitalRedeemers] [decimal](18, 5) NOT NULL,
[TurnoverByDigitalRedeemersCml] [decimal](18, 5) NOT NULL,
[AdditionalPaymentForDigitalRewards] [decimal](18, 5) NOT NULL,
[AdditionalPaymentForDigitalRewardsCml] [decimal](18, 5) NOT NULL,
[DigitalCounterRedeemInteractions] [int] NOT NULL,
[DigitalCounterRedeemInteractionsCml] [int] NOT NULL,
[DigitalConvertInteractions] [int] NOT NULL,
[DigitalConvertInteractionsCml] [int] NOT NULL,
[DigitalConvertedStamps] [int] NOT NULL,
[DigitalConvertedStampsCml] [int] NOT NULL,
[DigitalAddInteractions] [int] NOT NULL,
[DigitalAddInteractionsCml] [int] NOT NULL,
[DigitalAddedStamps] [int] NOT NULL,
[DigitalAddedStampsCml] [int] NOT NULL,
[DigitalDeductInteractions] [int] NOT NULL,
[DigitalDeductInteractionsCml] [int] NOT NULL,
[DigitalDeductedStamps] [int] NOT NULL,
[DigitalDeductedStampsCml] [int] NOT NULL,
[DigitalTransferToInteractions] [int] NOT NULL,
[DigitalTransferToInteractionsCml] [int] NOT NULL,
[DigitalTransferedToStamps] [int] NOT NULL,
[DigitalTransferedToStampsCml] [int] NOT NULL,
[DigitalTransferFromInteractions] [int] NOT NULL,
[DigitalTransferFromInteractionsCml] [int] NOT NULL,
[DigitalTransferedFromStamps] [int] NOT NULL,
[DigitalTransferedFromStampsCml] [int] NOT NULL,
[DigitalGiftCreatedInteractions] [int] NOT NULL,
[DigitalGiftCreatedInteractionsCml] [int] NOT NULL,
[DigitalGiftCreatedStamps] [int] NOT NULL,
[DigitalGiftCreatedStampsCml] [int] NOT NULL,
[DigitalGiftRedeemedInteractions] [int] NOT NULL,
[DigitalGiftRedeemedInteractionsCml] [int] NOT NULL,
[DigitalGiftRedeemedStamps] [int] NOT NULL,
[DigitalGiftRedeemedStampsCml] [int] NOT NULL,
[DigitalGiftExpiredInteractions] [int] NOT NULL,
[DigitalGiftExpiredInteractionsCml] [int] NOT NULL,
[DigitalGiftExpiredStamps] [int] NOT NULL,
[DigitalGiftExpiredStampsCml] [int] NOT NULL,
[DigitalGiftCancelledInteractions] [int] NOT NULL,
[DigitalGiftCancelledInteractionsCml] [int] NOT NULL,
[DigitalGiftCancelledStamps] [int] NOT NULL,
[DigitalGiftCancelledStampsCml] [int] NOT NULL,
[CreateDTS] [datetime2](3) NOT NULL,
[CreateExnId] [int] NOT NULL,
[UpdateDTS] [datetime2](3) NULL,
[UpdateExnId] [int] NULL,
[IsProfileCompleted] [int] NULL,
[IsProfileCompletedCml] [int] NULL,
[DigitalRedeemBonusInteractions] [int] NULL,
[DigitalRedeemBonusInteractionsCml] [int] NULL,
[DigitalRedeemBonusStamps] [int] NULL,
[DigitalRedeemBonusStampsCml] [int] NULL,
[DigitalCounterCollectInteractions] [int] NULL,
[DigitalCounterCollectInteractionsCml] [int] NULL,
[DigitalCounterRedeemBonusInteractions] [int] NULL,
[DigitalCounterRedeemBonusInteractionsCml] [int] NULL,
[ProgramWeekCombination] [nvarchar](100) NULL,
[TotalUsedPlatforms] [nvarchar](100) NULL,
CONSTRAINT [PK_AggProgramPeriodLoyalty] PRIMARY KEY CLUSTERED
(
[AggProgramPeriodLoyaltyKey] ASC,
[ProgramId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PS_ByProgramId]([ProgramId]),
CONSTRAINT [UK_AggProgramPeriodLoyalty] UNIQUE NONCLUSTERED
(
[ProgramId] ASC,
[ProgramPeriodType] ASC,
[LoyaltyId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PS_ByProgramId]([ProgramId])
) ON [PS_ByProgramId]([ProgramId])
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCreatedStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftRedeemedStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftExpiredStampsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledInteractions]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledInteractionsCml]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledStamps]
GO
ALTER TABLE [dm].[AggProgramPeriodLoyalty] ADD DEFAULT ((0)) FOR [DigitalGiftCancelledStampsCml]
GO
以及视图上的 select 语句的估计查询计划,根本没有执行:QueryOnView,XML ViewExecutionPlanXML
还有视图 DDL:
CREATE view [dm].[vwAggProgramPeriodLoyalty]
as
select [AggProgramPeriodLoyaltyKey] as [Agg Program Period Loyalty Key]
, upper([ProgramId]) as [Program Id]
, [ProgramTitle] as [Program Title]
, [ProgramCurrency] as [Program Currency]
, [ProgramPeriodType] as [Program Period Type]
, [ProgramPeriodTypeLabel] as [Program Period Type Label]
, upper([ProgramWeekCombination]) as [Program Week Combination]
, [IsCurrentProgramPeriod] as [Is Current Program Period]
, [IsLastCompletedProgramPeriod] as [Is Last Completed Program Period]
, [LoyaltyId] as [Loyalty Id]
, [IsRegistered] as [Is Registered]
, [IsRegisteredCml] as [Is Registered Cumulative]
, [UsedPlatforms] as [Used Platforms]
, [DigitalStampsBalanceMutation] as [Digital Stamps Balance Mutation]
, [DigitalStampsBalance] as [Digital Stamps Balance]
, [DigitalRedeemPotential] as [Digital Redeem Potential]
, [DigitalParticipationBonusInteractions] as [Digital Participation Bonus Interactions]
, [DigitalParticipationBonusInteractionsCml] as [Digital Participation Bonus Interactions Cumulative]
, [DigitalParticipationBonusStamps] as [Digital Participation Bonus Stamps]
, [DigitalParticipationBonusStampsCml] as [Digital Participation Bonus Stamps Cumulative]
, [DigitalCollectInteractions] as [Digital Collect Interactions]
, [DigitalCollectInteractionsCml] as [Digital Collect Interactions Cumulative]
, [IsNewDigitalCollector] as [Is First Digital Collect]
, [IsDigitalCollector] as [Is Digital Collector]
, [IsDigitalCollectorCml] as [Is Digital Collector Cumulative]
, [DigitalCollectedStamps] as [Digital Collected Stamps]
, [DigitalCollectedStampsCml] as [Digital Collected Stamps Cumulative]
, [TurnoverByDigitalCollectors] as [Turnover By Digital Collectors]
, [TurnoverByDigitalCollectorsCml] as [Turnover By Digital Collectors Cumulative]
, [DigitalRedeemInteractions] as [Digital Redeem Interactions]
, [DigitalRedeemInteractionsCml] as [Digital Redeem Interactions Cumulative]
, [IsNewDigitalRedeemer] as [Is First Digital Redeem]
, [IsDigitalRedeemer] as [Is Digital Redeemer]
, [IsDigitalRedeemerCml] as [Is Digital Redeemer Cumulative]
, [DigitalRedeemedStamps] as [Digital Redeemed Stamps]
, [DigitalRedeemedStampsCml] as [Digital Redeemed Stamps Cumulative]
, [DigitalRewards] as [Digital Rewards]
, [DigitalRewardsCml] as [Digital Rewards Cumulative]
, [TurnoverByDigitalRedeemers] as [Turnover By Digital Redeemers]
, [TurnoverByDigitalRedeemersCml] as [Turnover By Digital Redeemers Cumulative]
, [AdditionalPaymentForDigitalRewards] as [Additional Payment For Digital Rewards]
, [AdditionalPaymentForDigitalRewardsCml] as [Additional Payment For Digital Rewards Cumulative]
, [DigitalConvertInteractions] as [Digital Convert Interactions]
, [DigitalConvertInteractionsCml] as [Digital Convert Interactions Cumulative]
, [DigitalConvertedStamps] as [Digital Converted Stamps]
, [DigitalConvertedStampsCml] as [Digital Converted Stamps Cumulative]
, [DigitalAddInteractions] as [Digital Add Interactions]
, [DigitalAddInteractionsCml] as [Digital Add Interactions Cumulative]
, [DigitalAddedStamps] as [Digital Added Stamps]
, [DigitalAddedStampsCml] as [Digital Added Stamps Cumulative]
, [DigitalDeductInteractions] as [Digital Deduct Interactions]
, [DigitalDeductInteractionsCml] as [Digital Deduct Interactions Cumulative]
, [DigitalDeductedStamps] as [Digital Deducted Stamps]
, [DigitalDeductedStampsCml] as [Digital Deducted Stamps Cumulative]
, [DigitalTransferToInteractions] as [Digital Transfer To Interactions]
, [DigitalTransferToInteractionsCml] as [Digital Transfer To Interactions Cumulative]
, [DigitalTransferedToStamps] as [Digital Transfered To Stamps]
, [DigitalTransferedToStampsCml] as [Digital Transfered To Stamps Cumulative]
, [DigitalTransferFromInteractions] as [Digital Transfer From Interactions]
, [DigitalTransferFromInteractionsCml] as [Digital Transfer From Interactions Cumulative]
, [DigitalTransferedFromStamps] as [Digital Transfered From Stamps]
, [DigitalTransferedFromStampsCml] as [Digital Transfered From Stamps Cumulative]
, [DigitalGiftCreatedInteractions] as [Digital Gift Created Interactions]
, [DigitalGiftCreatedInteractionsCml] as [Digital Gift Created Interactions Cumulative]
, [DigitalGiftCreatedStamps] as [Digital Gift Created Stamps]
, [DigitalGiftCreatedStampsCml] as [Digital Gift Created Stamps Cumulative]
, [DigitalGiftRedeemedInteractions] as [Digital Gift Redeemed Interactions]
, [DigitalGiftRedeemedInteractionsCml] as [Digital Gift Redeemed Interactions Cumulative]
, [DigitalGiftRedeemedStamps] as [Digital Gift Redeemed Stamps]
, [DigitalGiftRedeemedStampsCml] as [Digital Gift Redeemed Stamps Cumulative]
, [DigitalGiftExpiredInteractions] as [Digital Gift Expired Interactions]
, [DigitalGiftExpiredInteractionsCml] as [Digital Gift Expired Interactions Cumulative]
, [DigitalGiftExpiredStamps] as [Digital Gift Expired Stamps]
, [DigitalGiftExpiredStampsCml] as [Digital Gift Expired Stamps Cumulative]
, [DigitalGiftCancelledInteractions] as [Digital Gift Cancelled Interactions]
, [DigitalGiftCancelledInteractionsCml] as [Digital Gift Cancelled Interactions Cumulative]
, [DigitalGiftCancelledStamps] as [Digital Gift Cancelled Stamps]
, [DigitalGiftCancelledStampsCml] as [Digital Gift Cancelled Stamps Cumulative]
from [dm].[AggProgramPeriodLoyalty];
此外,我添加了超时概述:LogOfWaitType
【问题讨论】:
-
您好,欢迎来到 Stack Overflow。就目前而言,我们只能猜测 - 请发布架构定义(对于您的基表和您的视图),以及两个查询的执行计划。
-
嗨!谢谢您的回答。我添加了一些信息,并且还想添加架构定义。您是指视图中使用的表结构和查询吗?还是您的意思不同?
-
您是否在查询中使用任何窗口函数?
-
我们非常更喜欢文字而不是图片,如果可以的话!是的,表格和视图的 DDL 会很棒。
-
@Bonzay,我现在包含了 DDL。该视图不包含任何窗口函数,只有 2 个鞋面。据我所知,这不会影响性能。
标签: sql sql-server performance azure-sql-database