আমি কীভাবে এসকিউএল সার্ভারে একটি ক্যুরিয় এক্সিকিউশন প্ল্যান পেতে পারি?


338

মাইক্রোসফ্ট এসকিউএল সার্ভারে আমি কীভাবে কোনও জিজ্ঞাসা / সঞ্চিত পদ্ধতির জন্য কোয়েরি এক্সিকিউশন প্ল্যান পেতে পারি?


2
আমি কীভাবে এসকিউএল সার্ভার পরিচালনা স্টুডিওতে এক্সিকিউশন প্ল্যান ট্যাবটি বন্ধ করব?
পল ম্যাকার্থি 13

2
@ পল আপনি তার জন্য Ctrl + R এ আঘাত করতে পারেন। এটি পুরো ফলাফল বিভাগটি বন্ধ করে - বার্তাগুলি এবং সম্পাদন পরিকল্পনা সহ।
নিসর্গ

উত্তর:


500

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

পদ্ধতি 1 - এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে

এসকিউএল সার্ভারটি বেশ কয়েকটি ঝরঝরে বৈশিষ্ট্য নিয়ে আসে যা কার্যকরভাবে পরিকল্পনা ক্যাপচার করা খুব সহজ করে তোলে, কেবল "নিশ্চিত করুন" অন্তর্ভুক্ত প্রকৃত এক্সিকিউশন প্ল্যান "মেনু আইটেমটি (" কোয়েরি "মেনুতে পাওয়া যায়) টিক দেওয়া আছে এবং আপনার ক্যোয়ারিকে স্বাভাবিক হিসাবে চালাচ্ছে তা নিশ্চিত করুন ।

অ্যাকশন এক্সিকিউশন প্ল্যান মেনু আইটেম অন্তর্ভুক্ত করুন

আপনি যদি কোনও সঞ্চিত পদ্ধতিতে বিবৃতি দেওয়ার জন্য এক্সিকিউশন প্ল্যানটি পেতে চাইছেন তবে আপনার সঞ্চিত প্রক্রিয়াটি কার্যকর করা উচিত:

exec p_Example 42

যখন আপনার ক্যোয়ারীটি সম্পূর্ণ হয় আপনি ফলাফলের ফলকে "এক্সিকিউশন প্ল্যান" শিরোনামযুক্ত একটি অতিরিক্ত ট্যাব দেখতে পাবেন। আপনি যদি অনেক বিবৃতি চালিয়ে যান তবে আপনি এই ট্যাবে প্রদর্শিত অনেকগুলি পরিকল্পনা দেখতে পাবেন।

একটি এক্সিকিউশন প্ল্যানের স্ক্রিনশট

এখান থেকে আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে এক্সিকিউশন প্ল্যানটি পরিদর্শন করতে পারেন, বা পরিকল্পনার ডান ক্লিক করুন এবং এক্সএমএল ফর্ম্যাটে কোনও ফাইলে প্ল্যানটি সংরক্ষণ করতে "এক্সিকিউশন প্লান হিসাবে সেভ করুন ..." নির্বাচন করুন।

পদ্ধতি 2 - শোপলান বিকল্পগুলি ব্যবহার করে

এই পদ্ধতিটি পদ্ধতি 1 এর সাথে খুব মিল (আসলে এটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও অভ্যন্তরীণভাবে করে) তবে আমি এটিকে সম্পূর্ণতার জন্য অন্তর্ভুক্ত করেছি বা যদি আপনার এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও উপলব্ধ না থাকে।

আপনি আপনার ক্যোয়ারী চালানোর আগে, নিম্নলিখিত বিবৃতিগুলির মধ্যে একটি চালান । বিবৃতি অবশ্যই ব্যাচের একমাত্র বিবৃতি হতে হবে, আপনি একই সময়ে অন্য বিবৃতি কার্যকর করতে পারবেন না:

SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

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

আপনার কাজ শেষ হয়ে গেলে আপনি নীচের বিবৃতি দিয়ে এই বিকল্পটি বন্ধ করতে পারেন:

SET <<option>> OFF

এক্সিকিউশন প্ল্যান ফর্ম্যাটগুলির তুলনা

আপনার দৃ strong় পছন্দ না হলে আমার প্রস্তাবটি STATISTICS XMLবিকল্পটি ব্যবহার করা । এই বিকল্পটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে "প্রকৃত বাস্তবায়ন পরিকল্পনা অন্তর্ভুক্ত করুন" বিকল্পের সমতুল্য এবং সবচেয়ে সুবিধাজনক বিন্যাসে সর্বাধিক তথ্য সরবরাহ করে।

  • SHOWPLAN_TEXT - কোয়েরি কার্যকর না করে একটি প্রাথমিক পাঠ্য ভিত্তিক আনুমানিক বাস্তবায়ন পরিকল্পনা প্রদর্শন করে
  • SHOWPLAN_ALL - কোয়েরি কার্যকর না করে ব্যয় নির্ধারণের সাথে পাঠ্য ভিত্তিক আনুমানিক বাস্তবায়ন পরিকল্পনা প্রদর্শন করে
  • SHOWPLAN_XML- কোয়েরি কার্যকর না করে ব্যয় অনুমানের সাথে একটি এক্সএমএল ভিত্তিক আনুমানিক বাস্তবায়ন পরিকল্পনা প্রদর্শন করে। এটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে "ডিসপ্লে আনুমানিক বাস্তবায়ন পরিকল্পনা ..." বিকল্পের সমান।
  • STATISTICS PROFILE - ক্যোয়ারি কার্যকর করে এবং একটি পাঠ্য ভিত্তিক প্রকৃত বাস্তবায়ন পরিকল্পনা প্রদর্শন করে।
  • STATISTICS XML- ক্যোয়ারি কার্যকর করে এবং একটি এক্সএমএল ভিত্তিক প্রকৃত বাস্তবায়ন পরিকল্পনা প্রদর্শন করে। এটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে "প্রকৃত বাস্তবায়ন পরিকল্পনা অন্তর্ভুক্ত করুন" বিকল্পের সমতুল্য।

