কীভাবে (এবং কেন) শীর্ষস্থানীয় কার্য সম্পাদন পরিকল্পনাকে প্রভাবিত করে?


35

একটি মাঝারি জটিল জিজ্ঞাসার জন্য আমি অনুকূলিত করার চেষ্টা করছি, আমি লক্ষ্য করেছি যে TOP nধারাটি অপসারণের ফলে প্রয়োগের পরিকল্পনা পরিবর্তন হয়। আমি অনুমান করতাম যে যখন কোনও প্রশ্নের মধ্যে TOP nডেটাবেস ইঞ্জিনটি ক্লোজটি উপেক্ষা করে ক্যোয়ারি চালাবে TOP, এবং তারপরে শেষে কেবল সেই ফলাফলটি সঙ্কুচিত করবে যা অনুরোধ করা হয়েছিল এমন সারিগুলির n সংখ্যাতে সেট করে । গ্রাফিকাল এক্সিকিউশন প্ল্যানটি মনে হয় যে এটি কেস - TOPএটি "শেষ" পদক্ষেপ। তবে দেখা যাচ্ছে সেখানে আরও কিছু চলছে।

আমার প্রশ্ন হ'ল কীভাবে (এবং কেন) কোনও শীর্ষস্থানীয় ক্লজ কোনও প্রশ্নের কার্যকর করার পরিকল্পনাকে প্রভাবিত করে?

আমার ক্ষেত্রে যা চলছে তার একটি সরলীকৃত সংস্করণ এখানে:

কোয়েরিটি দুটি এবং দুটি সারণী থেকে সারি মিলছে A

TOPধারাটি ছাড়াই , অপ্টিমাইজারটি অনুমান করে যে টেবিল এ থেকে 19k সারি থাকবে এবং টেবিল বি থেকে 46k সারি থাকবে, ফিরে আসা সারিগুলির প্রকৃত সংখ্যা এ এর ​​জন্য 16k এবং বি এর জন্য 13 ক হয়, একটি হ্যাশ ম্যাচ এই দুটি ফলাফল সেটগুলিতে যোগ দিতে ব্যবহৃত হয় মোট 69 টি সারি (তারপরে একটি সাজানো প্রয়োগ করা হয়)। এই কোয়েরিটি খুব দ্রুত ঘটে।

আমি যখন TOP 1001অপ্টিমাইজার যুক্ত করি তখন হ্যাশ ম্যাচ ব্যবহার করে না; পরিবর্তে এটি প্রথম টেবিল এ থেকে ফলাফলগুলি সাজান (একই প্রাক্কলন / প্রকৃত 19 কে / 16 কে) এবং টেবিল বি এর বিরুদ্ধে নেস্টেড লুপ করে টেবিল বি এর জন্য সারিগুলির আনুমানিক সংখ্যা এখন 1, এবং আশ্চর্যের বিষয়টি হ'ল TOP nসরাসরি প্রভাবিত করে বি এর বিরুদ্ধে আনুমানিক মৃত্যুদন্ডের সংখ্যা (সূচী সন্ধান) - এটি সর্বদা 2n + 1 , বা আমার ক্ষেত্রে 2003 হিসাবে উপস্থিত বলে মনে হয় I এই পরিবর্তনটি যদি পরিবর্তন হয় তবে সেই অনুযায়ী পরিবর্তন হয় TOP n। অবশ্যই, যেহেতু এটি নেস্টেড হওয়ায় মৃত্যুদন্ড কার্যকর হওয়ার আসল সংখ্যাটি 16 কে (টেবিল এ থেকে সারি সংখ্যা) এবং এটি কোয়েরিটিকে ধীর করে দেয়।

আসল দৃশ্যটি কিছুটা জটিল তবে এটি প্রাথমিক ধারণা / আচরণকে ধারণ করে। উভয় সারণী সূচী সিক্স ব্যবহার করে অনুসন্ধান করা হয়। এটি এসকিউএল সার্ভার 2008 আর 2 এন্টারপ্রাইজ সংস্করণ।


