এসকিউএল সার্ভার 2005/8 ক্যোরি অপটিমাইজেশন ইঙ্গিত


13

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

উদাহরণস্বরূপ আমার একবার একটি ডিবিএ ছিল যারা জোর দিয়েছিলেন যে গণনা (*) গণনার চেয়ে খারাপ সম্পাদন করবে (1) (সে সঠিক ছিল কিনা তা এখনও আমার জানা নেই বা এটি সর্বশেষতম ক্যোয়ারী অপটিমাইজারগুলির বিরুদ্ধে বৈধ কিনা)।

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

উত্তর:


13

টিউনিং 101

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

খারাপভাবে সম্পাদন করা প্রশ্ন দুটি মূল স্বাদে আসতে পারে: লেনদেনমূলক ক্যোয়ারী যা খুব বেশি সময় নেয় এবং ব্যাচ জব (বা রিপোর্ট) গ্রাইন্ড করতে খুব বেশি সময় লাগে। এর সাথে ভুল কিছু নিয়ে কোয়েরির একটি ভাল লক্ষণ ক্যোয়ারী পরিকল্পনার একক আইটেম যা 99% সময় নেয়।

লেনদেনমূলক জিজ্ঞাসা

বেশিরভাগ অনুষ্ঠানে দুর্বল সম্পাদনমূলক ট্রানজেকশনাল ক্যোয়ারী কয়েকটি জিনিসগুলির মধ্যে একটি:

  • অনুপস্থিত সূচক। আপনি এটি ক্যোয়ারী পরিকল্পনায় দেখতে পাচ্ছেন - একটি জোড়ায় বড় টেবিলগুলির টেবিল স্ক্যানগুলি যা খুব বেছে বেছে বেছে নেওয়া উচিত (অর্থাত্ কয়েকটি সারি ফিরবে)।

  • সূচি ব্যবহার করতে ব্যর্থ ক্যোয়ারী। যদি আপনার যেখানে শর্ত রয়েছে সেখানে শর্ত রয়েছে, একটি গণনা করা মান বা কোয়েরিতে অন্য কোনও আইটেমের সাথে যোগ দেয় যা সার্গ-সক্ষম নয় তবে আপনাকে আবার কোয়েরিটি লিখতে হবে। সংক্ষেপে, সরগসগুলি এমন কোয়েরি পূর্বাভাস দেয় যা সারিগুলি মুছে ফেলার জন্য সূচকগুলি ব্যবহার করতে পারে। লজিক্যাল এ্যান্ড, সাম্যতা এবং বৈষম্য (>,> =, <, <= এবং! =) সমস্ত সরগ-সক্ষম। বা traditionতিহ্যগতভাবে সরগ-সক্ষম হয় না। তবে আপনি প্রায়শই ওআর এর থেকে অর্গ থেকে অর্ডার (নূতন এবং বার নয়) ধরণের কনস্ট্রাক্টসকে বিভ্রান্ত করে সর্গ-সক্ষম পূর্বাভাসগুলিতে অনুবাদ করতে পারেন।

  • অপর্যাপ্ত পূর্বাভাস। উদাহরণস্বরূপ, আপনার যদি where inকোনও নেস্টেড সাবকোরিয়ানের রেফারেন্স থাকে তবে দেখুন এটি where existsযোগ হিসাবে বা হিসাবে পুনরায় লেখা যেতে পারে । এর ফলে আরও দক্ষ ক্যোয়ারী পরিকল্পনার ফলাফল হতে পারে এবং এখানে অন্যান্য স্ট্যান্ডার্ড পুনরায় লেখাগুলি রয়েছে যা আপনি চেষ্টা করতে পারেন। আবার গুরুর গাইড বই এবং এই বিষয়ে অন্যান্যগুলি একটি ভাল সূচনা পয়েন্ট।

ব্যাচের প্রশ্ন

ব্যাচের অনুসন্ধানগুলি আরও জটিল এবং বিভিন্ন সুরের সমস্যা রয়েছে issues কিছু টিপস হ'ল:

  • ইন্ডেক্সিং। এটি লেনদেনের অনুসন্ধানগুলির সাথে একই কারণে বড় পার্থক্য করতে পারে। প্রায়শই অনুপস্থিত সূচকের একটি ভাল চিহ্ন হ'ল একটি দীর্ঘ, গ্রাইন্ডিং অপারেশন (ক্যোয়ারী পরিকল্পনার 99%) যা মেশিনটিকে ছুঁড়ে মারছে বলে মনে হয় না।

  • অস্থায়ী টেবিল। অস্থায়ী সারণীগুলি তৈরি করে এমন বেশ কয়েকটি ক্যোয়ারিতে একটি ক্যোয়ারী ভাঙার পক্ষে আপনি আরও ভাল হতে পারেন। বৃহত্তর প্রশ্নগুলি আশাবাদীটিকে স্ক্রু বাড়ানোর জন্য আরও বেশি জায়গা দেয়, যদিও এটি আগে যে ইস্যুতে ব্যবহৃত হত তার চেয়ে কম এটি। select intoএই ক্রিয়াকলাপটি ন্যূনতমভাবে লগড হওয়ার সাথে টেম্প টেবিলগুলি তৈরি করুন (অনেক কম লগ ক্রিয়াকলাপ), যা I / O বোঝা হ্রাস করে।

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

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

  • ক্লাস্টারড এবং কভারেজ সূচি। এগুলি কোনও গোষ্ঠীকরণ কলামের উপর ভিত্তি করে ডিস্কের রেফারেন্সের স্থানীয়তার উপর চাপ দেওয়ার কারণে এগুলি একটি ক্যোয়ারির কার্যকারিতা উন্নত করতে পারে। একটি ক্লাস্টার্ড সূচক একটি ব্যাচের কাজের দক্ষতার সাথে একটি বড় পার্থক্য করতে পারে।

  • অপর্যাপ্ত পূর্বাভাস। এগুলি সারাজ এবং অন্যান্য উপ-অপ্টিমাইজেশনের সমস্যাগুলির সাথে একইভাবে সমস্যা সৃষ্টি করতে পারে যেমন তারা লেনদেন সংক্রান্ত প্রশ্নের সাথে করে।

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

  • নেস্টেড লুপস যোগ দেয়। যোগদানের দু'দিকে অপটিমাইজার কী করছে তা একবার দেখুন। এগুলি অক্ষম হতে পারে যদি (উদাহরণস্বরূপ কোনও নেস্টেড লুপগুলির উভয় পাশের দুটি বড় টেবিল স্ক্যান করে টেবিল যোগ দেয় cl ক্লাস্টার ইনডেক্সগুলি ব্যবহার করে বিবেচনা করুন order byএবং এবং অপারেশনটিকে মার্জ জোনে পরিবর্তনের চেষ্টা করার চেষ্টা করছেন বা হ্যাশ জোনের প্রচারের ইঙ্গিত দিচ্ছেন যদি একপাশে থাকে) এটি করার জন্য যথেষ্ট ছোট।

