অপশন ফোর অর্ডার সারিগুলি মোছা না হওয়া পর্যন্ত কর্মক্ষমতা উন্নত করে


9

আমার কিছুটা জটিল এসকিউএল সার্ভার ২০০৮ ক্যোয়ারী রয়েছে (প্রায় 200 টি লাইন মোটামুটি ঘন এসকিউএল) যা আমার প্রয়োজন হিসাবে সম্পাদন করছে না। সময়ের সাথে সাথে পারফরম্যান্স প্রায় .5 সেকেন্ড থেকে প্রায় 2 সেকেন্ডে নেমে যায়।

মৃত্যুদণ্ড কার্যকর করার পরিকল্পনাটি দেখে, এটা বেশ সুস্পষ্ট ছিল যে যোগদানের পুনর্নির্মাণের মাধ্যমে পারফরম্যান্সের উন্নতি হতে পারে। আমি করেছি, এবং এটি করেছে ... প্রায় .3 সেকেন্ডের মধ্যে। এখন ক্যোয়ারিতে "অপশন ফোরস অর্ডার" ইঙ্গিত রয়েছে এবং জীবন ভাল।

আজ আমার সাথে আসে, ডাটাবেস পরিষ্কার। আমি প্রায় 20% সারি সংরক্ষণাগারভুক্ত করেছি, সারিগুলি মোছা বাদ দিয়ে প্রাসঙ্গিক ডাটাবেসে কোনও পদক্ষেপ নিই না ... কার্যকর করার পরিকল্পনাটি সম্পূর্ণ হোজেড হয় । এটি নির্দিষ্ট সাবট্রির কতগুলি সারি ফিরে আসবে এবং সম্পূর্ণরূপে এটি ভুলভাবে বোঝায়:

<Hash>

সঙ্গে

<NestedLoops Optimized='false' WithUnorderedPrefetch='true'>

এখন ক্যোয়ারির সময়টি প্রায় .3 এস থেকে প্রায় 18 এর দশক পর্যন্ত বেড়ে যায়। (!) আমি সারিগুলি মুছে ফেলেছি বলেই। আমি যদি ক্যোয়ারির ইঙ্গিতটি সরিয়ে দিই তবে আমি প্রায় 2s কোয়েরি সময়টিতে ফিরে আসি। আরও ভাল, কিন্তু খারাপ।

আমি একাধিক অবস্থান এবং সার্ভারে ডাটাবেস পুনরুদ্ধার করার পরে সমস্যাটি পুনরায় তৈরি করেছি। কেবলমাত্র প্রতিটি টেবিল থেকে প্রায় 20% সারি মুছে ফেলা এই সমস্যাটির কারণ হয়।

  1. জোর করে যোগদানের আদেশের পক্ষে কি কোয়েরি অনুমানগুলি সম্পূর্ণরূপে অসম্পূর্ণ (এবং এভাবে কোয়েরি সময়কে অনির্দেশ্য) করা যায় না?
  2. আমার কি কেবল আশা করা উচিত যে আমাকে হয় উপ-অনুকূল ক্যোয়ারী সম্পাদনা গ্রহণ করতে হবে, বা এটি বাজপাখির মতো দেখতে হবে এবং প্রায়শই ম্যানুয়ালি কোয়েরি ইঙ্গিতগুলি সম্পাদনা করতে হবে? বা প্রতিটি ইঙ্গিতও পাশাপাশি যোগ হতে পারে? .3 থেকে 2s নেওয়া বড় হিট।
  3. সারণি মোছার পরেও কেন অপ্টিমাইজারটি ফুঁসে উঠল তা স্পষ্ট? উদাহরণস্বরূপ, "হ্যাঁ, এটি একটি নমুনা স্ক্যান নিয়েছিল, এবং আমি ডেটা ইতিহাসে এর আগে বেশিরভাগ সারি সংরক্ষণাগারভুক্ত করেছিলাম কারণ নমুনায় বিরল ফলাফল পাওয়া যায়, সুতরাং এটি বাছাই করা হ্যাশ অপারেশনটির প্রয়োজনীয়তাটিকে অবমূল্যায়ন করে"?

