কোন খরচের কারণগুলি বিভিন্ন ধরণের স্পুলগুলি বেছে নেওয়ার জন্য অপ্টিমাইজারে যায়?


15

Spoolum

এসকিউএল সার্ভারে বিভিন্ন ধরণের স্পুল রয়েছে। দুই যে আমি আগ্রহী হয় ছক নাটাই s এবং ইনডেক্স spools , পরিমার্জন প্রশ্নের বাইরে

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

আমার প্রশ্নগুলি হ'ল:

  • কোন উপাদানগুলি টেবিল বনাম সূচক স্পুলের পছন্দগুলিতে যায়
  • কোন উপাদানগুলি ইজিার এবং অলস স্পুলগুলির মধ্যে পছন্দের হয়

উত্তর:


12

এটি সামান্য বিস্তৃত তবে আমি মনে করি আমি সত্য প্রশ্নটি বুঝতে পেরেছি এবং সে অনুযায়ী উত্তর দেব। যদিও সারণী বনাম সূচি স্পুল সম্পর্কে কথা বলতে যাচ্ছি। আমি টেবিল এবং সূচি স্পলের মধ্যে একটি পছন্দ হিসাবে সেখানে দেখার পক্ষে এটি বেশ সঠিক বলে মনে করি না। আপনি কি জানেন যে, একটি সূক্ষ্ম সাবট্রিতে একটি সূচি স্পুল, একটি টেবিল স্পুল, বা উভয় সূচক স্পুল এবং একটি টেবিল স্পুল পাওয়া সম্ভব। আমি বিশ্বাস করি যে আপনি নিম্নলিখিত শর্তের অধীনে একটি সূচক স্পুল পেয়েছেন তা সাধারণভাবে বলা সঠিক:

  1. ক্যোয়ারী অপ্টিমাইজারটির একটি যোগদানকে একটি প্রয়োগে রূপান্তরিত করার কারণ রয়েছে
  2. ক্যোয়ারী অপ্টিমাইজার আসলে প্রয়োগে রূপান্তর সম্পাদন করে
  3. ক্যোয়ারী অপ্টিমাইজারটি সূচক স্পুল যুক্ত করতে নিয়মটি ব্যবহার করে (কমপক্ষে সূচি স্পলটি অবশ্যই নিরাপদ থাকতে হবে)
  4. সূচক স্পুল সহ পরিকল্পনাটি নির্বাচিত হয়

আপনি এগুলির বেশিরভাগটি সাধারণ ডেমো দিয়ে দেখতে পারেন। একজোড়া স্তূপ তৈরি করে শুরু করুন:

DROP TABLE IF EXISTS dbo.X_10000_VARCHAR_901;
CREATE TABLE dbo.X_10000_VARCHAR_901 (ID VARCHAR(901) NOT NULL);

INSERT INTO dbo.X_10000_VARCHAR_901 WITH (TABLOCK)
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;


DROP TABLE IF EXISTS dbo.X_10000_VARCHAR_800;
CREATE TABLE dbo.X_10000_VARCHAR_800 (ID VARCHAR(800) NOT NULL);

INSERT INTO dbo.X_10000_VARCHAR_800 WITH (TABLOCK)
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;

প্রথম ক্যোয়ারির জন্য, খোঁজ করার মতো কিছুই নেই:

SELECT *
FROM dbo.X_10000_VARCHAR_901 a
CROSS JOIN dbo.X_10000_VARCHAR_901 b
OPTION (MAXDOP 1);

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

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

পরবর্তী ক্যোয়ারির জন্য, এটি আশা করা ন্যায়সঙ্গত যে অপটিমাইজারের কোনও প্রয়োগ বিবেচনা করার কারণ রয়েছে:

SELECT *
FROM dbo.X_10000_VARCHAR_901 a
INNER JOIN dbo.X_10000_VARCHAR_901 b ON a.ID = b.ID 
OPTION (LOOP JOIN, MAXDOP 1);

তবে এটি বোঝানোর অর্থ নয়:

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

এই ক্যোয়ারী দ্বিতীয় পরীক্ষায় ব্যর্থ। একটি সম্পূর্ণ ব্যাখ্যা এখানে । সর্বাধিক প্রাসঙ্গিক অংশ উদ্ধৃত:

অপ্টিমাইজার কোনও প্রয়োগ সক্ষম করতে ফ্লাইতে একটি সূচক তৈরির বিষয়টি বিবেচনা করে না; বরং ইভেন্টের ক্রমটি সাধারণত বিপরীত হয়: পরিবর্তনে রূপান্তর করুন কারণ একটি ভাল সূচক বিদ্যমান।

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

SELECT *
FROM dbo.X_10000_VARCHAR_901 a
INNER JOIN dbo.X_10000_VARCHAR_901 b ON a.ID >= b.ID AND a.ID <= b.ID
OPTION (MAXDOP 1);

তবে এখনও কোনও সূচকের স্পুল নেই:

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

এই ক্যোয়ারী তৃতীয় পরীক্ষায় ব্যর্থ। এসকিউএল সার্ভারে 2014 ইনডেক্স কী দৈর্ঘ্যের 900 বাইট ছিল। এটি এসকিউএল সার্ভার ২০১ extended সালে বাড়ানো হয়েছিল তবে কেবল অবিচ্ছিন্ন সূচকের জন্য। একটি স্পুলের সূচকটি একটি ক্লাস্টার্ড সূচক তাই সীমাটি 900 বাইটে থেকে যায় । যাই হোক না কেন, সূচী স্পুল নিয়ম প্রয়োগ করা যাবে না কারণ এটি ক্যোয়ারী কার্যকর করার সময় একটি ত্রুটি হতে পারে।

ডেটা ধরণের দৈর্ঘ্য 800 এ হ্রাস করা অবশেষে একটি সূচক স্পুল সহ একটি পরিকল্পনা সরবরাহ করে:

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

সূচক স্পুল পরিকল্পনাটি অবাক হওয়ার মতো নয়, কোনও স্পুল নেই এমন পরিকল্পনার তুলনায় উল্লেখযোগ্যভাবে সস্তা। আপনি অননুমোদিত QUERYRULEOFF BuildSpoolজিজ্ঞাসা ইঙ্গিতটির সাথে পার্থক্যটি দেখতে পাবেন :

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

এটি একটি সম্পূর্ণ উত্তর নয়, তবে আশা করি এটি আপনি যা খুঁজছিলেন তার মধ্যে কিছু এটি।

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