DELETE क्वेरी एक प्रारूप में दूसरे की तुलना में अधिक समय तक क्यों चलती है?


11

मेरे पास विशिष्ट सफाई कोड है जो कुछ डुप्लिकेट को निकालने की कोशिश करता है।

यह कई ग्राहक साइटों पर पूरी तरह से चलता है। लॉग मुझे बताते हैं कि इस क्वेरी से 45 सेकंड तक कम से कम 1 सेकंड का उपभोग किया जाता है:

DELETE FROM [tbl]
WHERE [Id] NOT IN
(
    SELECT MIN([Id])
    FROM [tbl]
    GROUP BY [IdProject], [IdRepresentative], [TimeStart]
) 

लेकिन मेरे पास एक ग्राहक है जहां यह क्वेरी 4 घंटे (अब तक और समाप्त नहीं) से अधिक समय तक चलती है! मैंने DB ( DBCC CHECKDB) की जाँच की , मैं पहले से ही आँकड़ों को अद्यतन करता हूँ ( sp_updatestats), UPDATE STATISTICS [tbl] WITH FULLSCANकोई परिवर्तन नहीं दिखाता है।

मेरे पास ग्राहक से डीबी का मूल बैकअप है। मैं इसे SQL सर्वर 14.0.2002.14 पर चलाता हूं। मेरे पास मानक संस्करण है, ग्राहक एक्सप्रेस संस्करण का उपयोग करता है।

मैं गतिविधि की निगरानी में देख सकता हूं कि कोई और डीबी का उपयोग नहीं कर रहा है। कोई इंतजार नहीं कर रहे हैं और सीपीयू 25% (मेरे 4 सीपीयू में से 1) का उपयोग किया जाता है। इसके अलावा मेरे परीक्षण के मामले में कोई और डीबी का उपयोग नहीं कर रहा है।

मैंने क्वेरी में सुधार किया और इस कथन की जाँच की:

DELETE FROM [tbl]
FROM [tbl] AS t
LEFT OUTER JOIN 
    (
        SELECT MIN([Id]) AS [IdMin]
        FROM [tbl]
        GROUP BY [IdProject], [IdRepresentative], [TimeStart]
    ) AS d ON d.[IdMin]=t.[Id]
WHERE d.[IdMin] IS NULL

यह कथन एक ही DB पर सिर्फ 1-4 सेकंड में निष्पादित होता है।

मैं इसे गति देने के लिए तालिका या SQL DB के साथ क्या कर सकता हूं?

मेरे लिए यह DB स्थिति / SQL सर्वर संस्करण के साथ एक विशिष्ट समस्या प्रतीत होती है। हमने लगभग 100 अन्य साइटों पर इस व्यवहार को कभी नहीं देखा है।

सवाल यह चर्चा करने के बारे में नहीं है कि शैली के DELETEसाथ दूसरा JOINबेहतर है। मैं यह जानता हूँ। लेकिन हमारे पास उत्पादन में वर्तमान में यह अन्य कोड है और मैं इसे मक्खी पर नहीं बदल सकता, लेकिन मैं ग्राहक को खुश करना चाहता हूं।

Idअशक्त नहीं है। यह एक प्राथमिक क्लस्टर आईडी है। सूचकांक बनाना कोई विकल्प नहीं है। क्योंकि मैं चालू सिस्टम को प्रभावित नहीं कर सकता। कुछ शारीरिक रूप से अलग होना चाहिए।

निश्चित रूप से कोई ताले नहीं हैं! मैंने सिर्फ DB के बैकअप के साथ एक स्टैंड अलोन मशीन का उपयोग किया है। और मैंने प्रबंधन स्टूडियो के अंदर इस एकल कथन को निष्पादित किया।

क्वेरी योजना

क्वेरी योजना

आउटपुट sp_whoisactive