পদ্ধতি 3 - এসকিউএল সার্ভার প্রোফাইলার ব্যবহার করে

আপনি যদি নিজের কোয়েরিটি সরাসরি চালাতে না পারেন (বা আপনার ক্যোয়ারীটি আপনি সরাসরি সম্পাদন করার সময় ধীরে ধীরে চলবে না - মনে রাখবেন আমরা কোয়েরিটি খারাপভাবে সম্পাদন করার পরিকল্পনা চাই) তবে আপনি একটি এসকিউএল সার্ভার প্রোফাইলার ট্রেস ব্যবহার করে একটি পরিকল্পনা ক্যাপচার করতে পারেন। "শোপ্লান" ইভেন্টের একটি ক্যাপচার করছে এমন কোনও ট্রেস চলাকালীন আপনার কোয়েরিটি চালানোর ধারণা The

নোট করুন যে লোডের উপর নির্ভর করে আপনি উত্পাদন পদ্ধতিতে এই পদ্ধতিটি ব্যবহার করতে পারেন তবে অবশ্যই আপনার সাবধানতা অবলম্বন করা উচিত। এসকিউএল সার্ভার প্রোফাইলিং প্রক্রিয়াগুলি ডাটাবেসের উপর প্রভাব হ্রাস করার জন্য ডিজাইন করা হয়েছে তবে এর অর্থ এই নয় যে কোনও কার্যকারিতা প্রভাব থাকবে না । আপনার ডাটাবেস অতিরিক্ত ব্যবহারের মধ্যে থাকলে আপনার ট্রেসগুলিতে সঠিক পরিকল্পনাটি ফিল্টারিং এবং সনাক্ত করতেও সমস্যা হতে পারে। আপনার ডিবিএর সাথে অবশ্যই তাদের চেক করা উচিত যে তারা তাদের মূল্যবান ডাটাবেসে আপনার সাথে এটি করতে খুশি কিনা!

  1. এসকিউএল সার্ভার প্রোফাইলার খুলুন এবং আপনি যে ট্রেসটি রেকর্ড করতে চান তার পছন্দসই ডাটাবেসের সাথে সংযুক্ত একটি নতুন ট্রেস তৈরি করুন।
  2. "ইভেন্টস নির্বাচন" ট্যাবটির নীচে "সমস্ত ইভেন্টগুলি দেখান" চেক করুন, "পারফরম্যান্স" -> "শোপ্লান এক্সএমএল" সারিটি পরীক্ষা করুন এবং ট্রেসটি চালান run
  3. ট্রেস চলমান অবস্থায়, ধীরে চলমান কোয়েরিটি চালানোর জন্য আপনার যা যা করা দরকার তা করুন।
  4. কোয়েরিটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন এবং ট্রেসটি বন্ধ করুন।
  5. ট্রেস সংরক্ষণ করতে এসকিউএল সার্ভার প্রোফাইলারের প্ল্যান এক্সএমএল-তে ডান ক্লিক করুন এবং এক্সএমএল ফর্ম্যাটে প্ল্যান ফাইল করার জন্য "ইভেন্টের ডেটা এক্সট্র্যাক্ট করুন ..." নির্বাচন করুন।

আপনি যে পরিকল্পনাটি পান সেটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে "প্রকৃত বাস্তবায়ন পরিকল্পনা অন্তর্ভুক্ত করুন" বিকল্পের সমতুল্য।

পদ্ধতি 4 - ক্যোয়ারী ক্যাশে পরিদর্শন করা হচ্ছে

আপনি যদি নিজের অনুসন্ধানটি সরাসরি চালাতে না পারেন এবং আপনি কোনও প্রোফাইলার ট্রেসও ক্যাপচার করতে না পারেন তবে আপনি এসকিউএল ক্যোয়ারী প্ল্যান ক্যাশে পরিদর্শন করে একটি আনুমানিক পরিকল্পনা পেতে পারেন।

আমরা এসকিউএল সার্ভার ডিএমভিগুলি জিজ্ঞাসা করে পরিকল্পনা ক্যাশেটি পরিদর্শন করি । নিম্নলিখিতটি একটি বেসিক ক্যোয়ারী যা তাদের এসকিউএল পাঠ্য সহ সমস্ত ক্যাশেড ক্যোয়ারী প্ল্যানগুলি (এক্সএমএল হিসাবে) তালিকাভুক্ত করবে। বেশিরভাগ ডাটাবেসে আপনার আগ্রহী পরিকল্পনাগুলিতে ফলাফলগুলি ফিল্টার করার জন্য আপনাকে অতিরিক্ত ফিল্টারিং ক্লজগুলি যুক্ত করতে হবে।

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

এই কোয়েরিটি সম্পাদন করুন এবং নতুন উইন্ডোতে প্ল্যানটি খোলার জন্য এক্সএমএল পরিকল্পনাটি ক্লিক করুন - ডান ক্লিক করুন এবং এক্সএমএল ফর্ম্যাটে প্ল্যানটি ফাইল করার জন্য সংরক্ষণ হিসাবে "এক্সিকিউশন প্ল্যানটি সেভ করুন ..." নির্বাচন করুন।

মন্তব্য:

