আমার জিজ্ঞাসাটি গতকালকের চেয়ে হঠাৎ ধীর কেন?


76

[অভিবাদন]

(একটি পরীক্ষা করুন)

[ ] Well trained professional, [ ] Casual reader, [ ] Hapless wanderer,

আমার একটি আছে (প্রযোজ্য সমস্ত যাচাই করুন)

[ ] query [ ] stored procedure [ ] database thing maybe  

এটি দুর্দান্ত চলছিল (যদি প্রযোজ্য হয়)

[ ] yesterday [ ] in recent memory [ ] at some point 

তবে হঠাৎ এখন ধীর হয়ে গেছে।

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

সমস্যাটি কী, আমার কী করা উচিত এবং কিছু সহায়তা পাওয়ার জন্য আমি কোন তথ্য সরবরাহ করতে পারি?

[*Insert appropriate closing remarks*]

উত্তর:


88

প্রিয় [এখানে আপনার নাম]!

ওহ না, শুনে আমি দুঃখিত! আপনাকে একটি মুহুর্তে স্থির করার জন্য কয়েকটি বেসিক দিয়ে শুরু করা যাক।

আপনি যে জিনিসটির মধ্যে চলেছেন তাকে প্যারামিটার স্নিফিং বলা হয়

এটি উইগি অদ্ভুত সমস্যা থেকে বেরিয়ে আসার একটি উপায়। নামটি জিভের ডানদিকে গড়িয়ে পড়ে। কাঠবিড়ালি জন্য জার্মান শব্দ মত।

এবং এটি সাধারণত আপনার বন্ধু।

যখন কোনও কোয়েরি আপনার সার্ভারকে আঘাত করে, তখন একটি পরিকল্পনা সংকলন করতে হয়। পরে সময় এবং সংস্থানগুলি সাশ্রয় করতে, একটি এক্সিকিউশন প্ল্যানটি আনুমানিক সারিগুলির উপর ভিত্তি করে ক্যাশে করা হয় যা প্যারামিটারটি আপনার কোডটিকে প্রক্রিয়া করতে এবং ফিরিয়ে আনবে।

এটি খারাপ হওয়ার চিত্রের সবচেয়ে সহজ উপায় হ'ল একটি সঞ্চিত প্রক্রিয়াটি কল্পনা করা যা দুটি উপচে পড়া জনগোষ্ঠীর জিনিস গণনা করা দরকার।

উদাহরণ স্বরূপ:

  • ক্রসফিট শার্ট পরা লোকেরা যারা আহত নয়: জিরো

  • ক্রসফিট শার্ট পরা লোকেরা যখন ঝাঁকুনি দেয়: সমস্ত All

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

আমি কিসের বিরুদ্ধে?

এটি খুঁজে পাওয়া, পরীক্ষা করা এবং ঠিক করা সত্যিই একটি কঠিন সমস্যা 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 আমি এটি আপ টু ডেট রাখার জন্য যথাসাধ্য চেষ্টা করব



28

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

  1. একটি অপ্টিমাইজার অনুসন্ধান ট্রি সিদ্ধান্ত টিপিং পয়েন্টটি অতিক্রম করে ডেটা বিতরণ / ভলিউম পরিবর্তিত হয়েছে
  2. সূচি / ফাইলগুলি খণ্ডিত হয়ে গেছে
  3. ডেটা পরিবর্তনের কারণে পরিসংখ্যান আপডেট করা / যুক্ত / বাদ দেওয়া বা বাসি এবং বিভ্রান্তিকর হয়ে উঠেছে
  4. উইন্ডোজ মেমরির ব্যবহার পরিবর্তন হয়েছে
  5. লেনদেন লগগুলি পূর্ণ এবং কাটছে না, বারবার শারীরিক ফাইলের প্রসারণ ঘটায়
  6. স্কিমা পরিবর্তিত হয়েছে - সূচক / সূচীকৃত ভিউ / কলাম / সীমাবদ্ধতা যুক্ত, সংশোধিত বা বাদ দেওয়া, উপাত্তের ধরণ পরিবর্তন করা ইত্যাদি
  7. ট্রেস ফ্ল্যাগ সেটিংস পরিবর্তন করা হয়েছে
  8. উইন্ডোজ আপডেট প্রয়োগ করা হয়েছিল
  9. ডাটাবেস বা সার্ভার সেটিং পরিবর্তন করা হয়েছে
  10. সার্ভার সিইউ স্তর পরিবর্তন হয়েছে
  11. ক্লায়েন্ট অ্যাপ্লিকেশন সেশন সেটিংস পরিবর্তন করা হয়েছে