00 00:03:46.523;54;<?query -- DELETE FROM [tblSchedTimeline] WHERE [Id] NOT IN  (       SELECT MIN([Id])        FROM [tblSchedTimeline]         GROUP BY [IdProject], [IdRepresentative], [TimeStart]   )  --?>;DESKTOP-QV3K54L\Test;NULL;"            224,653";"                  0";"                  0";NULL;"          2,393,069";"                  0";"              1,225";"<ShowPlanXML xmlns=""http://schemas.microsoft.com/sqlserver/2004/07/showplan"" Version=""1.6"" Build=""14.0.2002.14""><BatchSequence><Batch><Statements><StmtSimple StatementText=""DELETE FROM [tblSchedTimeline]&#xD;&#xA;WHERE [Id] NOT IN&#xD;&#xA;&#x9;(&#xD;&#xA;&#x9;&#x9;SELECT MIN([Id])&#xD;&#xA;&#x9;&#x9;FROM [tblSchedTimeline]&#xD;&#xA;&#x9;&#x9;GROUP BY [IdProject], [IdRepresentative], [TimeStart]&#xD;&#xA;&#x9;)"" StatementId=""1"" StatementCompId=""1"" StatementType=""DELETE"" RetrievedFromCache=""true"" StatementSubTreeCost=""91.3449"" StatementEstRows=""257246"" SecurityPolicyApplied=""false"" StatementOptmLevel=""FULL"" QueryHash=""0x527453AF47051791"" QueryPlanHash=""0x1988C324845A2D73"" CardinalityEstimationModelVersion=""120""><StatementSetOptions QUOTED_IDENTIFIER=""true"" ARITHABORT=""true"" CONCAT_NULL_YIELDS_NULL=""true"" ANSI_NULLS=""true"" ANSI_PADDING=""true"" ANSI_WARNINGS=""true"" NUMERIC_ROUNDABORT=""false"" /><QueryPlan CachedPlanSize=""64"" CompileTime=""458"" CompileCPU=""16"" CompileMemory=""584""><MemoryGrantInfo SerialRequiredMemory=""512"" SerialDesiredMemory=""21608"" /><OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant=""104844"" EstimatedPagesCached=""26211"" EstimatedAvailableDegreeOfParallelism=""2"" MaxCompileMemory=""1414704"" /><OptimizerStatsUsage><StatisticsInfo LastUpdate=""2019-01-23T09:09:49.14"" ModificationCount=""37344"" SamplingPercent=""28.5972"" Statistics=""[PK__tblSched__3214EC076837DC08]"" Table=""[tblSchedTimeline]"" Schema=""[dbo]"" Database=""[AGVIP-KCC]"" /></OptimizerStatsUsage><RelOp NodeId=""0"" PhysicalOp=""Index Delete"" LogicalOp=""Delete"" EstimateRows=""257246"" EstimateIO=""7.9627"" EstimateCPU=""0.257246"" AvgRowSize=""9"" EstimatedTotalSubtreeCost=""91.3449"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList /><Update WithOrderedPrefetch=""1"" DMLRequestSort=""1""><Object Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Index=""[IDX_SchedTimeline_Ids]"" IndexKind=""NonClustered"" Storage=""RowStore"" /><RelOp NodeId=""2"" PhysicalOp=""Sort"" LogicalOp=""Sort"" EstimateRows=""257246"" EstimateIO=""0.0112613"" EstimateCPU=""21.2216"" AvgRowSize=""27"" EstimatedTotalSubtreeCost=""83.125"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></OutputList><MemoryFractions Input=""1"" Output=""1"" /><Sort Distinct=""0""><OrderBy><OrderByColumn Ascending=""1""><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /></OrderByColumn><OrderByColumn Ascending=""1""><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /></OrderByColumn><OrderByColumn Ascending=""1""><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></OrderByColumn><OrderByColumn Ascending=""1""><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OrderByColumn></OrderBy><RelOp NodeId=""3"" PhysicalOp=""Clustered Index Delete"" LogicalOp=""Delete"" EstimateRows=""257246"" EstimateIO=""30.7735"" EstimateCPU=""0.257246"" AvgRowSize=""27"" EstimatedTotalSubtreeCost=""61.8921"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></OutputList><Update WithOrderedPrefetch=""1"" DMLRequestSort=""1""><Object Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Index=""[PK__tblSched__3214EC076837DC08]"" IndexKind=""Clustered"" Storage=""RowStore"" /><RelOp NodeId=""5"" PhysicalOp=""Table Spool"" LogicalOp=""Eager Spool"" EstimateRows=""257246"" EstimateIO=""0.013125"" EstimateCPU=""0.0927087"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""30.8613"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OutputList><Spool><RelOp NodeId=""6"" PhysicalOp=""Nested Loops"" LogicalOp=""Left Anti Semi Join"" EstimateRows=""257246"" EstimateIO=""0"" EstimateCPU=""4.18e-006"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""30.7555"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OutputList><NestedLoops Optimized=""0""><OuterReferences><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OuterReferences><RelOp NodeId=""7"" PhysicalOp=""Sort"" LogicalOp=""Sort"" EstimateRows=""1"" EstimateIO=""0.0112613"" EstimateCPU=""0.000100011"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""29.3753"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OutputList><MemoryFractions Input=""1"" Output=""1"" /><Sort Distinct=""0""><OrderBy><OrderByColumn Ascending=""1""><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OrderByColumn></OrderBy><RelOp NodeId=""8"" PhysicalOp=""Nested Loops"" LogicalOp=""Left Anti Semi Join"" EstimateRows=""1"" EstimateIO=""0"" EstimateCPU=""1.07529"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""29.3639"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OutputList><NestedLoops Optimized=""0""><RelOp NodeId=""9"" PhysicalOp=""Index Scan"" LogicalOp=""Index Scan"" EstimateRows=""257246"" EstimatedRowsRead=""257246"" EstimateIO=""0.874977"" EstimateCPU=""0.283128"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""1.1581"" TableCardinality=""257246"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></OutputList><IndexScan Ordered=""1"" ScanDirection=""FORWARD"" ForcedIndex=""0"" ForceSeek=""0"" ForceScan=""0"" NoExpandHint=""0"" Storage=""RowStore""><DefinedValues><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></DefinedValue></DefinedValues><Object Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Index=""[IDX_SchedTimeline_Ids]"" TableReferenceId=""1"" IndexKind=""NonClustered"" Storage=""RowStore"" /></IndexScan></RelOp><RelOp NodeId=""10"" PhysicalOp=""Row Count Spool"" LogicalOp=""Lazy Spool"" EstimateRows=""1"" EstimateIO=""0"" EstimateCPU=""0.0001001"" AvgRowSize=""9"" EstimatedTotalSubtreeCost=""27.1305"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""257245"" EstimatedExecutionMode=""Row""><OutputList /><RowCountSpool><RelOp NodeId=""11"" PhysicalOp=""Filter"" LogicalOp=""Filter"" EstimateRows=""1"" EstimateIO=""0"" EstimateCPU=""0.0331891"" AvgRowSize=""9"" EstimatedTotalSubtreeCost=""1.38021"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList /><Filter StartupExpression=""0""><RelOp NodeId=""12"" PhysicalOp=""Stream Aggregate"" LogicalOp=""Aggregate"" EstimateRows=""69144"" EstimateIO=""0"" EstimateCPU=""0.18892"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""1.34702"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Column=""Expr1004"" /></OutputList><StreamAggregate><DefinedValues><DefinedValue><ColumnReference Column=""Expr1004"" /><ScalarOperator ScalarString=""MIN([AGVIP-KCC].[dbo].[tblSchedTimeline].[Id])""><Aggregate Distinct=""0"" AggType=""MIN""><ScalarOperator><Identifier><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><GroupBy><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></GroupBy><RelOp NodeId=""13"" PhysicalOp=""Index Scan"" LogicalOp=""Index Scan"" EstimateRows=""257246"" EstimatedRowsRead=""257246"" EstimateIO=""0.874977"" EstimateCPU=""0.283128"" AvgRowSize=""27"" EstimatedTotalSubtreeCost=""1.1581"" TableCardinality=""257246"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></OutputList><IndexScan Ordered=""1"" ScanDirection=""FORWARD"" ForcedIndex=""0"" ForceSeek=""0"" ForceScan=""0"" NoExpandHint=""0"" Storage=""RowStore""><DefinedValues><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></DefinedValue></DefinedValues><Object Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Index=""[IDX_SchedTimeline_Ids]"" TableReferenceId=""2"" IndexKind=""NonClustered"" Storage=""RowStore"" /></IndexScan></RelOp></StreamAggregate></RelOp><Predicate><ScalarOperator ScalarString=""[Expr1004] IS NULL""><Compare CompareOp=""IS""><ScalarOperator><Identifier><ColumnReference Column=""Expr1004"" /></Identifier></ScalarOperator><ScalarOperator><Const ConstValue=""NULL"" /></ScalarOperator></Compare></ScalarOperator></Predicate></Filter></RelOp></RowCountSpool></RelOp></NestedLoops></RelOp></Sort></RelOp><RelOp NodeId=""14"" PhysicalOp=""Filter"" LogicalOp=""Filter"" EstimateRows=""1"" EstimateIO=""0"" EstimateCPU=""0.0331891"" AvgRowSize=""9"" EstimatedTotalSubtreeCost=""1.38021"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList /><Filter StartupExpression=""0""><RelOp NodeId=""15"" PhysicalOp=""Stream Aggregate"" LogicalOp=""Aggregate"" EstimateRows=""69144"" EstimateIO=""0"" EstimateCPU=""0.18892"" AvgRowSize=""11"" EstimatedTotalSubtreeCost=""1.34702"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Column=""Expr1004"" /></OutputList><StreamAggregate><DefinedValues><DefinedValue><ColumnReference Column=""Expr1004"" /><ScalarOperator ScalarString=""MIN([AGVIP-KCC].[dbo].[tblSchedTimeline].[Id])""><Aggregate Distinct=""0"" AggType=""MIN""><ScalarOperator><Identifier><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></Identifier></ScalarOperator></Aggregate></ScalarOperator></DefinedValue></DefinedValues><GroupBy><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></GroupBy><RelOp NodeId=""16"" PhysicalOp=""Index Scan"" LogicalOp=""Index Scan"" EstimateRows=""257246"" EstimatedRowsRead=""257246"" EstimateIO=""0.874977"" EstimateCPU=""0.283128"" AvgRowSize=""27"" EstimatedTotalSubtreeCost=""1.1581"" TableCardinality=""257246"" Parallel=""0"" EstimateRebinds=""0"" EstimateRewinds=""0"" EstimatedExecutionMode=""Row""><OutputList><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></OutputList><IndexScan Ordered=""1"" ScanDirection=""FORWARD"" ForcedIndex=""0"" ForceSeek=""0"" ForceScan=""0"" NoExpandHint=""0"" Storage=""RowStore""><DefinedValues><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdProject"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""IdRepresentative"" /></DefinedValue><DefinedValue><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""TimeStart"" /></DefinedValue></DefinedValues><Object Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Index=""[IDX_SchedTimeline_Ids]"" TableReferenceId=""2"" IndexKind=""NonClustered"" Storage=""RowStore"" /></IndexScan></RelOp></StreamAggregate></RelOp><Predicate><ScalarOperator ScalarString=""[AGVIP-KCC].[dbo].[tblSchedTimeline].[Id]=[Expr1004]""><Compare CompareOp=""EQ""><ScalarOperator><Identifier><ColumnReference Database=""[AGVIP-KCC]"" Schema=""[dbo]"" Table=""[tblSchedTimeline]"" Column=""Id"" /></Identifier></ScalarOperator><ScalarOperator><Identifier><ColumnReference Column=""Expr1004"" /></Identifier></ScalarOperator></Compare></ScalarOperator></Predicate></Filter></RelOp></NestedLoops></RelOp></Spool></RelOp></Update></RelOp></Sort></RelOp></Update></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>";"              2,705";runnable;"                  2";NULL;DESKTOP-QV3K54L;AGVIP-KCC;Microsoft SQL Server Management Studio - Abfrage;2019-02-05 15:35:50.680;2019-02-05 15:35:50.677;0;2019-02-05 15:39:37.297