কারণ এতে অনেকগুলি উপাদান জড়িত রয়েছে (টেবিল এবং সূচি স্কিম থেকে শুরু করে সঞ্চিত ডেটা এবং টেবিলের পরিসংখ্যান পর্যন্ত) আপনার আগ্রহী ডাটাবেস থেকে সর্বদা কার্যকর করার পরিকল্পনা গ্রহণের চেষ্টা করা উচিত (সাধারণত যেটি কোনও কার্য সম্পাদন করছে তা হ'ল) সমস্যা)।

এনক্রিপ্ট হওয়া সঞ্চিত প্রক্রিয়াগুলির জন্য আপনি কার্যকর করার পরিকল্পনা ক্যাপচার করতে পারবেন না।

"প্রকৃত" বনাম "আনুমানিক" কার্যকরকরণ পরিকল্পনা

একটি আসল এক্সিকিউশন প্ল্যান হ'ল এসকিউএল সার্ভার আসলে ক্যোয়ারি চালায়, অন্যদিকে আনুমানিক এক্সিকিউশন প্ল্যান এসকিউএল সার্ভার কাজটি কার্য সম্পাদন না করে কী করবে তা কার্যকর করে। যৌক্তিকভাবে সমতুল্য হলেও, বাস্তবিক বাস্তবায়ন পরিকল্পনাটি অনেক বেশি কার্যকর কারণ এতে কোয়েরি কার্যকর করার সময় আসলে কী ঘটেছিল সে সম্পর্কে অতিরিক্ত বিশদ এবং পরিসংখ্যান রয়েছে। যেখানে এসকিউএল সার্ভারের অনুমানগুলি বন্ধ রয়েছে (যেমন পরিসংখ্যানের মেয়াদ শেষ হয়ে যায়) এমন সমস্যাগুলি সনাক্ত করার সময় এটি প্রয়োজনীয়।

আমি কীভাবে কোনও ক্যোয়ারী এক্সিকিউশন প্ল্যানকে ব্যাখ্যা করব?

এটি একটি নিজস্ব (মুক্ত) বইয়ের পক্ষে যথেষ্ট উপযুক্ত বিষয় ।

আরো দেখুন:


8
ভবিষ্যতের পাঠকদের জন্য একটি নোট: SET STATISTICS XML ONক্যোয়ারির শুরুতে পিঁপড়া এবং SET STATISTICS XML OFF|ONআশেপাশের অঞ্চলগুলি আপনি পরিকল্পনার আউটপুটে প্রদর্শিত হতে চান না : ক্যোয়ারিতে একটি পুনরাবৃত্তি রয়েছে (যখন আপনি চাইবেন না) যখন আমি চাই না তখন আমি এই দরকারী হয়েছি এক্সিকিউশন প্ল্যানে দেখতে (অন্যথায় এটি এসকিউএল সার্ভার প্রদর্শন করার জন্য খুব ভারী এবং দীর্ঘ হবে)।
রোমেমার

2
@ মনস্টার এমএমওরপিজি আপনি পদ্ধতি 4 ব্যবহার করতে পারেন এবং তারপরে এটি নির্বাচন করুন। উদাহরণস্বরূপ, <a href=" github.com/StackExchange/dapper-dot-net"> Dapper.net </… > সংযোগ.কিউরি <স্ট্রিং> ("নির্বাচন করুন কোয়ালিটি_প্ল্যান থেকে ক্রম অ্যাপ্লিকেশন sys.dm_exec_sql_text (পরিকল্পনা__ ) ক্রস অ্যাপ্লিকেশন sys.dm_exec_query_plan (পরিকল্পনা_ হ্যান্ডল) যেখানে পাঠ্য পছন্দ N '% আপনার মূল প্রশ্ন এখানে যায়%' ")); % হ'ল যদি আপনি কেবল আপনার ক্যোয়ারির একটি উপসেট ব্যবহার করেন।
3

2
@ জাস্টিন আপনি যে বইটির সাথে লিঙ্ক করেছেন তার দ্বিতীয় সংস্করণে ক্যোয়ারি এক্সিকিউশন পরিকল্পনার ব্যাখ্যার জন্য ২০০৯ সালের তারিখ থেকে শুরু করা হয়েছে you আপনি কি এখনও বলতে পারবেন যে এটি ২০১ purpose সালে সেই উদ্দেশ্যে একটি সত্যিকারের উত্স?
আব্দুল

3
@ আবদুল একই লেখক, গ্রান্ট ফ্রেঞ্চে এর এসকিউএল সার্ভার কোয়েরি পারফরম্যান্স টিউনিং নামে একটি নতুন বই রয়েছে যা এসকিউএল সার্ভারের নতুন সংস্করণগুলিকে অন্তর্ভুক্ত করে।
থেলেম

42

ইতিমধ্যে পোস্ট করা বিস্তৃত উত্তর ছাড়াও কখনও কখনও তথ্য আহরণের জন্য কার্যকরভাবে পরিকল্পনার মাধ্যমে অ্যাক্সেস করতে সক্ষম হওয়া কার্যকর। এর জন্য উদাহরণ কোডটি নীচে।

DECLARE @TraceID INT
EXEC StartCapture @@SPID, @TraceID OUTPUT
EXEC sp_help 'sys.objects' /*<-- Call your stored proc of interest here.*/
EXEC StopCapture @TraceID

উদাহরণ StartCaptureসংজ্ঞা

CREATE PROCEDURE StartCapture
@Spid INT,
@TraceID INT OUTPUT
AS
DECLARE @maxfilesize BIGINT = 5
DECLARE @filepath NVARCHAR(200) = N'C:\trace_' + LEFT(NEWID(),36)

EXEC sp_trace_create @TraceID OUTPUT, 0, @filepath, @maxfilesize, NULL 

exec sp_trace_setevent @TraceID, 122, 1, 1
exec sp_trace_setevent @TraceID, 122, 22, 1
exec sp_trace_setevent @TraceID, 122, 34, 1
exec sp_trace_setevent @TraceID, 122, 51, 1
exec sp_trace_setevent @TraceID, 122, 12, 1
-- filter for spid
EXEC sp_trace_setfilter @TraceID, 12, 0, 0, @Spid
-- start the trace
EXEC sp_trace_setstatus @TraceID, 1

উদাহরণ StopCaptureসংজ্ঞা

CREATE  PROCEDURE StopCapture
@TraceID INT
AS
WITH  XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql), 
      CTE
     as (SELECT CAST(TextData AS VARCHAR(MAX)) AS TextData,
                ObjectID,
                ObjectName,
                EventSequence,
                /*costs accumulate up the tree so the MAX should be the root*/
                MAX(EstimatedTotalSubtreeCost) AS EstimatedTotalSubtreeCost
         FROM   fn_trace_getinfo(@TraceID) fn
                CROSS APPLY fn_trace_gettable(CAST(value AS NVARCHAR(200)), 1)
                CROSS APPLY (SELECT CAST(TextData AS XML) AS xPlan) x
                CROSS APPLY (SELECT T.relop.value('@EstimatedTotalSubtreeCost',
                                            'float') AS EstimatedTotalSubtreeCost
                             FROM   xPlan.nodes('//sql:RelOp') T(relop)) ca
         WHERE  property = 2
                AND TextData IS NOT NULL
                AND ObjectName not in ( 'StopCapture', 'fn_trace_getinfo' )
         GROUP  BY CAST(TextData AS VARCHAR(MAX)),
                   ObjectID,
                   ObjectName,
                   EventSequence)
