এসকিউএল সার্ভার: ক্রিয়েট ইনডেক্স কমান্ডের অগ্রগতি ট্র্যাক কিভাবে করবেন?


36

এসকিউএল সার্ভার 2014, স্ট্যান্ড এড

আমি পড়েছি যে dm_exec_requests মধ্যে শতাংশ_ অসম্পূর্ণতা ক্রেডিট ইন্ডেক্সের জন্য কাজ করে না, এবং অনুশীলনে, শতাংশ_ অসম্পূর্ণ লাঠি 0 এ থাকে So সুতরাং এটি কোনও সাহায্য করে না।

আমি বর্তমানে নীচের পদ্ধতিটি ব্যবহার করি, যা কমপক্ষে আমাকে চলাচল করে দেখায় (যে সূচকটি তৈরি করা অবরুদ্ধ নয়)। প্রক্রিয়াটির মাধ্যমে যদি আমি% 10 বা% 99 হয় তবে আমার শূন্য ধারণা আছে।

আমি এখানে বর্ণিত পদ্ধতিটি চেষ্টা করেছি: /dba//a/102545/6229 তবে এটি স্পষ্টভাবে ভুল এস্ট সমাপ্তির সময় দেখায় (এটি মূলত একটি 60+ মিনিটের প্রক্রিয়ার জন্য 'এখন' দেখায় যা আমি 10 মিনিটের মধ্যে আছি )

আমি কীভাবে একটি ক্লু পেতে পারি?

SELECT percent_complete, estimated_completion_time, reads, writes, logical_reads, text_size, *
FROM
sys.dm_exec_requests AS r
WHERE
r.session_id <> @@SPID
AND r.session_id = 58

উত্তর:


56

আমি মনে করি নীচের কোয়েরিটি আপনাকে অন্ততপক্ষে যথেষ্ট ঘনিষ্ঠ করবে। এটি একটি ডিএমভি ব্যবহার করে যা এসকিউএল সার্ভার ২০১৪ সালে চালু হয়েছিল: 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'। এছাড়াও, এটি খুব ধীর হবে, যেহেতু এটি একটি গুচ্ছ আরআইডি লুকআপগুলি সম্পাদন করবে।
ব্রায়ান

এখন যদি কেবল এটিই ALTER INDEX ALL on dbo.table REBUILD এ কাজ করবে ..... <g>
জোনসোম রিইনস্টেট মনিকা

1
বিটিডাব্লু, এটি পৃষ্ঠা সংক্ষেপণের বাস্তবায়নের অগ্রগতিও নিরীক্ষণ করতে ভাল কাজ করে। sys.dm_exec_query_ প্রোফাইলগুলি বেশ দুর্দান্ত।
টড ক্লেইনস

2
পুনঃটুইট করুনজোনরেইনস্টেটমোনিকা আমি সন্ধানটি কিছুটা আপডেট করেছি। দেখে মনে হচ্ছে এটি সত্যই পুনর্নির্মাণ অপারেশনগুলি উভয় মাধ্যমে ALTER INDEX ALLএবং এমনকি (আংশিকভাবে) ক্যাপচার করে ALTER TABLE .. REBUILD। অনুগ্রহ করে পর্যালোচনা করুণ :-).
সলোমন রুটজকি

1
হাই @ রনিওয়ার্ডে আমি উত্তরটিতে ক্যোয়ারিকে সামান্য আপডেট করেছি যাতে এটি ননক্র্লাস্টারড সূচক পুনর্নির্মাণগুলি ক্যাপচার করে। আমি কমান্ড উভয় প্রকারের (যদিও DBCC, আমি শুধু যে চিন্তা) পরীক্ষা এবং SQL সার্ভার 2019, 2017, 2016, এবং 2014. এটা তাদের সব জুড়ে :-) একই কাজ মনে হয়
সলোমন Rutzky
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.