Sp_spaceused का आउटपुट

name    rows    reserved    data    index_size  unused
tblSchedTimeline    257246                  50280 KB    36432 KB    9720 KB 4128 KB

क्या यह निष्पादन योजना उस क्वेरी के लिए है जो घंटों चलती है? क्या अनुमानित पंक्ति की गिनती कम से कम लगभग सही है? क्या धीमी योजना टेंपर्ड में फैल जाती है, या टेंपर्ड बेतहाशा बढ़ता है? समानांतरकरण मदद कर सकता है; क्या आप MAXDOPबंद हो गए हैं, या समानता के लिए लागत सीमा बदल गई है?
जॉन ऑफ ऑल ट्रेड्स

जवाबों:


24

योजना का यह हिस्सा समस्या है।

यहाँ छवि विवरण दर्ज करें

मुद्दा

यदि उपकुंजी वापस लाता है तो सही व्यवहार से पंक्तियों NULLको वापस 0करना है NOT IN

यहां तक ​​कि अगर IDअशक्त नहीं है (और इसलिए MIN(ID)संभवतः इसे NULLएक वेक्टर समुच्चय के रूप में उपयोग नहीं किया जा सकता है ) तो डाटटाइप MIN(ID)को अशक्त माना जाता है ( NULLउदाहरण के लिए एक खाली तालिका के खिलाफ अदिश समुच्चय के रूप में उपयोग किए जाने पर भी यह वापस आ सकता है )।