SELECT ObjectName,
       SUM(EstimatedTotalSubtreeCost) AS EstimatedTotalSubtreeCost
FROM   CTE
GROUP  BY ObjectID,
          ObjectName  

-- Stop the trace
EXEC sp_trace_setstatus @TraceID, 0
-- Close and delete the trace
EXEC sp_trace_setstatus @TraceID, 2
GO

18

ধরে নিচ্ছি আপনি মাইক্রোসফ্ট এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করছেন

  • জন্য আনুমানিক ক্যোয়ারী পরিকল্পনা আপনি টিপতে পারেন জন্য Ctrl + এল বা নিম্নলিখিত বোতাম।

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

  • জন্য প্রকৃত ক্যোয়ারী পরিকল্পনা , আপনি টিপতে পারেন জন্য Ctrl + এম বা কোয়েরি নির্বাহ আগে নিম্নলিখিত বোতাম।

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

  • জন্য লাইভ ক্যোয়ারী পরিকল্পনা , (শুধুমাত্র SSMS 2016 সালে) ক্যোয়ারী নির্বাহ আগে নিম্নলিখিত বোতামটি ব্যবহার করুন।

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


15

পূর্ববর্তী উত্তরে বর্ণিত পদ্ধতিগুলির পাশাপাশি আপনি একটি নিখরচায় বাস্তবায়ন পরিকল্পনা দর্শক এবং ক্যোয়ারী অপ্টিমাইজেশন সরঞ্জাম অ্যাপেক্সএসকিউএল প্ল্যান (যা আমি সম্প্রতি ঝাঁপিয়ে পড়েছি ) ব্যবহার করতে পারি।

আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে অ্যাপেক্সএসকিউএল প্ল্যান ইনস্টল ও সংহত করতে পারেন, তাই এক্সিকিউশন পরিকল্পনাটি সরাসরি এসএসএমএস থেকে দেখা যায়।

অ্যাপেক্সএসকিউএল পরিকল্পনায় আনুমানিক বাস্তবায়ন পরিকল্পনাগুলি দেখা হচ্ছে

  1. এসএসএমএসে নতুন ক্যোয়ারী বোতামটি ক্লিক করুন এবং ক্যোয়ারী পাঠ্য উইন্ডোটিতে কোয়েরি পাঠ্যটি পেস্ট করুন। ডান ক্লিক করুন এবং প্রসঙ্গ মেনু থেকে "প্রদর্শন আনুমানিক কার্যকর পরিকল্পনা" বিকল্পটি নির্বাচন করুন।

এসএসএমএসে নতুন ক্যোয়ারী বোতাম

  1. এক্সিকিউশন প্ল্যান ডায়াগ্রামগুলি ফলাফল বিভাগে এক্সিকিউশন প্ল্যান ট্যাব প্রদর্শিত হবে। এরপরে এক্সিকিউশন পরিকল্পনার ডান ক্লিক করুন এবং প্রসঙ্গ মেনুতে "অ্যাপেক্সএসকিউএল প্ল্যানে ওপেন" বিকল্পটি নির্বাচন করুন।

হত্যা পরিকল্পনা

  1. আনুমানিক বাস্তবায়ন পরিকল্পনাটি অ্যাপেক্সএসকিউএল পরিকল্পনায় খোলা হবে এবং এটি ক্যোয়ারী অপ্টিমাইজেশনের জন্য বিশ্লেষণ করা যেতে পারে।

আনুমানিক বাস্তবায়ন পরিকল্পনা

অ্যাপেক্সএসকিউএল পরিকল্পনায় প্রকৃত বাস্তবায়ন পরিকল্পনাগুলি দেখুন

একটি ক্যোয়ারির প্রকৃত বাস্তবায়ন পরিকল্পনাটি দেখতে, পূর্বে উল্লিখিত ২ য় পদক্ষেপ থেকে চালিয়ে যান, তবে এখন, একবার অনুমানিত পরিকল্পনাটি প্রদর্শিত হয়ে গেলে অ্যাপেক্সএসকিউএল পরিকল্পনার মূল ফিতা বার থেকে "প্রকৃত" বোতামটি ক্লিক করুন।

প্রধান ফিতা বার থেকে "প্রকৃত" বোতামটি ক্লিক করুন

একবার "আসল" বোতামটি ক্লিক করা হলে, বাস্তব সম্পাদন পরিকল্পনাটি অন্যান্য সম্পাদন পরিকল্পনার ডেটা সহ ব্যয়ের পরামিতিগুলির বিশদ পূর্বরূপ সহ প্রদর্শিত হবে।

প্রকৃত বাস্তবায়ন পরিকল্পনা

সম্পাদন পরিকল্পনা দেখার বিষয়ে আরও তথ্য এই লিঙ্কটি অনুসরণ করে পাওয়া যাবে ।


14

ক্যোয়ারি এক্সিকিউশন প্ল্যানগুলি অর্জন এবং গভীরভাবে বিশ্লেষণ করার জন্য আমার প্রিয় সরঞ্জামটি এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার । এটি এসএসএমএসের চেয়ে কার্যকর বিশ্লেষণ এবং বাস্তবায়নের পরিকল্পনার দৃশ্যধারণের জন্য আরও বেশি ব্যবহারকারী-বান্ধব, সুবিধাজনক এবং ব্যাপক and

সরঞ্জামটির মাধ্যমে কী কার্যকারিতাটি দেওয়া হচ্ছে সে সম্পর্কে আপনার ধারণা পেতে এখানে একটি নমুনা স্ক্রিন শট দেওয়া হয়েছে:

এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার উইন্ডো স্ক্রিন শট

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

তদতিরিক্ত, আমি এর নিখরচায় সংস্করণের কোনও সীমাবদ্ধতা লক্ষ্য করিনি যা এটি দৈনিক ভিত্তিতে এটি ব্যবহার করা বাধা দেয় বা আপনাকে শেষ পর্যন্ত প্রো সংস্করণ কিনতে বাধ্য করে। সুতরাং, আপনি যদি ফ্রি সংস্করণটি বজায় রাখতে পছন্দ করেন তবে কোনও কিছুই আপনাকে এটি করতে বাধা দেয় না।

আপডেট: ( মার্টিন স্মিথকে ধন্যবাদ ) প্ল্যান এক্সপ্লোরার এখন বিনামূল্যে! বিস্তারিত জানার জন্য http://www.sqlsentry.com/products/plan-explorer/sql-server-query-view দেখুন ।


1
তৃতীয় পক্ষের সরঞ্জামগুলির কথা কে বলছিলেন?
বাশার

12
@ বাশার: ওএস এমএস সরঞ্জামগুলি বা অন্য কোনওভাবে মাধ্যমগুলিকে সীমাবদ্ধ করেনি। তাহলে আপনি কী ভাবেন যে কোনও তৃতীয় পক্ষের সরঞ্জামের সাথে জড়িত একটি উত্তর অনুচিত?
আলেকজান্ডার আবাকুমভ

3
Speaking of third-party toolsযখন কেউ তৃতীয় পক্ষের সরঞ্জামগুলির উল্লেখ না করল তখন আপনি কীভাবে আপনার উত্তরটির শুরুতে কথিত তা নিয়ে মজা করছিলেন।
বেসের

4
@ বাশার: ওহ, দুর্দান্ত ক্যাচ! ধন্যবাদ! আমি আমার উত্তর নতুন করে লিখেছি আপনার মতামত জানাতে বিনা দ্বিধায় মতামত দিন এবং / অথবা এটি আপডেট করুন।
আলেকজান্ডার আবাকুমভ

3
BTW শুধুমাত্র একটি সংস্করণ এখন sqlsentry.com/products/plan-explorer/sql-server-query-view
মার্টিন স্মিথ

7

query_post_execution_showplanইভেন্টের মাধ্যমে বর্ধিত ইভেন্টস সেশন থেকে ক্যোয়ারী প্ল্যানগুলি পাওয়া যাবে । এখানে একটি নমুনা এক্সএভেন্ট সেশন:

/*
    Generated via "Query Detail Tracking" template.
*/
CREATE EVENT SESSION [GetExecutionPlan] ON SERVER 
ADD EVENT sqlserver.query_post_execution_showplan(
    ACTION(package0.event_sequence,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)),

/* Remove any of the following events (or include additional events) as desired. */
ADD EVENT sqlserver.error_reported(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.module_end(SET collect_statement=(1)
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.rpc_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sp_statement_completed(SET collect_object_name=(1)
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_batch_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))),
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.tsql_stack)
    WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4)) AND [package0].[equal_boolean]([sqlserver].[is_system],(0)))) 
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
GO

আপনি সেশনটি তৈরি করার পরে (এসএসএমএসে) অবজেক্ট এক্সপ্লোরারে যান এবং ম্যানেজমেন্ট | বর্ধিত ইভেন্ট | দায়রা। "GetExecutionPlan" সেশনটি ডান ক্লিক করুন এবং এটি শুরু করুন। এটিকে আবার ডান-ক্লিক করুন এবং "লাইভ ডেটা দেখুন" নির্বাচন করুন।

এরপরে একটি নতুন ক্যোয়ারী উইন্ডোটি খুলুন এবং এক বা একাধিক কোয়েরি চালান। অ্যাডভেঞ্চার ওয়ার্কসের জন্য এখানে একটি:

USE AdventureWorks;
GO

SELECT p.Name AS ProductName, 
    NonDiscountSales = (OrderQty * UnitPrice),
    Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p 
INNER JOIN Sales.SalesOrderDetail AS sod
    ON p.ProductID = sod.ProductID 
ORDER BY ProductName DESC;
GO

দু'এক মুহুর্তের পরে, আপনার "গেটএ্যাক্সেকিউশন প্ল্যান: লাইভ ডেটা" ট্যাবে কিছু ফলাফল দেখতে হবে। গ্রিডের ক্যোয়ারী_পোস্ট_এক্সেকিউশন_শোপ্লান ইভেন্টগুলির একটিতে ক্লিক করুন এবং তারপরে গ্রিডের নীচে "ক্যোয়ারী প্ল্যান" ট্যাবটি ক্লিক করুন। এটি দেখতে এটির মতো দেখতে পাওয়া উচিত:

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

সম্পাদনা : এক্সইভেন্ট কোড এবং স্ক্রিন শট এসকিউএল / এসএসএমএস 2012 ডাব্লু / এসপি 2 থেকে উত্পন্ন হয়েছিল। আপনি যদি এসকিউএল 2008 / আর 2 ব্যবহার করেন তবে স্ক্রিপ্টটি চালানোর জন্য আপনি এটি টুইট করতে সক্ষম হতে পারেন। তবে সেই সংস্করণটির একটি জিইউআই নেই, সুতরাং আপনাকে শোপ্ল্যান এক্সএমএলটি বের করতে হবে, এটি একটি * .এসকিপ্ল্যান ফাইল হিসাবে সংরক্ষণ করতে হবে এবং এটি এসএসএমএসে খুলতে হবে। এটাই বোঝা। এক্সএভেন্টস এসকিউএল 2005 বা তার আগেরটিতে উপস্থিত ছিল না। সুতরাং, আপনি যদি এসকিউএল 2012 বা তার পরে না থাকেন তবে আমি এখানে পোস্ট করা অন্য উত্তরগুলির মধ্যে একটির দৃ strongly়তার সাথে পরামর্শ দেব।


5