লকিং

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


1
+1 হিসাবে এটি পারফরম্যান্স টিউনিং সম্পর্কিত কিছু দুর্দান্ত তথ্য (ক্যালেনের ক্লাসে থাকতে আমার খুব আনন্দ হয়েছে। তিনি কী জানেন সে কী জানে!)। আপনি কেবল গতিশীল দর্শন সম্পর্কে কিছু তথ্য যুক্ত করতে পারেন।
ওয়েইন

3

সেরা ইঙ্গিত: এসকিউএল সার্ভার 2008 ব্যবহার করুন এবং আপনার পরীক্ষা চলাকালীন কার্যকলাপ তদারকির চালনা করুন run যে প্রশ্নগুলি সবচেয়ে বেশি সময় নেয় / সবচেয়ে বেশি I / O থাকে সেগুলি নোট করুন etc. কোয়েরিটি দেখার জন্য এবং / অথবা সম্পাদনের পরিকল্পনাটি দেখার জন্য এই প্রশ্নগুলিতে ডান ক্লিক করুন।

পরবর্তী: কার্যকর করার পরিকল্পনাগুলি শিখুন।

পরবর্তী: ডাটাবেস টিউনিং উইজার্ডটি ব্যবহার করুন।

এই পদক্ষেপগুলি আপনাকে আপনার নিজস্ব "সেরা ইঙ্গিত" তৈরি করতে সহায়তা করবে।


2

এসকিউএল সার্ভার এক্সিকিউশন প্ল্যানগুলির সাথে কীভাবে কাজ করা যায় এবং কীভাবে তা বোঝার বিষয়ে রেডগেটের একটি দুর্দান্ত মুক্তভাবে উপলব্ধ ইবুক

http://www.red-gate.com/specials/Grant.htm?utm_content=Grant080623

লজ্জাজনক প্লাগ, আমি এসকিউএল সার্ভার পারফরম্যান্সের অধীনে আমার ব্লগে পারফরম্যান্স টিউনিং উপকরণগুলিকে উল্লেখ করি ।

একবার আপনার এই উপাদানটির কিছু হজম করার পক্ষে মতবিরোধ হয়ে গেলে, দয়া করে নির্দ্বিধায় এখানে পোস্ট করুন বা নির্দিষ্ট প্রশ্নের সাথে সরাসরি আমার সাথে যোগাযোগ করুন।


1

প্রথম, সূচীকরণ। অনেকেই বুঝতে পারেন না যে বিদেশী কীগুলি স্বয়ংক্রিয়ভাবে সূচকগুলি পায় না। যেহেতু এগুলিতে যোগদান হয় তারা প্রায় সবসময় একটি সূচক থাকা উচিত।

পরিবর্তে সেট-ভিত্তিক কোড দ্বারা প্রতিস্থাপন করা যায় কিনা তা দেখতে সমস্ত কার্সার ঘনিষ্ঠভাবে পরীক্ষা করুন। আমি এমন কোড পরিবর্তন করেছি যা ঘন্টার পর ঘন্টা সেকেন্ডে চালিয়ে গেছে।

সাবকিউরিগুলি এড়িয়ে চলুন। আপনার যদি কোড থাকে তবে তাদের সাথে যোগ দিন বা উত্সযুক্ত টেবিলগুলিতে যোগদান করুন।

আপনার যেখানে ক্লজটি ব্যঙ্গবদ্ধ তা নিশ্চিত করুন।

কার্যকর করার পরিকল্পনাগুলি পড়তে শিখুন।

পারফরম্যান্স টিউনিংয়ের বিষয়ে অফিসে বেশ কয়েকটি ভাল বই রয়েছে তা নিশ্চিত করুন।

কিছু ক্ষেত্রে টেম্প টেবিলগুলির চেয়ে টেবিলের ভেরিয়েবলগুলি আরও ভাল এবং টেম্প টেবিলগুলি অন্যদের মধ্যে আরও ভাল পারফর্ম করে, আপনার যদি এগুলি ব্যবহারের প্রয়োজন হয় তবে উভয়টি চেষ্টা করে দেখুন এবং দেখুন particular নির্দিষ্ট ক্ষেত্রে কোনটি আরও ভাল কাজ করে।

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