तो आपके पास यह अतिरिक्त पंक्ति गणना स्पूल है जो उस योजना में जोड़ा गया है जिसका काम यह सुनिश्चित करना है (एक विरोधी अर्ध जुड़ाव के साथ संयोजन में) कि उप पंक्तियों NULLद्वारा वापस लौटने पर कोई पंक्तियाँ उत्सर्जित नहीं होती हैं ।

दुर्भाग्य से भले ही इस स्पूल पर एंटी सेमी जॉइन द्वारा समाप्त की गई पंक्तियाँ होने की संभावना है 0और सभी 257,246पंक्तियाँ अगले ऑपरेटर पर बहेंगी। कार्डिनैलिटी का अनुमान उस चरण में जाने वाली पंक्तियों की अनुमानित संख्या को कम कर देता है 1

परिणामस्वरूप इसमें अनुमानित 1 निष्पादन के साथ नेस्टेड छोरों के अंदर की मेज का एक स्कैन होता है जबकि वास्तव में यह पूरे टेबल 257,246बार को स्कैन और एकत्र करेगा ।

एंटी सेमी ज्वाइन से निकलने वाला एक-पंक्ति का अनुमान एक ज्ञात बग है जो ट्रेस ध्वज 4199 के तहत काफी समय पहले तय किया गया था। एंटी-सेमी के लिए संबंधित प्रश्नोत्तर को देखें कुछ और पृष्ठभूमि और लिंक के लिए बग से जुड़ें