এসকিউএল সার্ভার 2016+ থেকে শুরু করে, ক্যোয়ারী স্টোর বৈশিষ্ট্যটি কার্যকারিতা নিরীক্ষণের জন্য চালু করা হয়েছিল। এটি ক্যোয়ারী পরিকল্পনার পছন্দ এবং কার্যকারিতা সম্পর্কে অন্তর্দৃষ্টি সরবরাহ করে। এটি ট্রেস বা বর্ধিত ইভেন্টগুলির সম্পূর্ণ প্রতিস্থাপন নয়, তবে এটি সংস্করণ থেকে সংস্করণে বিকশিত হওয়ায় আমরা এসকিউএল সার্ভার থেকে ভবিষ্যতে প্রকাশে একটি সম্পূর্ণ কার্যকরী ক্যোয়ারী স্টোর পেতে পারি। ক্যোয়ারী স্টোরের প্রাথমিক প্রবাহ

  1. এসকিউএল সার্ভার বিদ্যমান উপাদানগুলি ক্যোয়ারী স্টোর ম্যানেজারটি ব্যবহার করে ক্যোয়ারী স্টোরের সাথে যোগাযোগ করে।
  2. কোয়েরি স্টোর ম্যানেজার কোন স্টোরটি ব্যবহার করা উচিত তা নির্ধারণ করে এবং তারপরে সেই স্টোরটিতে এক্সিকিউশন পাস করে (প্ল্যান বা রানটাইম স্ট্যাটাস বা কোয়েরি ওয়েট স্ট্যাটাস)
    • প্ল্যান স্টোর - কার্যকর করার পরিকল্পনার তথ্য রাখে
    • রানটাইম পরিসংখ্যানের স্টোর execution
    • ক্যারিয়ার অপেক্ষার পরিসংখ্যানের স্টোর statistics
  3. পরিকল্পনা, রানটাইম পরিসংখ্যান এবং অপেক্ষা স্টোর এসকিউএল সার্ভারের এক্সটেনশন হিসাবে ক্যোয়ারী স্টোর ব্যবহার করে।

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

  1. ক্যোয়ারী স্টোর সক্ষম করে : ক্যোয়ারী স্টোর সার্ভারে ডাটাবেস স্তরে কাজ করে।

    • ডিফল্টরূপে নতুন ডাটাবেসের জন্য ক্যোয়ারী স্টোর সক্রিয় নয়।
    • আপনি মাস্টার বা tempdbডাটাবেসের জন্য ক্যোয়ারী স্টোর সক্ষম করতে পারবেন না ।
    • উপলব্ধ ডিএমভি

      sys.database_query_store_options (লেনদেন এসকিউএল)

  2. ক্যোয়ারী স্টোরের তথ্য সংগ্রহ করুন : আমরা কোয়েরি স্টোর ডিএমভি (ডেটা ম্যানেজমেন্ট ভিউ) ব্যবহার করে তিনটি স্টোর থেকে সমস্ত উপলভ্য তথ্য সংগ্রহ করি।

    • ক্যোয়ারী প্ল্যান স্টোর: এক্সিকিউশন প্ল্যানের তথ্য রাখে এবং ক্যোয়ারী সংকলনের সাথে সম্পর্কিত সমস্ত তথ্য ক্যাপচারের জন্য এটি দায়বদ্ধ।

      sys.query_store_query(লেনদেন-এসকিউএল) sys.query_store_plan(লেনদেন-এসকিউএল) sys.query_store_query_text(লেনদেন-এসকিউএল)

    • রানটাইম পরিসংখ্যানের স্টোর: সম্পাদন সম্পর্কিত পরিসংখ্যান সম্পর্কিত তথ্য রয়েছে এবং এটি সম্ভবত সবচেয়ে ঘন ঘন আপডেট হওয়া স্টোর। এই পরিসংখ্যান ক্যোয়ারি এক্সিকিউশন ডেটা উপস্থাপন করে।

      sys.query_store_runtime_stats (লেনদেন এসকিউএল)

    • ক্যারিয়ার অপেক্ষার পরিসংখ্যান স্টোর: অপেক্ষার পরিসংখ্যান সম্পর্কিত তথ্য থাকা এবং ক্যাপচার করা।

      sys.query_store_wait_stats (লেনদেন এসকিউএল)

দ্রষ্টব্য: ক্যোয়ারি ওয়েট স্ট্যাটাস স্টোরটি কেবলমাত্র এসকিউএল সার্ভার 2017+ এ উপলব্ধ


4

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর মতো (ইতিমধ্যে ব্যাখ্যা করা হয়েছে), এখানে বর্ণিত হিসাবে ডেটাগ্রিপ দিয়ে এটিও সম্ভব ।

  1. একটি এসকিউএল বিবৃতিতে রাইট ক্লিক করুন এবং পরিকল্পনাটি ব্যাখ্যা করুন নির্বাচন করুন।
  2. আউটপুট ফলকে প্ল্যান ক্লিক করুন।
  3. ডিফল্টরূপে, আপনি ক্যোয়ারির গাছের উপস্থাপনা দেখতে পাচ্ছেন। ক্যোয়ারী প্ল্যানটি দেখতে, ভিজ্যুয়ালাইজেশন দেখান আইকনটি ক্লিক করুন বা Ctrl + Shift + Alt + U টিপুন

3

এখানে আগে বলা সমস্ত কিছু ছাড়াও একটি গুরুত্বপূর্ণ বিষয় এখানে জানানো উচিত।

ক্যোয়ারী প্ল্যানগুলি প্রায়শই অন্তর্নির্মিত এক্সএমএল কলাম প্রকারের দ্বারা প্রতিনিধিত্ব করতে জটিল হয় যার মধ্যে নেস্টেড উপাদানগুলির 127 স্তরের সীমাবদ্ধতা রয়েছে। Sys.dm_exec_query_planNULL এর পূর্বের এমএস এসকিউএল সংস্করণগুলিতে ত্রুটি ফিরে আসতে বা এমনকি ফেলে দিতে পারে এমন একটি কারণ , তাই সাধারণত sys.dm_exec_text_query_plan ব্যবহার করা নিরাপদ । পরবর্তীকালে পুরো ব্যাচের চেয়ে নির্দিষ্ট বিবৃতি দেওয়ার জন্য পরিকল্পনা নির্বাচন করার জন্য একটি দরকারী বোনাস বৈশিষ্ট্যও রয়েছে । আপনি বর্তমানে চলমান বিবৃতিগুলির পরিকল্পনা দেখতে এটি কীভাবে ব্যবহার করেন:

