সঞ্চিত পদ্ধতিতে অ্যাড-হক বনাম চালানো হলে কোড বিভিন্ন পরিকল্পনা তৈরি করে


9

আমার একটি মোছার বিবৃতি আছে যা কোনও সঞ্চিত পদ্ধতির অভ্যন্তরে চালিত হওয়ার সময় একটি খারাপ পরিকল্পনা ব্যবহার করে তবে অ্যাড-হক চালানোর সময় আরও অনেক ভাল পরিকল্পনা বেছে নিচ্ছে।

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

আমি জানতে চাইছি কেন অপ্টিমাইজার অ্যাড-হকের এসকিউএল বনাম সঞ্চিত পদ্ধতির জন্য একটি পৃথক সম্পাদন পরিকল্পনা ব্যবহার করছে।

আপডেট: আমি অনুমান করি এটি সর্বোপরি অবশ্যই প্যারামিটারগুলি ছিল- যখন আমি যখন ভেরিয়েবল হার্ডকোডযুক্ত অ্যাড-হক কোডটি চালাতাম তখন আমি সঠিক মান সহ "খারাপ" পরিকল্পনাটি পেতে পারি (এটি একটি তারিখ, মানগুলি যা এক বছরের পুরনো "ভাল" পরিকল্পনা উত্সাহিত বলে মনে হচ্ছে)। এখন কোয়েরি ইঙ্গিতটি ব্যবহার করে প্রোকে "ভাল" পরিকল্পনাটি জোর করার চেষ্টা করার চেষ্টা চলছে।

সমাধান: অজানা ইঙ্গিতটির জন্য অপটিমাইজটি ব্যবহার করে আমি যে পরিকল্পনাটি চাইছিলাম তা শেষ করেছি।


এটি সম্ভবত পরামিতি স্নিগ্ধ । কোয়েরিটি কি তার WHEREধারাটিতে একটি পরিবর্তনশীল উল্লেখ করে ?
নিক চ্যামাস

4
আপনি কি কোড যুক্ত করতে পারেন
gbn

প্ল্যান কোথাও পোস্ট করুন। যেমনটি হ'ল, পরিকল্পনাগুলি কেন অন্যরকম, তা আপনাকে জানাতে বেশ শক্ত হতে চলেছে।
অ্যারন বার্ট্র্যান্ড

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

অ্যাড-হক কোডের জন্য পরিকল্পনা (ভাল) ছোট টেবিলের একটি টেবিল স্ক্যান করে (যার মধ্যে কেবল 5-10 সারি রয়েছে) এবং কোন সারিটি পিকে যাচাই করতে হবে তা খুঁজে পেতে বড় টেবিলের একটি নন-ক্লাস্টারড সূচক ব্যবহার করে good বড় টেবিলের। আমি যত তাড়াতাড়ি সম্ভব বাস্তব পরিকল্পনাগুলি হাতে পাওয়ার চেষ্টা করব।
msgisme

উত্তর:


5

স্বাভাবিক সন্দেহভাজন:

  1. অ্যাডহকের ধ্রুবক, কোডের পরামিতি
  2. কোডে ডেটা ধরণের অমিল
  3. পরামিতি স্নিগ্ধ

পয়েন্ট 1: অপ্টিমাইজারটি ধ্রুবকগুলির জন্য সেরা পরিকল্পনাটি চয়ন করতে পারে।
স্থির পরিবর্তনসমূহ = পরিকল্পনা পরিবর্তন করুন change একটি প্যারাম্যাট্রিসড প্লেন পুনরায় পরিবর্তনযোগ্য

পয়েন্ট 2 ড্যাটাটাইপ অগ্রাধিকারের কারণে অন্তর্নির্মিত রূপান্তরগুলি প্রবর্তন করবে
যেমন এনভারচচার প্যারামিটারের তুলনায় ভার্চার কলাম

পয়েন্ট 3: প্যারামিটার মাস্কিং ব্যবহার করুন বা অজানা জন্য অপ্টিমাইজ
সম্পাদনা করুন: পরীক্ষা করতে: সঞ্চিত প্রকল্প চালান, sp_updestats চালান, আবার চালান। এটি ক্যাশেড প্ল্যানগুলিকে অকার্যকর করবে যা পরিকল্পনার ক্যাশে সাফ করার পরে আরও ভাল