আপনি যদি কার্য সম্পাদনের পরিকল্পনা দেখতে চান তবে দয়া করে এমন কোনও অবস্থানের প্রস্তাব করুন যাতে আমি সেগুলি পোস্ট করতে পারি। অন্যথায়, আমি সবচেয়ে অত্যাশ্চর্য বিট নমুনা করেছি। এখানে মৌলিক ভুল অনুমান, প্যারেন্সে সংখ্যাগুলি (আনুমানিক: প্রকৃত) সারি হয়।

                             /  Clustered Index Scan (908:7229)
Nested Loops (Inner Join) --<
                             \  NonClustered Index Seek (1:7229)

মনে রাখবেন যে অভ্যন্তরীণ লুপটি 908 টি সারি স্ক্যান করবে বলে আশা করা হচ্ছে, তবে এর পরিবর্তে 52,258,441 স্ক্যান করে। যদি এটি সঠিক হত তবে এই শাখাটি 12 সিসি না দিয়ে প্রায় 2 মিমি দৌড়ে দিত। সারিগুলি মোছার আগে, এই অভ্যন্তরীণ যোগদানের প্রাক্কলনটি কেবল 2 এর মোট ফ্যাক্টর দ্বারা বন্ধ ছিল এবং দুটি ক্লাস্টার ইনডেক্সে হ্যাশ ম্যাচ হিসাবে সম্পাদিত হয়েছিল।

উত্তর:


6

জোর করে যোগদানের আদেশের পক্ষে কি কোয়েরি অনুমানগুলি সম্পূর্ণরূপে অসম্পূর্ণ (এবং এভাবে কোয়েরি সময়কে অনির্দেশ্য) করা যায় না?

ফোর্স অর্ডার ব্যবহার অনুমানগুলি ভুল করে না, সারিগুলি মোছার কাজটি করে। টেবিলে পরিসংখ্যানের আপডেট জোর করা অনুমানের নির্ভুলতার উন্নতি করতে পারে।

আমার কি কেবল আশা করা উচিত যে আমাকে হয় উপ-অনুকূল ক্যোয়ারী সম্পাদনা গ্রহণ করতে হবে, বা এটি বাজপাখির মতো দেখতে হবে এবং প্রায়শই ম্যানুয়ালি কোয়েরি ইঙ্গিতগুলি সম্পাদনা করতে হবে? বা প্রতিটি ইঙ্গিতও পাশাপাশি যোগ হতে পারে? .3 থেকে 2s নেওয়া বড় হিট।

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

সারণি মোছার পরেও কেন অপ্টিমাইজারটি ফুঁসে উঠল তা স্পষ্ট? উদাহরণস্বরূপ, "হ্যাঁ, এটি একটি নমুনা স্ক্যান নিয়েছিল, এবং আমি ডেটা ইতিহাসে এর আগে বেশিরভাগ সারি সংরক্ষণাগারভুক্ত করেছিলাম কারণ নমুনায় বিরল ফলাফল পাওয়া যায়, সুতরাং এটি বাছাই করা হ্যাশ অপারেশনটির প্রয়োজনীয়তাটিকে অবমূল্যায়ন করে"?

আপনি সমস্যার সারণীতে সারি গণনার উল্লেখ করেন নি তবে সম্ভবত এটি মুছে ফেলা হতে পারে:

  • একটি পরিসংখ্যান আপডেট ট্রিগার করতে যথেষ্ট সারি সরান নি। এটি ঘটতে হবে যখন 20% সারি পরিবর্তন করা হয়েছে তবে একটি গতিশীল থ্রেশহোল্ড সক্ষম করতে ট্রেস ফ্ল্যাগ 2371 ব্যবহার করার বিকল্প রয়েছে ।
  • একটি পরিসংখ্যান আপডেট ট্রিগার করেছে কিন্তু সংগ্রহ করা নমুনা প্রতিনিধি ছিল না। সম্পূর্ণ স্ক্যান সহ একটি ম্যানুয়াল আপডেট চালিয়ে এটি সংশোধন করুন

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


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

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

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