এই তালিকার 6 - 11 টি আইটেমগুলি কিছু স্পষ্ট পদক্ষেপ গ্রহণের পরেই ঘটতে পারে। আমার ধারণা আপনি এগুলি বাদ দিয়েছিলেন কিন্তু অনেক সময় যে চ্যালেঞ্জটি অনুভব করছেন, তিনি জানেন যে অন্য কেউ পরিবর্তন করেছেন, এবং পরিকল্পনার ক্যাশে এন্ট্রিগুলি সাফ করার পথে আপনি যাচাই করার আগে এটি পরীক্ষা করা উচিত।


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

না কোনভাবেই না. আমি কখনই কাউকে এমন উত্তর মুছে ফেলতে বলব না যা ভুল বা ক্ষতিকারক নয়। আমি এখনও মনে করি আপনি কিছু বিশদ যুক্ত করতে পারেন তবে শেষ পর্যন্ত এটি আপনার উপর নির্ভর করে।
এরিক ডার্লিং

10

কেবলমাত্র বিদ্যমান উত্তরগুলিতে যুক্ত করতে যদি তারা সহায়তা না করে, পরের দিন "হঠাৎ" যখন আপনার প্রশ্নগুলি ভিন্ন আচরণ করে, চেক করুন:

  • ব্যবহৃত টেবিলগুলির জন্য স্কিমটি কি শেষ সময় থেকে পরিবর্তন হয়েছে? এসএসএমএসের ক্ষেত্রে, আপনি অবজেক্ট এক্সপ্লোরারে সার্ভারটিতে ডান ক্লিক করতে পারেন এবং চয়ন করতে পারেন Reports → Standard Reports → Schema Changes History
  • আইটেম গণনা নাটকীয়ভাবে বৃদ্ধি পেয়েছে? সম্ভবত ব্যবহারের টেবিলগুলিতে প্রচুর ডেটা উপস্থিত থাকলে আপনার ক্যোয়ারীটি এতটা ধীর হয়।
  • আপনার মতো একই সাথে অন্য কেউ ডাটাবেস ব্যবহার করছে? আপনি যেখানে একে অপরের কাজে হস্তক্ষেপ করবেন না এমন সময় স্লটগুলি বেছে নিন।
  • সিস্টেমের পরিসংখ্যানগুলি কীভাবে দেখছে? হতে পারে সার্ভারটি গরম চলছে এবং সিপিইউ থ্রটল করছে বা হার্ড ড্রাইভগুলি স্থান বা অদলবদূর বাইরে চলেছে। সার্ভার রুমে আগুন বা বন্যার মতো আরও একটি হার্ডওয়্যার সমস্যা থাকতে পারে।

7

আরেকটি সম্ভাবনা হ'ল আপনার ইনফ্রাস্ট্রাকচার টিমটি ভিএমওয়্যারের উপরে ভোমশন এবং আপনার এসকিউএল উদাহরণটি সমর্থন করে এমন ভিএমএম ডিবিএ সম্পর্কে না জেনে হোস্ট থেকে হোস্টে নির্বিঘ্নে সরানো হচ্ছে tools

আপনার অবকাঠামোটি যখন স্রোত হয় তখন এটি একটি আসল সমস্যা ... আমি এটির সাথে সত্যিকারের স্বপ্ন দেখছি।

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