সম্পাদনা: jcolebrand এর মন্তব্য পরে

আপনি বেশ কয়েকটি উপায়ে স্নিফিং অক্ষম করতে পারেন। প্রধান 3 টি

  • কম্পাইল। এটি নির্বোধ আইএমও।
  • অজানা জন্য অপ্টিমাইজ (sic)
  • প্যারামিটার মাস্কিং

পরামিতি মাস্কিং:

DECLARE @MaskedParam varchar(10)
SELECT @MaskedParam = @SignaureParam

SELECT...WHERE column = @MaskedParam

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

এখন, মুখোশযুক্ত / "অজানা" পরামিতিগুলির তুলনায় "স্নিফড" পরামিতিগুলির একটি পরিকল্পনা কেন "চটচটে", আমি নিশ্চিত নই।

আমি এসকিউএল সার্ভার 2000 সাল থেকে সহজ কোড ব্যতীত প্যারামিটার মাস্কিং ব্যবহার করেছি। আমি উল্লেখ করেছি যে এটি আরও জটিল কোড সহ ঘটতে বাধ্য। এবং আমার পুরানো চাকরিতে আমার কিছু প্রতিবেদন রয়েছে যা আমি পরিকল্পনার প্যারামিটার ডিফল্টগুলিতে পরিবর্তন করতে পারি। আমি সমর্থন করি "কার্গো কাল্ট" পদ্ধতির সমর্থন কল চেয়ে সহজ ছিল।

কিছু আড্ডার পরে 2, 12 অক্টোবর 2011 সম্পাদনা করুন

  • অজানা জন্য প্যারামিটার মাস্কিং এবং অপ্টিমাইজ করার একই প্রভাব রয়েছে যতদূর আমি বলতে পারি
    ইঙ্গিতটি মাস্কিংয়ের চেয়ে পরিষ্কার তবে এসকিউএল সার্ভার ২০০৮ এর সাথে যুক্ত হয়েছিল।

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

  • এই এমএস সংযোগ নিবন্ধটি আকর্ষণীয়: সঞ্চিত পদ্ধতির মধ্যে সাবপটিমাল ইনডেক্স ব্যবহার (নীচের এসও উত্তরের একটিতে উল্লিখিত)

  • বব বিচেমিনও এটি উল্লেখ করেছেন

অসামান্য বিষয়

  • স্মিফিং কি এখনও সুপারিশের সাথে প্রযোজ্য? এটি হ'ল, যদি অপটিমাইজার পরিকল্পনাটি বাতিল করতে জানে তবে এর পুনরায় ব্যবহারের লক্ষ্য কী?

  • কেন স্নিগড পরিকল্পনা "স্টিকি"?

এসও থেকে লিঙ্ক:


1. এসপি-তে থাকা পরম কোডে একটি পরিবর্তনশীল 2 আবারও একই ডেটাটাইপ ৩. আমি উভয়টি বিভিন্ন পরামিতি দিয়ে চালিয়েছি এবং প্রতিবার একই পরিকল্পনা পেয়েছি। আমি প্রতিটি চেষ্টার পরে ক্যাশে সাফ করে দিয়েছি।
msgisme

1
Re: point point 3 আপনি এসকিউএল সার্ভারকে বিদ্যমান পরিকল্পনাগুলি উপেক্ষা করতে বাধ্য করার জন্য OPTION (RECOMPILE)বা সম্পূর্ণ প্রোকটিও চালাতে পারেন WITH RECOMPILE
নিক চ্যামাস 16

3
এটি বিটিডব্লিউ OPTIMIZE, কারণ মাইক্রোসফ্ট একটি আমেরিকান সংস্থা। :)
নিক চ্যামাস

1
@ পরামিতি স্নিফিং প্রতিরোধ / পরাস্ত করার বিষয়ে কোন চিন্তাভাবনা জিবিএন?
jcolebrand

1
@ জকোলেব্রানড: সহজ উত্তর হ'ল "না" :-)
জিবিএন

2

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

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