সেন্ট্রিওন প্ল্যান এক্সপ্লোরার কি ইউডিএফগুলিতে পঠন গণনা করে?


9

আমার এই জাতীয় একটি প্রশ্ন আছে:

select dbo.fn_complexFunction(t.id)
from mytable t

ইন এসকিউএল Sentry পরিকল্পনা এক্সপ্লোরার , আমি লক্ষ্য করেছি আমি ক্যোয়ারী পরিকল্পনা ইউডিএফ অন্তর্ভুক্ত করতে আনুমানিক পরিকল্পনা করুন চালানোর আছে।

'বাস্তব পরিকল্পনা পান' চালানোর সময়, এটি লজিক্যাল রিডস এবং অন্যান্য মেট্রিকগুলিতে ইউডিএফ-তে ঘটে যাওয়া অপারেশনগুলি অন্তর্ভুক্ত বলে মনে হয় না। এই জাতীয় ক্ষেত্রে, প্রোফাইলার ব্যবহার করার একমাত্র কাজ?


1
আমার জ্ঞানের মতে, ক্যোয়ারী ইঞ্জিন নিজেই ইউডিএফগুলিতে পড়ার ফ্যাক্টর করে না। এটি একটি বড় কারণ যে ইউডিএফগুলি এড়ানো ভাল, তারা অপটিমাইজারের কাছে অস্বচ্ছ।
জেএনকে

উত্তর:


11

আমাদের এখানে সবচেয়ে বড় সমস্যাগুলি হ'ল:

  1. @ জেএনকে যেমন বলেছে, এসকিউএল সার্ভার একটি ইউডিএফ ব্যবহার বন্ধ করে দেয় এবং যে কোনওভাবে তাদের সাথে ভয়ঙ্কর কাজ করে (যেমন সর্বদা এক সারি অনুমান করে)। আপনি যখন এসএসএমএসে একটি আসল পরিকল্পনা তৈরি করেন, আপনি এর ব্যবহারটি একেবারেই দেখতে পাবেন না। প্ল্যান এক্সপ্লোরার একই সীমাবদ্ধতার সাপেক্ষে কারণ এটি কেবলমাত্র এসকিউএল সার্ভার সরবরাহ করে এমন একটি পরিকল্পনা সম্পর্কিত তথ্য সরবরাহ করতে পারে।
  2. কোডটি আসল পরিকল্পনা তৈরি করার সময় রানটাইম মেট্রিকগুলির জন্য বিভিন্ন উত্সের উপর নির্ভর করে। দুর্ভাগ্যক্রমে পরিকল্পনার এক্সএমএলটিতে ফাংশন কলগুলি অন্তর্ভুক্ত নয় এবং এসকিউএল সার্ভার দুটি ব্যবহার করার সময় SET STATISTICS IO ON;কোনও ফাংশন দ্বারা ব্যয় করা I / O প্রকাশ করে না (এইভাবে Table I/Oট্যাবটি জনপ্রিয় হয়)।

অ্যাডভেঞ্চার ওয়ার্কস ২০১২ এর বিপরীতে নিম্নলিখিত মতামতটি বিবেচনা করুন এবং কার্য করুন। শিরোনামের টেবিল থেকে একটি এলোমেলো সারি দেওয়া বিশদ টেবিল থেকে একটি এলোমেলো সারি ফিরিয়ে আনার এটি একটি নিরীহ প্রয়াস - বেশিরভাগ সময় আমরা যতটা সম্ভব I / O জেনারেট করি তা নিশ্চিত করার জন্য every

CREATE VIEW dbo.myview 
WITH SCHEMABINDING
AS
  SELECT TOP (100000) rowguid, SalesOrderID, n = NEWID() 
    FROM Sales.SalesOrderDetail ORDER BY NEWID();
GO

CREATE FUNCTION dbo.whatever(@SalesOrderID INT)
RETURNS UNIQUEIDENTIFIER
WITH SCHEMABINDING
AS
BEGIN
  RETURN 
  (
    SELECT TOP (1) rowguid FROM dbo.myview 
     WHERE SalesOrderID = @SalesOrderID ORDER BY n
  );
END
GO

ম্যানেজমেন্ট স্টুডিও আপনাকে কী বলে (এবং না)

এসএসএমএসে নিম্নলিখিত প্রশ্নটি নিন:

SET STATISTICS IO ON;

  SELECT TOP (5) SalesOrderID, dbo.whatever(SalesOrderID) 
    FROM Sales.SalesOrderHeader ORDER BY NEWID();

SET STATISTICS IO OFF;