उपाय

बग केवल आपके लिए SQL Server 2017 पर दिखाई देता है क्योंकि आपके पास संगतता स्तर 120 चयनित है।

आप आप के लिए एक बेहतर अनुमान प्राप्त खोजना चाहिए विरोधी अर्ध ध्वज का पता लगाने के साथ जुड़ें 4199 सक्रिय, एक OPTION (QUERYTRACEON 4199)संकेत है, एक OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))संकेत (प्रत्यक्ष या योजना गाइड के माध्यम से) या डेटाबेस के लिए:

ALTER DATABASE SCOPED CONFIGURATION
SET QUERY_OPTIMIZER_HOTFIXES = ON;

उपयोग संकेत QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_140SQL सर्वर 2017 CU10 के रूप में एक और विकल्प है।

आप कौन सा विकल्प चुनते हैं यह इस बात पर निर्भर करता है कि आप ऑप्टिमाइज़र हॉटफ़िक्स को लागू करने के लिए कितने व्यापक रूप से चाहते हैं। संगतता स्तरों का उद्देश्य अल्पकालिक चीजें हैं, इसलिए आपको अधिक वर्तमान सेटिंग में जाने की योजना बनानी चाहिए, जहां यह विशेष रूप से ऑप्टिमाइज़र फिक्स डिफ़ॉल्ट रूप से चालू है।

रेप्रो

निम्नलिखित स्क्रिप्ट समस्या और एक समस्या को पुन: पेश करता है:

ALTER DATABASE CURRENT 
SET COMPATIBILITY_LEVEL = 120;
GO
ALTER DATABASE SCOPED CONFIGURATION
SET QUERY_OPTIMIZER_HOTFIXES = OFF;
GO
DROP TABLE IF EXISTS dbo.tbl;
GO
CREATE TABLE dbo.tbl
(
    Id integer PRIMARY KEY, 
    IdProject integer NOT NULL, 
    IdRepresentative integer NOT NULL, 
    TimeStart datetime NOT NULL,

    INDEX i NONCLUSTERED
    (
        TimeStart, 
        IdRepresentative, 
        IdProject
    )
);
GO
UPDATE STATISTICS dbo.tbl 
WITH 
    ROWCOUNT = 257246, 
    PAGECOUNT = 25725;
DELETE FROM [tbl]
WHERE [Id] NOT IN
(
    SELECT MIN([Id])
    FROM [tbl]
    GROUP BY [IdProject], [IdRepresentative], [TimeStart]
) 
OPTION 
(
    MAXDOP 1
);

बग

DELETE FROM [tbl]
WHERE [Id] NOT IN
(
    SELECT MIN([Id])
    FROM [tbl]
    GROUP BY [IdProject], [IdRepresentative], [TimeStart]
) 
OPTION 
(
    MAXDOP 1,
    USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES')
);

