প্রিয় [এখানে আপনার নাম]!
ওহ না, শুনে আমি দুঃখিত! আপনাকে একটি মুহুর্তে স্থির করার জন্য কয়েকটি বেসিক দিয়ে শুরু করা যাক।
আপনি যে জিনিসটির মধ্যে চলেছেন তাকে প্যারামিটার স্নিফিং বলা হয়
এটি উইগি অদ্ভুত সমস্যা থেকে বেরিয়ে আসার একটি উপায়। নামটি জিভের ডানদিকে গড়িয়ে পড়ে। কাঠবিড়ালি জন্য জার্মান শব্দ মত।
এবং এটি সাধারণত আপনার বন্ধু।
যখন কোনও কোয়েরি আপনার সার্ভারকে আঘাত করে, তখন একটি পরিকল্পনা সংকলন করতে হয়। পরে সময় এবং সংস্থানগুলি সাশ্রয় করতে, একটি এক্সিকিউশন প্ল্যানটি আনুমানিক সারিগুলির উপর ভিত্তি করে ক্যাশে করা হয় যা প্যারামিটারটি আপনার কোডটিকে প্রক্রিয়া করতে এবং ফিরিয়ে আনবে।
এটি খারাপ হওয়ার চিত্রের সবচেয়ে সহজ উপায় হ'ল একটি সঞ্চিত প্রক্রিয়াটি কল্পনা করা যা দুটি উপচে পড়া জনগোষ্ঠীর জিনিস গণনা করা দরকার।
উদাহরণ স্বরূপ:
স্পষ্টতই, এই কোডটির একটি সম্পাদনকে অন্যটির চেয়ে অনেক বেশি কাজ করতে হবে এবং আপনি যে ক্যোয়ারী পরিকল্পনাটি করতে চান তা সম্পূর্ণ আলাদা পরিমাণে কাজ করতে সম্পূর্ণ আলাদা দেখাবে।
আমি কিসের বিরুদ্ধে?
এটি খুঁজে পাওয়া, পরীক্ষা করা এবং ঠিক করা সত্যিই একটি কঠিন সমস্যা problem
- এটি খুঁজে পাওয়া শক্ত কারণ এটি ধারাবাহিকভাবে ঘটে না
- এটি পরীক্ষা করা শক্ত কারণ আপনি কী প্যারামিটারগুলি বিভিন্ন পরিকল্পনা তৈরি করে তা জানতে হবে
- এটি ঠিক করা শক্ত কারণ কখনও কখনও এর জন্য ক্যোয়ারী এবং সূচী টিউনিংয়ের প্রয়োজন হয়
- এটি ঠিক করা শক্ত কারণ আপনি হয়ত অনুসন্ধান বা সূচি পরিবর্তন করতে পারবেন না
- এটি ঠিক করা শক্ত কারণ আপনি প্রশ্নগুলি বা সূচি পরিবর্তন করলেও, এটি এখনও ফিরে আসতে পারে
দ্রুত সংশোধন
কখনও কখনও, আপনার যা দরকার তা হ'ল কিছুটা পরিষ্কার। বা বরং, আপনার পরিকল্পনার ক্যাশে করে।
যদি এটি একটি সঞ্চিত পদ্ধতি
চালানোর চেষ্টা করুন EXEC sys.sp_recompile @objname = N'schema.procname'
। এর ফলে প্রক্রিয়াটি পরের বার যখন চালিত হবে তখন নতুন পরিকল্পনাটি পুনরায় সংকলিত করবে।
এটি কী ঠিক করবে না:
- প্রক্রিয়াগুলি বর্তমানে এটি চলছে।
এটি কি গ্যারান্টি দেয় না:
- পুনরায় সংস্থান করার পরে পরবর্তী প্রক্রিয়াটি এমন একটি পরামিতি ব্যবহার করবে যা আপনাকে একটি ভাল পরিকল্পনা দেয়।
আপনি sp_recompile
কোনও টেবিল বা দৃশ্যের দিকেও ইঙ্গিত করতে পারেন , তবে পূর্বেই জেনে রাখা উচিত যে সেই টেবিলে বা দর্শনটিকে স্পর্শ করা সমস্ত কোডই পুনরায় সংকলন করবে। এটি সমস্যাটিকে পুরোপুরি আরও শক্ত করে তুলতে পারে।
যদি এটি একটি প্যারামিটারাইজড ক্যোয়ারী হয়
আপনার কাজটি আরও কিছুটা কঠিন। আপনাকে এসকিউএল হ্যান্ডেলটি সন্ধান করতে হবে। আপনি পুরো পরিকল্পনার ক্যাশেটি মুক্ত করতে চান না - যেমন sp_recompile
কোনও টেবিল বা দৃশ্যের বিপরীতে আপনি ব্যবহার করতে চান (হা হা হা) সম্পূর্ণ অনিচ্ছাকৃত পরিণতি ঘটিয়ে ফেলতে পারেন।
এই কমান্ড আউট করার সহজ উপায়টি হল sp_Blitz কে * চালানো ! "ফিক্স প্যারামিটার স্নিফিং" নামে একটি কলাম রয়েছে যার ক্যাশে থেকে একটি একক পরিকল্পনা সরানোর কমান্ড রয়েছে। যদিও এটি পুনঃনির্মাণের মতো একই ত্রুটি রয়েছে।
এটি কী ঠিক করবে না:
- প্রক্রিয়াগুলি বর্তমানে এটি চলছে।
এটি কি গ্যারান্টি দেয় না:
- পুনরায় সংস্থান করার পরে পরবর্তী প্রক্রিয়াটি এমন একটি পরামিতি ব্যবহার করবে যা আপনাকে একটি ভাল পরিকল্পনা দেয়।
আমার এখনও সাহায্য দরকার!
আমাদের নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:
- সম্ভব হলে ভাল ক্যোয়ারী প্ল্যান
- খারাপ ক্যোয়ারী পরিকল্পনা
- ব্যবহৃত পরামিতি
- প্রশ্নে প্রশ্ন
- সারণী এবং সূচী সংজ্ঞা
ক্যোয়ারী পরিকল্পনা এবং ক্যোয়ারী পাওয়া
যদি কোয়েরিটি চলমান থাকে তবে আপনি বর্তমানে সম্পাদন করা ক্যোয়ারীগুলি ক্যাপচার করতে sp_BlitzWho * বা sp_WhoIsactive ব্যবহার করতে পারেন।
EXEC sp_BlitzWho;
EXEC sp_WhoIsActive @get_plans = 1;
যদি ক্যোয়ারী বর্তমানে সম্পাদন করা হচ্ছে না, আপনি sp_BlitzCache * ব্যবহার করে পরিকল্পনার ক্যাশে এটি পরীক্ষা করতে পারেন ।
আপনি যদি এসকিউএল সার্ভার 2016+ এ থাকেন এবং ক্যোয়ারী স্টোর চালু করা থাকে তবে আপনি sp_BlitzQueryStore * ব্যবহার করতে পারেন ।
EXEC dbo.sp_BlitzCache @StoredProcName = 'Your Mom';
EXEC dbo.sp_BlitzQueryStore @StoredProcName = 'Your Mom';
এগুলি আপনাকে আপনার সঞ্চিত পদ্ধতিটির ক্যাশেড সংস্করণ (গুলি) সন্ধান করতে সহায়তা করবে। যদি এটি কেবলমাত্র প্যারামিটারাইজড কোড হয় তবে আপনার অনুসন্ধানটি আরও কিছুটা কঠিন। যদিও এটি সাহায্য করতে পারে:
EXEC dbo.sp_BlitzCache @QueryFilter = 'statement';
আপনি যে কোনও একটি থেকে মোটামুটি অনুরূপ আউটপুট দেখতে হবে। আবার, কোয়েলি প্ল্যানটি শীতল নীল ক্লিক ক্লিকের কলামটি আমন্ত্রণ জানিয়েছে এটি আপনার বন্ধু।
পরিকল্পনাগুলি ভাগ করে নেওয়ার সবচেয়ে সহজ উপায় হ'ল পেস্ট করুন প্ল্যান * ব্যবহার করা বা এক্সএমএলটিকে পেস্টবিনে ডাম্প করা। এটি পেতে, নিমন্ত্রিত নীল ক্লিক কলামগুলির মধ্যে যে কোনও একটিতে ক্লিক করুন। আপনার প্রশ্নের পরিকল্পনাটি একটি নতুন এসএসএমএস ট্যাবে উপস্থিত হওয়া উচিত appear
আপনি যদি আপনার কোম্পানির কোড এবং ক্যোয়ারী ভাগ করে নেওয়ার বিষয়ে স্বাচ্ছন্দ্য বোধ করেন তবে আপনি নিজের পরিকল্পনাটি বেনামে রাখতে সেন্ট্রি ওয়ান এর ফ্রি প্ল্যান এক্সপ্লোরার সরঞ্জামটি ব্যবহার করতে পারেন । মনে রাখবেন, এটি সাহায্য পাওয়া আরও শক্ত করে তোলে - বেনামে কোড পড়া এবং বের করা খুব কঠিন।
এই সরঞ্জামগুলির মধ্যে আমরা যেগুলির বিষয়ে কথা বললাম সেগুলির মধ্যে কোয়েরি পাঠ্যটি ফিরে আসা উচিত। এখানে আপনার আর কিছু করার দরকার নেই।
প্যারামিটার (গুলি) পাওয়া কিছুটা বেশি কঠিন। আপনি যদি প্ল্যান এক্সপ্লোরার ব্যবহার করছেন তবে নীচে একটি ট্যাব রয়েছে যা সেগুলি আপনার জন্য তালিকাভুক্ত করে।
আপনি যদি sp_BlitzCache * ব্যবহার করেন তবে একটি ক্লিকযোগ্য কলাম রয়েছে যা আপনাকে সঞ্চিত প্রক্রিয়াগুলির জন্য মৃত্যুদন্ডের বিবৃতি দেয়।
টেবিল এবং সূচী সংজ্ঞা পাওয়া
জিনিসগুলি স্ক্রিপ্ট করতে আপনি সহজেই এসএমএসে ডান ক্লিক করতে পারেন।
আপনি যদি সমস্ত শটটিতে পেতে চান, আপনি যদি কোনও টেবিলের উপরে সরাসরি নির্দেশ করেন তবে sp_BlitzIndex * আপনাকে সহায়তা করতে পারে।
EXEC dbo.sp_BlitzIndex @DatabaseName = 'StackOverflow2010',
@SchemaName = 'dbo',
@TableName = 'Users';
এটি আপনাকে সারণির সংজ্ঞা দেবে (যদিও তৈরি বিবৃতি হিসাবে নয়), এবং আপনার সমস্ত সূচকের জন্য বিবৃতি তৈরি করবে।
আপনার প্রশ্নে এই তথ্য সংগ্রহ এবং যুক্ত করা লোকদের সহায়তা করার জন্য পর্যাপ্ত তথ্য পাওয়া উচিত, বা আপনাকে সঠিক দিকে নির্দেশ করা উচিত।
আমি নিজে এটা করতে চাই!
ভাল, দুর্দান্ত। আমি তোমার জন্য খুশি. আপনি পাগল ব্যক্তি।
লোকেরা মনে করে যে তারা প্যারামিটার সান্ফিংয়ের "সমাধান" করে:
তবে এগুলি কেবল মাত্র বিভিন্ন উপায়ে স্মার্টিং পরামিতি অক্ষম করে। এটি যে সমস্যাটি সমাধান করতে পারে না তা বলার অপেক্ষা রাখে না, তারা কেবল সত্যিকারের কারণেই পৌঁছায় না।
এর কারণ মূল কারণটি পাওয়া সাধারণত এক ধরণের কঠিন difficult আপনাকে সেইসব উদ্বেগজনক "পরিকল্পনার মানের সমস্যাগুলি" সন্ধান করতে হবে।
দ্রুত বনাম ধীর পরিকল্পনার সাথে শুরু করে, এর মতো পার্থক্যগুলি সন্ধান করুন:
- সূচকগুলি ব্যবহৃত হয়েছে
- অর্ডার যোগ দিন
- সিরিয়াল বনাম সমান্তরাল
এছাড়াও বিভিন্ন অপারেটর সন্ধান করুন যা আপনার কোডটিকে প্যারামিটার সান্ফিংয়ের জন্য সংবেদনশীল করে তুলেছে:
- খোঁজ
- প্রকারের
- যোগদানের ধরণ
- মেমরি অনুদান (এবং এক্সটেনশন দ্বারা ছড়িয়ে পড়ে)
- spools
বনাম স্ক্যান, সূচী বিভাজন বা কার্গো কাল্ট-ওয়াই স্টাফের লোকেরা হেম এবং হ'ল কোনও বিষয়ে জড়িয়ে পড়বেন না।
সাধারণত, একটি দুর্দান্ত বেসিক ইনডেক্সিং সমস্যা আছে। কখনও কখনও কোডটির জন্য কিছুটা নতুন করে লেখা দরকার।
আপনি যদি প্যারামিটার স্নিফিং সম্পর্কে আরও জানতে চান:
আপনি যদি এটি পড়ছেন এবং আপনি মনে করেন আমি কোনও লিঙ্ক বা সহায়ক সরঞ্জামটি মিস করেছি তবে একটি মন্তব্য করুন leave আমি এটি আপ টু ডেট রাখার জন্য যথাসাধ্য চেষ্টা করব