ক্যোয়ারিতে একটি ORDER BYধারা রয়েছে। TOPপরিকল্পনার যেখানে এই সাজানোর ঘটনা ঘটে সেখানে পরিবর্তনগুলি যুক্ত করা , তবে আমি সূচীর ফাঁসি সংখ্যা টেবিল বিয়ের বিপরীতে কীভাবে প্রভাবিত করে সে সম্পর্কে আমি আরও উদ্বিগ্ন ... (অবশ্যই দু'জনেই সম্পর্কিত হতে পারে - আমি জানি না)
ডেভিড

1
সম্পর্কিত আলোচনা: FAST num_rowsক্যোয়ারির ইঙ্গিত
রিমাস রুসানু

উত্তর:


39

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

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

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

আমার প্রশ্ন, কীভাবে (এবং কেন) TOPএন ক্লজ কোনও প্রশ্নের কার্যকর করার পরিকল্পনাকে প্রভাবিত করে?

কিছু যৌক্তিক ক্রিয়াকলাপ, যেমন TOPঅর্ধ যোগদান এবং FAST n কোয়েরি ইঙ্গিত কোয়েরি অপ্টিমাইজার কার্যকর করার পরিকল্পনার বিকল্পগুলির ব্যয়কে প্রভাবিত করে। প্রাথমিক ধারণাটি হ'ল কোনও সম্ভাব্য পরিকল্পনার আকারটি প্রথম এন সারিগুলিকে আরও দ্রুত অন্য পৃথক পরিকল্পনার চেয়ে দ্রুত ফিরিয়ে দিতে পারে যা সমস্ত সারি ফেরত দিতে অনুকূলিত হয়েছিল।

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

একটি সারি লক্ষ্য কোয়েরি পরিকল্পনার বিকল্পগুলি কীভাবে সাজানো হয় তা সংশোধন করে। এর সংক্ষিপ্তসারটি হ'ল প্রতিটি অপারেটরকে পুরো ফলাফলের সেটটি ব্যয় করেই অপ্টিমাইজারটি শুরু হয়, উপযুক্ত পয়েন্টে একটি সারি লক্ষ্য নির্ধারণ করে, এবং তারপরে পরীক্ষামূলকভাবে সারিগুলির সংখ্যা নির্ধারণের জন্য পরিকল্পনা গাছটি পিছনে কাজ করে works সারি লক্ষ্য পূরণ করতে।

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

সর্বদা হিসাবে, একটি সারি লক্ষ্যের ভিত্তিতে নির্বাচিত একটি কার্যনির্বাহী পরিকল্পনা অপ্টিমাইজারের যুক্তি দক্ষতা এবং এটি সরবরাহ করা তথ্যের মানের সাপেক্ষে। একটি সারি লক্ষ্য সহ প্রতিটি পরিকল্পনা অনুশীলনে দ্রুত প্রয়োজনীয় সংখ্যক সারি তৈরি করতে পারে না, তবে ব্যয়ের মডেল অনুসারে এটি হবে।

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

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


12

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

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

টেবিল বি সন্ধান করা হয়, এটি একবারে একটি একক সারি আনছে। এ কারণেই অনুমানটি ১। এটি এটিও ধরে নিয়েছে যে এটি কেবল এই সারিটি 50% সময় সন্ধান করবে। সুতরাং এটি অনুমান করে এটি এটির জন্য 2n + 1 সন্ধানের প্রয়োজন হবে।


এটি সঠিক বলে মনে হচ্ছে না যে উপাত্তগুলি আনার পদ্ধতি অনুসারে সারিগুলির আনুমানিক সংখ্যাটি পরিবর্তিত হবে। এটি কীভাবে ডেটা পায় তা কার্ডিনালিটিতে প্রভাব ফেলবে না। পরিবর্তে এটি যেভাবে আনা হয় তাতে পরিবর্তন কী কার্যকর হবে মৃত্যুদন্ডের সংখ্যায়?
ডেভিড

"সারিগুলির আনুমানিক সংখ্যা" কার্যকর করা হয়। নেস্টেড লুপে, এটি একাধিকবার কার্যকর হওয়ার সম্ভাবনা রয়েছে।
রব ফারলে

এটি সারিগুলির আসল সংখ্যা এবং তৎকালীন মৃত্যুদণ্ডের প্রকৃত সংখ্যার চেয়ে আলাদা আচরণ হবে। যদি আসল পরিকল্পনাটি 16,834 প্রকৃত মৃত্যুদন্ড এবং 15,407 প্রকৃত সারি দেখায় তবে আমি এটি বোঝাতে চাই যে এটি 16 কে সন্ধান করেছে তবে কেবল 15 কিরূপে প্রিকারের সাথে মিলেছে। যদি এর অর্থ নির্বাহের জন্য 15 কে সারি হয় তবে এটি 15k * 16 কে = 240 মিলিয়ন সারি হবে - টেবিলের চেয়ে 10 গুণ বড় ...
ডেভিড

এছাড়াও, আমি নিশ্চিত নই যে আমি আপনার উত্তরের শেষ বিবৃতিটি অনুসরণ করেছি। আপনি যখন বলছেন 2n + 1 "এটি" সন্ধান করার চেষ্টা করে, আপনি "এটি" বলতে কী বোঝায়? নিশ্চয়ই একটি সারিতে নয়? আপনি কী বোঝাতে চেয়েছেন যে অপটিমাইজারটি ধরে নিয়েছে যে এ এর ​​যে কোনও প্রদত্ত সারির জন্য এটি 50% এর সাথে মিলবে এবং তাই বি থেকে 1001 ম্যাচ পাওয়ার জন্য এ থেকে 2003 সারি "চেষ্টা" করতে হবে? এই আচরণটি মাইক্রোসফ্ট দ্বারা কোথাও নথিভুক্ত করা হয়েছে? এবং এটির TOPধারাটির সাথে কী করার আছে ? আপনার উত্তর (গুলি) / ধৈর্য জন্য ধন্যবাদ।
ডেভিড

হ্যাঁ, আনুমানিক সারিগুলি কার্যকর করা হয়। আসল সারি মোট। যদিও, কোনও অপারেটর টেবিলের চেয়ে বেশি সারি ফিরতে সমস্যা নেই কারণ অপারেটররা একই সারিতে একাধিকবার ফিরছেন তা প্রদর্শন করা খুব সহজ।
রব ফারলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.