SELECT p.query_plan
FROM sys.dm_exec_requests AS r
OUTER APPLY sys.dm_exec_text_query_plan(
                r.plan_handle,
                r.statement_start_offset,
                r.statement_end_offset) AS p

ফলস্বরূপ সারণীতে পাঠ্য কলামটি কোনও এক্সএমএল কলামের তুলনায় খুব সহজ নয়। কোনও ফাইলের বিষয়বস্তুগুলি কোনও সংরক্ষণ না করে ডায়াগ্রাম হিসাবে আলাদা ট্যাবে খোলার জন্য ফলাফলটি ক্লিক করতে সক্ষম হতে আপনি একটি সামান্য কৌশল ব্যবহার করতে পারেন (মনে রাখবেন আপনি কেবল ব্যবহার করতে পারবেন না CAST(... AS XML)), যদিও এটি কেবল একটির জন্য কাজ করবে একক সারি:

SELECT Tag = 1, Parent = NULL, [ShowPlanXML!1!!XMLTEXT] = query_plan
FROM sys.dm_exec_text_query_plan(
                -- set these variables or copy values
                -- from the results of the above query
                @plan_handle,
                @statement_start_offset,
                @statement_end_offset)
FOR XML EXPLICIT

2

আমি যেমন এই নিবন্ধে ব্যাখ্যা করেছি , এসকিউএল সার্ভার ব্যবহার করার সময় আপনি দুটি কার্যনির্বাহী পরিকল্পনার পরিকল্পনা পেতে পারেন।

আনুমানিক বাস্তবায়ন পরিকল্পনা

আনুমানিক বাস্তবায়ন পরিকল্পনাটি এসকিউএল কোয়েরি না চালিয়ে অপ্টিমাইজার দ্বারা উত্পাদিত হয়।

আনুমানিক বাস্তবায়ন পরিকল্পনাটি পেতে, ক্যোরি কার্যকর SHOWPLAN_ALLকরার আগে আপনাকে সেটিংস সক্ষম করতে হবে ।

SHPLPL_ALL সেট করুন

এখন, নিম্নলিখিত এসকিউএল কোয়েরি সম্পাদন করার সময়:

SELECT p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

এসকিউএল সার্ভার নিম্নলিখিত আনুমানিক বাস্তবায়ন পরিকল্পনা উত্পন্ন করবে:

| NodeId | Parent | LogicalOp            | EstimateRows | EstimateIO  | EstimateCPU | AvgRowSize | TotalSubtreeCost | EstimateExecutions |
|--------|--------|----------------------|--------------|-------------|-------------|------------|------------------|--------------------|
| 1      | 0      | NULL                 | 10           | NULL        | NULL        | NULL       | 0.03374284       | NULL               |
| 2      | 1      | Top                  | 10           | 0           | 3.00E-06    | 15         | 0.03374284       | 1                  |
| 4      | 2      | Distinct Sort        | 30           | 0.01126126  | 0.000504114 | 146        | 0.03373984       | 1                  |
| 5      | 4      | Inner Join           | 46.698       | 0           | 0.00017974  | 146        | 0.02197446       | 1                  |
| 6      | 5      | Clustered Index Scan | 43           | 0.004606482 | 0.0007543   | 31         | 0.005360782      | 1                  |
| 7      | 5      | Clustered Index Seek | 1            | 0.003125    | 0.0001581   | 146        | 0.0161733        | 43                 |

আমরা আনুমানিক বাস্তবায়ন পরিকল্পনাটি পেতে আগ্রহী ক্যোয়ারীটি চালানোর পরে, আপনাকে এটি নিষ্ক্রিয় করতে হবে SHOWPLAN_ALLঅন্যথায়, বর্তমান ডাটাবেস সেশন সরবরাহ করা এসকিউএল কোয়েরিগুলি সম্পাদন করার পরিবর্তে কেবলমাত্র আনুমানিক বাস্তবায়ন পরিকল্পনা উত্পন্ন করবে।

SET SHOWPLAN_ALL OFF

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর আনুমানিক পরিকল্পনা

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও অ্যাপ্লিকেশনটিতে, আপনি CTRL+Lকী শর্টকাটটি আঘাত করে সহজেই যে কোনও এসকিউএল কোয়েরির জন্য আনুমানিক বাস্তবায়ন পরিকল্পনাটি পেতে পারেন ।

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

প্রকৃত বাস্তবায়ন পরিকল্পনা

এসকিউএল কোয়েরি চালানোর সময় অপ্টিমাইজারের মাধ্যমে আসল এসকিউএল বাস্তবায়ন পরিকল্পনা উত্পন্ন হয়। যদি ডাটাবেস টেবিলের পরিসংখ্যানগুলি সঠিক হয় তবে আসল পরিকল্পনাটি অনুমানের তুলনায় উল্লেখযোগ্যভাবে পৃথক হওয়া উচিত নয়।

এসকিউএল সার্ভারে প্রকৃত বাস্তবায়ন পরিকল্পনা পেতে, আপনাকে STATISTICS IO, TIME, PROFILEনিম্নলিখিত এসকিউএল আদেশ দ্বারা চিত্রিত হিসাবে সেটিংস সক্ষম করতে হবে :

SET STATISTICS IO, TIME, PROFILE ON

এখন, পূর্ববর্তী ক্যোয়ারীটি চালনার সময়, এসকিউএল সার্ভারটি নিম্নলিখিত সম্পাদন পরিকল্পনা তৈরি করতে চলেছে:

| Rows | Executes | NodeId | Parent | LogicalOp            | EstimateRows | EstimateIO  | EstimateCPU | AvgRowSize | TotalSubtreeCost |
|------|----------|--------|--------|----------------------|--------------|-------------|-------------|------------|------------------|
| 10   | 1        | 1      | 0      | NULL                 | 10           | NULL        | NULL        | NULL       | 0.03338978       |
| 10   | 1        | 2      | 1      | Top                  | 1.00E+01     | 0           | 3.00E-06    | 15         | 0.03338978       |
| 30   | 1        | 4      | 2      | Distinct Sort        | 30           | 0.01126126  | 0.000478783 | 146        | 0.03338679       |
| 41   | 1        | 5      | 4      | Inner Join           | 44.362       | 0           | 0.00017138  | 146        | 0.02164674       |
| 41   | 1        | 6      | 5      | Clustered Index Scan | 41           | 0.004606482 | 0.0007521   | 31         | 0.005358581      |
| 41   | 41       | 7      | 5      | Clustered Index Seek | 1            | 0.003125    | 0.0001581   | 146        | 0.0158571        |

SQL Server parse and compile time:
   CPU time = 8 ms, elapsed time = 8 ms.

(10 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'post'. Scan count 0, logical reads 116, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'post_comment'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(6 row(s) affected)

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 1 ms.

ক্যোয়ারীটি চালানোর পরে আমরা প্রকৃত বাস্তবায়ন পরিকল্পনাটি পেতে আগ্রহী, আপনাকে STATISTICS IO, TIME, PROFILE ONএই জাতীয় সেটিংসটি অক্ষম করতে হবে :

SET STATISTICS IO, TIME, PROFILE OFF

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর আসল পরিকল্পনা

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও অ্যাপ্লিকেশনটিতে, আপনি CTRL+Mকী শর্টকাটটি আঘাত করে সহজেই যে কোনও এসকিউএল কোয়েরির জন্য আনুমানিক বাস্তবায়ন পরিকল্পনাটি পেতে পারেন ।

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

এসকিউএল সার্ভার ব্যবহার করার সময় একটি কার্যকরকরণ পরিকল্পনা পাওয়ার বিষয়ে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন


2

আপনি আসল পরিকল্পনা পেতে পাওয়ার স্টেটের মাধ্যমে সেট স্ট্যাটিক্স এক্সএমএল ব্যবহার করেও এটি করতে পারেন। আমি এটি লিখেছি যাতে এটি বহু পরিকল্পনার পরিকল্পনাগুলিকে এক পরিকল্পনায় একীভূত করে;

    ########## BEGIN : SCRIPT VARIABLES #####################
    [string]$server = '.\MySQLServer'
    [string]$database = 'MyDatabase'
    [string]$sqlCommand = 'EXEC sp_ExampleSproc'
    [string]$XMLOutputFileName = 'sp_ExampleSproc'
    [string]$XMLOutputPath = 'C:\SQLDumps\ActualPlans\'
    ########## END   : SCRIPT VARIABLES #####################

    #Set up connection
    $connectionString = "Persist Security Info=False;Integrated Security=true;Connection Timeout=0;Initial Catalog=$database;Server=$server"
    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)

    #Set up commands
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $command.CommandTimeout = 0
    $commandXMLActPlanOn = new-object system.data.sqlclient.sqlcommand("SET STATISTICS XML ON",$connection)
    $commandXMLActPlanOff = new-object system.data.sqlclient.sqlcommand("SET STATISTICS XML OFF",$connection)

    $connection.Open()

    #Enable session XML plan
    $result = $commandXMLActPlanOn.ExecuteNonQuery()

    #Execute SP and return resultsets into a dataset
    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null

    #Set up output file name and path
    [string]$fileNameDateStamp = get-date -f yyyyMMdd_HHmmss
    [string]$XMLOutputFilePath = "$XMLOutputPath$XMLOutputFileName`_$fileNameDateStamp.sqlplan"

    #Pull XML plans out of dataset and merge into one multi-statement plan
    [int]$cntr = 1
    ForEach($table in $dataset.Tables)
    {
            if($table.Columns[0].ColumnName -eq "Microsoft SQL Server 2005 XML Showplan")
            {

                [string]$fullXMLPlan = $Table.rows[0]."Microsoft SQL Server 2005 XML Showplan"

                if($cntr -eq 1)
                    {

                    [regex]$rx = "\<ShowPlanXML xmlns\=.{1,}\<Statements\>"
                    [string]$startXMLPlan = $rx.Match($fullXMLPlan).Value
                    [regex]$rx = "\<\/Statements\>.{1,}\<\/ShowPlanXML\>"
                    [string]$endXMLPlan = $rx.Match($fullXMLPlan).Value

                    $startXMLPlan | out-file -Append -FilePath $XMLOutputFilePath

                    }

                [regex]$rx = "\<StmtSimple.{1,}\<\/StmtSimple\>"
                [string]$bodyXMLPlan = $rx.Match($fullXMLPlan).Value

                $bodyXMLPlan | out-file -Append -FilePath $XMLOutputFilePath

                $cntr += 1
            } 
    }

    $endXMLPlan | out-file -Append -FilePath $XMLOutputFilePath

    #Disable session XML plan
    $result = $commandXMLActPlanOff.ExecuteNonQuery()

    $connection.Close()

0

এক্সিকিউশন প্ল্যানের ব্যাখ্যাটি খুব বিশদ হতে পারে এবং পড়ার সময় অনেকটা সময় নিতে পারে, তবে সংক্ষেপে আপনি যদি কোয়েরির আগে 'ব্যাখ্যা' ব্যবহার করেন তবে এটি আপনাকে কোন অংশে প্রথমে কার্যকর করা হয়েছিল সেগুলি সহ আরও অনেক তথ্য দেবে। আপনি যদি এই সম্পর্কে আরও কিছু বিশদ পড়তে চান তবে আমি এই সম্পর্কে একটি ছোট্ট ব্লগ সংকলন করেছি যা আপনাকে পাশাপাশি ডান রেফিসেও নির্দেশ করে। https://medium.com/swlh/jetbrains-datagrip-explain-plan-ac406772c470

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