तय के साथ

वैकल्पिक सिंटैक्स

आदर्श रूप से आपको समस्या का उपयोग न करने के लिए क्वेरी को फिर से लिखना चाहिए NOT IN। एक संभावित विकल्प, जो उपरोक्त फिक्स के साथ भी अधिक कुशल होने की संभावना है, होगा

DELETE T
FROM   (SELECT ROW_NUMBER() OVER (PARTITION BY IdProject, IdRepresentative, TimeStart ORDER BY Id) AS RN
        FROM   tbl) T
WHERE  RN > 1 

-2

वर्तमान में उत्पादन में कोड और मैं इसे मक्खी पर नहीं बदल सकता

सूचकांक बनाना कोई विकल्प नहीं है। क्योंकि और चालू सिस्टम को प्रभावित नहीं कर सकता है।

यदि आप क्वेरी या स्कीमा को बदल नहीं सकते हैं, और आप निश्चित रूप से डेटा पर कोई नियंत्रण नहीं रखते हैं, तो समस्या पर हार्डवेयर फेंकने का एकमात्र अन्य विकल्प है और मुझे लगता है कि यह सवाल से बाहर है!

CPU का उपयोग 25% (मेरे 4 सीपीयू में से ठीक 1) द्वारा किया जाता है

यहां संभावनाओं के लिए: क्वेरी योजना में हर पंक्ति के लिए उस उप-क्वेरी को चलाने वाला सर्वर कताई है tbl। अपने प्रश्न में देखे गए या बदलते / अनुक्रमणिका जाँच के समान तरीके से कथन को बदलने के अलावा (आपको कम से कम कुछ चाहिए [IdProject], शायद [IdProject], [IdRepresentative], [TimeStart]आप पर एक व्यापक सूचकांक संभवतः उस संबंध में अटक गया हो।

शायद यह सुनिश्चित करने के लिए जांचें कि आपके द्वारा अपेक्षित सभी सूचकांक मौजूद और सक्षम हैं । शायद मामले के बासी जानकारी में उनके आँकड़े अपडेट करें कि क्यों योजनाकार कुछ असामान्य कर रहा है।

एक और विचार यह है कि यह आपकी क्वेरी नहीं हो सकती है जो समय ले रही है और सीपीयू का उपभोग कर रही है: एक और लंबे समय तक चलने वाला लेनदेन हो सकता है जो ताले को पकड़े हुए है जो इसे कतार में खड़ा करता है । अनिर्दिष्ट के साथ जांचें sp_who2जिसमें कौन से सत्र दूसरों द्वारा अवरुद्ध किए गए हैं, इसके बारे में जानकारी शामिल है। यदि आपकी क्वेरी में बहुत कम या कोई CPU और IO समय दर्ज नहीं किया गया है और BlkByकॉलम में एक मान है तो यही हुआ है। या बेहतर अभी भी अगर आपको इसे DB(या स्थानीय master) में जोड़ने की अनुमति है , तो sp_whoisactive का उपयोग करें जो अधिक विवरण और निदान विकल्प प्रदान करता है। यदि आप उपयोग नहीं कर सकतेsp_whoisactive क्योंकि इसे स्थापित करना एक स्कीमा परिवर्तन होगा जिसकी आपको अनुमति नहीं है, यह देखने के लिए कोड को देखें कि सिस्टम व्यू / टेबल / ईथर का क्या उपयोग कर रहा है और एक क्वेरी लिखने के लिए एक प्रक्रिया को स्थापित करने की आवश्यकता के बिना खुद को ऐसा करने के लिए लिखें।

अधिक जानकारी के बिना हम इससे अधिक विस्तृत सलाह नहीं दे सकते। और तब भी यदि आप स्टेटमेंट को नहीं छू सकते हैं और न ही आपके विकल्प सीमित होने वाले हैं। पहले से सुझाई गई प्रश्न क्वेरी योजनाओं में जोड़ें, तालिका / सूचकांक परिभाषाएँ, और तालिका के अनुमानित आकार: EXEC sp_spaceused 'tbl'दोनों पंक्तियों की संख्या और खपत किए गए पृष्ठों की संख्या (जो कि कोशिश की जा सकती है, यदि वे भी कोशिश की जा सकती हैं SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; EXEC sp_spaceused 'tbl')।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.