কেন একটি মোছা ক্যোয়ারী অন্য বিন্যাসের চেয়ে অনেক বেশি দীর্ঘ বিন্যাসে চলে?


11

আমার নির্দিষ্ট ক্লিনআপ কোড রয়েছে যা কিছু সদৃশ অপসারণ করার চেষ্টা করে।

এটি অনেক গ্রাহক সাইটে পুরোপুরি চলে। লগগুলি আমাকে বলে যে 45 সেকেন্ড পর্যন্ত কমপক্ষে 1 সেকেন্ডটি এই কোয়েরিটি গ্রাস করে:

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

তবে আমার একটি গ্রাহক রয়েছে যেখানে এই ক্যোয়ারীটি 4 ঘণ্টারও বেশি সময় চলবে (এখন অবধি এবং শেষ হচ্ছে না)! আমি ডিবি ( DBCC CHECKDB) চেক করেছি , আমি ইতিমধ্যে পরিসংখ্যান আপডেট করেছি ( sp_updatestats), UPDATE STATISTICS [tbl] WITH FULLSCANকোনও পরিবর্তনও দেখায় না।

আমি গ্রাহকের কাছ থেকে ডিবি এর মূল ব্যাকআপ আছে। আমি এটি একটি এসকিউএল সার্ভার 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

এই বিবৃতি একই ডিবিতে মাত্র 1-4 সেকেন্ডে কার্যকর করে।

এটির গতি বাড়ানোর জন্য আমি টেবিল বা এসকিউএল ডিবি দিয়ে কী করতে পারি?

আমার কাছে এটি ডিবি পরিস্থিতি / এসকিউএল সার্ভার সংস্করণে একটি নির্দিষ্ট সমস্যা বলে মনে হচ্ছে। আমরা প্রায় 100 অন্যান্য সাইটে এই আচরণটি দেখিনি।

প্রশ্নটি আলোচনার বিষয়ে নয় যে স্টাইলের DELETEসাথে দ্বিতীয়টি আরও JOINভাল। আমি এটা জানি. তবে বর্তমানে আমাদের কাছে এই অন্যান্য কোডটি উত্পাদনে রয়েছে এবং আমি উড়তে এটি পরিবর্তন করতে পারি না, তবে আমি গ্রাহককে খুশি করতে চাই।

Idঅযোগ্য নয়। এটি একটি প্রাথমিক ক্লাস্টারড আইডি। সূচক তৈরি করা কোনও বিকল্প নয়। কারণ আমি বর্তমান চলমান সিস্টেমকে প্রভাবিত করতে পারি না। শারীরিকভাবে কিছু আলাদা হতে হবে।

নিশ্চয়ই কোনও তালা নেই! আমি সবেমাত্র ডিবি-র ব্যাকআপ সহ একা স্ট্যান্ড মেশিন ব্যবহার করেছি। এবং আমি কেবল পরিচালনা স্টুডিওর ভিতরে এই একক বিবৃতি কার্যকর করেছি।

ক্যোয়ারী প্ল্যান

অনুসন্ধান পরিকল্পনা

আউটপুট sp_Woisactive

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

পরিকল্পনার এই অংশটিই সমস্যা।

এখানে চিত্র বর্ণনা লিখুন

সমস্যা

সঠিক আচরণ যদি subquery ফিরে এনেছে কোনো NULLআসতে হয় 0থেকে সারি NOT IN

এমনকি যদি IDঅযোগ্য না হয় (এবং MIN(ID)সম্ভবত NULLভেক্টর সমষ্টি হিসাবে ব্যবহার করার সময় এটি সম্ভবত ব্যবহার করা যায় না) এর ডেটাটাইপকে MIN(ID)নলাবদ্ধ হিসাবে বিবেচনা করা হয় ( NULLউদাহরণস্বরূপ খালি টেবিলের বিপরীতে স্কেলার সমষ্টি হিসাবে ব্যবহৃত হলে এটি এখনও ফিরে আসতে পারে )।

