আমি মনে করি নীচের কোয়েরিটি আপনাকে অন্ততপক্ষে যথেষ্ট ঘনিষ্ঠ করবে। এটি একটি ডিএমভি ব্যবহার করে যা এসকিউএল সার্ভার ২০১৪ সালে চালু হয়েছিল: sys.dm_exec_query_profiles (এবং মার্টিন স্মিথকে এটি সম্পর্কিত ডিবিএ.স্ট্যাকএক্সচেঞ্জের মাধ্যমে আমার কাছে পরিচয় করিয়ে দেওয়ার জন্য ধন্যবাদ: নির্বাচন নির্বাচন বিবৃতিতে অগ্রগতি :-)।
দয়া করে নোট করুন:
!! আপনি যোগ করতে হবে SET STATISTICS PROFILE ON;
বা SET STATISTICS XML ON;
কোয়েরি ব্যাচ যে করছে CREATE INDEX
(এবং স্থাপন সামনেCREATE INDEX
, বিবৃতি যে সুস্পষ্ট ছিল না) অন্য কোন সারি যে SPID এই না DMV দেখানো হবে, / session_id
!!
IN
অপারেটর ফিল্টার করার জন্য ব্যবহার করা হয় Index Insert
সারি যে, যদি অন্তর্ভুক্ত, বৃদ্ধি পাবে TotalRows
যেহেতু যে সারি প্রক্রিয়াজাত কোন সারি কখনো দেখায় মূল্যবোধ, যা গণনার তীর্যক হবে।
এখানে প্রদর্শিত সারি গণনাটি (যেমন TotalRows
) দুটি পদক্ষেপ নেওয়ার কারণে টেবিলের সারি গণনার দ্বিগুণ, প্রত্যেকে সমস্ত সারিতে চলমান: প্রথমটি একটি "টেবিল স্ক্যান" বা "ক্লাস্টারড ইনডেক্স স্ক্যান", এবং দ্বিতীয়টি বাছাই করা". ক্লাস্টারড ইনডেক্স তৈরি করার সময় বা একটি হিপে একটি নন-ক্লাস্টার্ড ইনডেক্স তৈরি করার সময় আপনি "টেবিল স্ক্যান" দেখতে পাবেন। ক্লাস্টারড ইনডেক্সে একটি নন-ক্লাস্টারড ইনডেক্স তৈরি করার সময় আপনি "ক্লাস্টারড ইনডেক্স স্ক্যান" দেখতে পাবেন।
ফিল্টার সূচকগুলি তৈরি করার সময় এই কোয়েরিটি কাজ করছে বলে মনে হয় না। কিছু কারণে ফিল্টারড সূচী ক) "বাছাই করুন" পদক্ষেপটি নেই, এবং খ) row_count
ক্ষেত্রটি কখনও 0 থেকে বৃদ্ধি পায় না।
সম্পর্কে নিশ্চিত নই আমি আগে পরীক্ষা ছিল, কিন্তু আমার পরীক্ষা এখন ইঙ্গিত ফিল্টার ইনডেক্সে হয় এই প্রশ্নের সাথে ক্যাপচার। মিষ্টি। যদিও সর্তক থাকুন যে সারি গণনাগুলি বন্ধ হতে পারে (আমি দেখব যে আমি কোনও দিন এটি ঠিক করতে পারি কিনা)।
ইতিমধ্যে নন-ক্লাস্টারড ইনডেক্সে একটি হিপে একটি ক্লাস্টারড ইনডেক্স তৈরি করার সময়, ননক্র্লাস্টারড ইনডেক্সগুলি পুনর্নির্মাণ করতে হবে (ক্লাস্টারড ইনডেক্স কী (গুলি) - এর জন্য আরআইডি - রোডআইডি - র পরিবর্তন করতে হবে, এবং প্রতিটি নন-ক্লাস্টারড ইনডেক্স পুনর্নির্মাণ করবে) একটি পৃথক অপারেশন হতে হবে এবং তাই ক্লাস্টারড সূচক তৈরির সময় এই কোয়েরি দ্বারা ফিরিয়ে দেওয়া পরিসংখ্যানগুলিতে প্রতিফলিত হবে না।
এই ক্যোয়ারির বিরুদ্ধে পরীক্ষা করা হয়েছে:
- তৈরি করা হচ্ছে:
- একটি স্তূপে ননক্র্লাস্টার্ড সূচকগুলি
- একটি ক্লাস্টার্ড সূচক (কোনও নন-ক্লাস্টারড সূচক বিদ্যমান নেই)
- ক্লাস্টারড ইনডেক্স / সারণীতে নন-ক্লাস্টার্ড ইনডেক্সগুলি
- একটি ক্লাস্টার্ড সূচক যখন নন-ক্লাস্টার্ড সূচকগুলি ইতিমধ্যে বিদ্যমান থাকে
- ক্লাস্টারড ইনডেক্স / সারণীতে অনন্য অবিচ্ছিন্ন সূচক
- পুনর্নির্মাণ (ক্লাস্টার ইনডেক্স এবং একটি নন-ক্লাস্টারড ইনডেক্স সহ টেবিল; এসকিউএল সার্ভার 2014, 2016, 2017 এবং 2019 এ পরীক্ষিত) এর মাধ্যমে:
ALTER TABLE [schema_name].[table_name] REBUILD;
( এই পদ্ধতিটি ব্যবহার করার সময় কেবল ক্লাস্টারড ইনডেক্স প্রদর্শিত হবে )
ALTER INDEX ALL ON [schema_name].[table_name] REBUILD;
ALTER INDEX [index_name] ON [schema_name].[table_name] REBUILD;
DECLARE @SPID INT = 51;
;WITH agg AS
(
SELECT SUM(qp.[row_count]) AS [RowsProcessed],
SUM(qp.[estimate_row_count]) AS [TotalRows],
MAX(qp.last_active_time) - MIN(qp.first_active_time) AS [ElapsedMS],
MAX(IIF(qp.[close_time] = 0 AND qp.[first_row_time] > 0,
[physical_operator_name],
N'<Transition>')) AS [CurrentStep]
FROM sys.dm_exec_query_profiles qp
WHERE qp.[physical_operator_name] IN (N'Table Scan', N'Clustered Index Scan',
N'Index Scan', N'Sort')
AND qp.[session_id] = @SPID
), comp AS
(
SELECT *,
([TotalRows] - [RowsProcessed]) AS [RowsLeft],
([ElapsedMS] / 1000.0) AS [ElapsedSeconds]
FROM agg
)
SELECT [CurrentStep],
[TotalRows],
[RowsProcessed],
[RowsLeft],
CONVERT(DECIMAL(5, 2),
(([RowsProcessed] * 1.0) / [TotalRows]) * 100) AS [PercentComplete],
[ElapsedSeconds],
(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]) AS [EstimatedSecondsLeft],
DATEADD(SECOND,
(([ElapsedSeconds] / [RowsProcessed]) * [RowsLeft]),
GETDATE()) AS [EstimatedCompletionTime]
FROM comp;
নমুনা আউটপুট:
Rows Percent Elapsed Estimated Estimated
CurrentStep TotalRows Processed RowsLeft Complete Seconds SecondsLeft CompletionTime
----------- --------- --------- -------- -------- ------- ----------- --------------
Clustered 11248640 4786937 6461703 42.56 4.89400 6.606223 2016-05-23
Index Scan 14:32:40.547
physical_operator_name
সেটেN'Index Scan'
বদলেN'Table Scan'
বাN'Clustered Index Scan'
। এছাড়াও, এটি খুব ধীর হবে, যেহেতু এটি একটি গুচ্ছ আরআইডি লুকআপগুলি সম্পাদন করবে।