আপনি যখন কোনও পরিকল্পনা অনুমান করেন, আপনি ক্যোয়ারির জন্য একটি পরিকল্পনা এবং ফাংশনের জন্য একটি একক পরিকল্পনা পাবেন (5 নয়, যেমনটি আপনি আশা করতে পারেন):

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

আপনি কোথাও কোনও আই / ও ডেটা পাবেন না, স্পষ্টতই, যেহেতু কোয়েরিটি আসলে কার্যকর করা হয়নি। এখন, একটি বাস্তব পরিকল্পনা তৈরি করুন। আপনি ফলাফল গ্রিডে প্রত্যাশিত 5 টি সারি পাবেন, নিম্নলিখিত পরিকল্পনাটি (যা ইউডিএফ সম্পর্কে একেবারে দৃশ্যমান উল্লেখ করে না, এক্সএমএল ব্যতীত আপনি এটি কোয়েরি পাঠ্যের অংশ হিসাবে এবং স্কেলার অপারেটরের অংশ হিসাবে সন্ধান করতে পারেন):

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

এবং নিম্নলিখিত STATISTICS IOআউটপুট (যার একেবারে কোনো উল্লেখ করে তোলে Sales.SalesOrderDetail, যদিও আমরা এটা জানি ছিল যে টেবিল থেকে পড়তে):

সারণি 'বিক্রয়অর্ডারহাইডার'। স্ক্যান কাউন্ট 1, লজিকাল রিড 57, ফিজিকাল রিড 0, রিড-ফরোডড রিড 0, লব লজিকাল রিড 0, লব ফিজিকাল 0, লব রিড-ফরোয়ার্ড 0

প্ল্যান এক্সপ্লোরার আপনাকে কী বলে

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

প্ল্যান এক্সপ্লোরারে আনুমানিক পরিকল্পনা

এটি নিজে থেকে ফাংশনটির পরিকল্পনাও দেখায় যা আমি কেবল সম্পূর্ণতার জন্যই অন্তর্ভুক্ত করছি:

প্ল্যান এক্সপ্লোরারে ইউডিএফের জন্য আনুমানিক পরিকল্পনা

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

প্ল্যান এক্সপ্লোরার আসল পরিকল্পনা

সারণি I / O ট্যাবটি এখনও আউটপুট উপর নির্ভর করেSTATISTICS IO , যা ফাংশন কলটিতে সঞ্চালিত কোনও কার্যকলাপকেও উপেক্ষা করে:

প্ল্যান এক্সপ্লোরারে প্রকৃত পরিকল্পনার জন্য সারণি I / O

তবে, পিই আপনার জন্য পুরো কল স্ট্যাক পেয়েছে। আমি মাঝে মধ্যে লোকেরা জিজ্ঞাসা করতে শুনেছি, "পিএফফ্ট, কখন কখন আমার কল স্ট্যাকের প্রয়োজন হবে?" হ্যাঁ, আপনি আসলে করতে সময় অতিবাহিত, CPU- র ব্যবহার ভেঙ্গে, এবং সংখ্যা লেখা আছে (এবং, TVFs জন্য, উত্পাদিত সারির সংখ্যা) জন্য প্রতি একক ফাংশন কল :

প্ল্যান এক্সপ্লোরারে কল স্ট্যাক, ইউডিএফ কল দেখানো showing

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

প্রোফাইলার সম্পর্কে

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


আহ, আমি প্রো সংস্করণে কল স্ট্যাক সম্পর্কে জানতাম না। ঠিক এটাই আমি খুঁজছিলাম। এটি বিদ্যমান তা জেনে রাখা ভাল। এই মুহুর্তে, আমি মনে করি না যে আমি দামটিকে ন্যায়সঙ্গত করতে পারি তবে আমি ভবিষ্যতের পরিস্থিতিতে এটি মনে রাখব। এসকিউএল সার্ভার স্ট্যাটিস্টিকস আইওতে ইউডিএফগুলির জন্য I / O তথ্য সরবরাহ না করার কোনও কারণ আছে কি? এ জাতীয় প্রয়োজনীয় তথ্য বাদ দেওয়া বিভ্রান্তিকর।
গাবে

3
@ গাবে আমি কারণটি জানি না, দুঃখিত। পরামর্শ আরও লাভজনক করতে পারে?
অ্যারন বারট্র্যান্ড

1
@ গ্যাবে এখন প্ল্যান এক্সপ্লোরার সম্পূর্ণ বিনামূল্যে .. এটির নামক সেন্ট্রি যাতে সমস্ত প্রো + চূড়ান্ত সংস্করণ বৈশিষ্ট্য রয়েছে - সমস্ত বিনামূল্যে।
কিন শাহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.