সুতরাং আপনার পরিকল্পনায় এই অতিরিক্ত সারি গণনা স্পুল যুক্ত হয়েছে যার কাজটি নিশ্চিত করা (একটি অ্যান্টি আধা NULLযোগে সম্মিলিতভাবে ) যে সাবকিউরিটি দ্বারা কোনও ফেরত দিলে কোনও সারি নির্গত হয় না।

দুর্ভাগ্যক্রমে যদিও এই স্পুলে অ্যান্টি-সেমি জোনের মাধ্যমে সরিয়ে নেওয়া সারিগুলি সম্ভবত হওয়ার সম্ভাবনা রয়েছে 0এবং সমস্ত 257,246সারিগুলি পরবর্তী অপারেটরে প্রবাহিত হবে কার্ডিনালাইটি অনুমানের ফলে এই ধাপটি পেরিয়ে যাওয়া সারিগুলির আনুমানিক সংখ্যা হ্রাস পাবে 1

ফলস্বরূপ এটিতে নেস্টেড লুপগুলির অভ্যন্তরে টেবিলটির একটি স্ক্যান আনুমানিক 1 টি কার্যকর করা সহ কার্যকর হয় যদিও বাস্তবে এটি পুরো টেবিলের 257,246বার স্ক্যান করে এবং একত্রিত করে ।

অ্যান্টি সেমি যোগ দিয়ে বের হওয়া এক-সারি অনুমানটি একটি জানা বাগ যা এখন বেশ কিছুক্ষণ আগে ট্রেস ফ্ল্যাগের নিচে স্থির হয়েছিল। আরও কিছু ব্যাকগ্রাউন্ড এবং লিঙ্কগুলির জন্য এন্টি-সেমি সম্পর্কিত বাগ এবং যোগদানের জন্য সম্পর্কিত প্রশ্নোত্তর দেখুন g

সমাধান

বাগটি কেবলমাত্র আপনার জন্য এসকিউএল সার্ভার 2017 এ প্রকাশ করে কারণ আপনার সাথে সামঞ্জস্যের স্তর 120 টি নির্বাচিত হয়েছে।

আপনার অ্যান্টি সেমি যোগ দেওয়ার জন্য ট্রেস পতাকা 4115 সক্রিয়, একটি OPTION (QUERYTRACEON 4199)ইঙ্গিত, একটি OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))ইঙ্গিত (সরাসরি বা পরিকল্পনা গাইডের মাধ্যমে) বা ডাটাবেসের জন্য আরও ভাল অনুমান পাওয়া উচিত :

ALTER DATABASE SCOPED CONFIGURATION
SET QUERY_OPTIMIZER_HOTFIXES = ON;

QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_140এসকিউএল সার্ভার 2017 সিইউ 10 হিসাবে ব্যবহারের ইঙ্গিতটি অন্য একটি বিকল্প।

আপনি কোন বিকল্পটি বেছে নিন তার উপর নির্ভর করে আপনি কতটা ব্যাপকভাবে অপ্টিমাইজার হটফিক্স প্রয়োগ করতে চান। সামঞ্জস্যতা স্তরগুলি স্বল্প-মেয়াদী জিনিস হিসাবে লক্ষ্য করা হচ্ছে, সুতরাং আপনার আরও একটি বর্তমান সেটিংয়ে যাওয়ার পরিকল্পনা করা উচিত, যেখানে এই নির্দিষ্ট অপ্টিমাইজারের ফিক্সটি ডিফল্টরূপে চালু রয়েছে।

Repro

নিম্নলিখিত স্ক্রিপ্ট সমস্যা এবং একটি সমাধান পুনরুত্পাদন:

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

কোড বর্তমানে উত্পাদনে রয়েছে এবং আমি এটিকে ফ্লাইতে পরিবর্তন করতে পারি না

সূচক তৈরি করা কোনও বিকল্প নয়। কারণ এবং বর্তমান চলমান সিস্টেমকে প্রভাবিত করতে পারে না।

আপনি যদি ক্যোয়ারী বা স্কিমা পরিবর্তন করতে না পারেন, এবং অবশ্যই আপনার ডেটাটির উপর নিয়ন্ত্রণ নেই তবে সমস্যা সমাধানের জন্য হার্ডওয়্যারটি ফেলে দেওয়া ছাড়া অন্য একমাত্র বিকল্প হ'ল এবং আমি ধরে নিই যে এটিও প্রশ্নটির বাইরে!

সিপিইউ 25% ব্যবহার করে (আমার 4 সিপিইউগুলির ঠিক 1)

এখানে সম্ভাবনার: QUERY পরিকল্পনা সার্ভার ঘূর্ণায়মান প্রতিটি সারিতে উপ-ক্যোয়ারী চলমান tbl। আপনার প্রশ্নের মধ্যে দেখা মত অনুরূপ পদ্ধতিতে বিবৃতি পরিবর্তন করা বা সূচিপত্র পরিবর্তন / পরীক্ষা করা (আপনার কমপক্ষে কিছু প্রয়োজন [IdProject], সম্ভবত [IdProject], [IdRepresentative], [TimeStart]আপনার উপর একটি বৃহত্তর সূচক সম্ভবত সেই বিষয়ে আটকে আছে)।

আপনার প্রত্যাশিত সমস্ত সূচকগুলি উপস্থিত এবং সক্ষম রয়েছে তা নিশ্চিত করার জন্য সম্ভবত পরীক্ষা করে দেখুন । পরিকল্পনাকারী কেন অস্বাভাবিক কিছু করছে সে কারণেই সম্ভবত বাসীর তথ্যগুলিতে তাদের পরিসংখ্যান আপডেট করুন।

আরেকটি বিবেচনা হ'ল এটি আপনার ক্যোয়ারী নাও হতে পারে যা সময় নিচ্ছে এবং সিপিইউ গ্রহণ করছে: আর একটি দীর্ঘ-চলমান লেনদেন থাকতে পারে যা লকগুলি ধারণ করে যা এটি সারি করতে বাধ্য করে । অননুমোদিতদের সাথে চেক করুন sp_who2যার মধ্যে অন্যরা দ্বারা কী সেশনগুলি অবরুদ্ধ করা হয়েছে তা সম্পর্কিত তথ্য অন্তর্ভুক্ত করে। যদি আপনার ক্যোয়ারীর কোনও সিপিইউ ও আইও সময় নথিভুক্ত না হয় এবং BlkByকলামে একটি মান থাকে তবে এটি ঘটেছিল। অথবা আরও ভাল যদি আপনাকে এটিকে DB(বা স্থানীয় master) যুক্ত করার অনুমতি দেওয়া হয়, তবে sp_Woisactive ব্যবহার করুন যা আরও বিশদ এবং ডায়াগনস্টিক বিকল্প দেয়। আপনি যদি ব্যবহার করতে না পারেনsp_whoisactive কারণ এটি ইনস্টল করা একটি স্কিমা পরিবর্তন হতে পারে যার জন্য আপনার অনুমতি নেই, এটি সিস্টেমের দৃষ্টিভঙ্গি / সারণী / ইথারটি কী ব্যবহার করছে তা দেখার জন্য কোডটি দেখুন এবং কোনও পদ্ধতি ইনস্টল না করে নিজেই এটি করার জন্য একটি কোয়েরি লিখুন।

আরও তথ্য ব্যতীত আমরা এর চেয়ে আরও বিশদ পরামর্শ দিতে পারি না। এবং তারপরেও যদি আপনি বিবৃতি বা কাঠামোটি স্পর্শ করতে না পারেন তবে আপনার বিকল্পগুলি সীমাবদ্ধ হতে চলেছে। ইতিমধ্যে প্রস্তাবিত প্রশ্নোত্তর পরিকল্পনাগুলিতেও সারণি / সূচী সংজ্ঞা এবং সারণির আনুমানিক আকার যুক্ত করুন: EXEC sp_spaceused 'tbl'সারিগুলির সংখ্যা এবং গ্রাহিত পৃষ্ঠাগুলির উভয়ই দেবে (যদি চেষ্টা করা হয় তবে এটি সারিবদ্ধও হতে পারে SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; EXEC sp_spaceused 'tbl')।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.