আপনি কীভাবে কোনও ক্যোয়ারির ব্যাখ্যা পরিকল্পনাটি ব্যাখ্যা করবেন?


88

কোনও এসকিউএল বিবৃতি কীভাবে কার্যকর হচ্ছে তা বোঝার চেষ্টা করার সময়, কখনও কখনও ব্যাখ্যা পরিকল্পনাটি দেখার পরামর্শ দেওয়া হয়। একটি ব্যাখ্যা পরিকল্পনার ব্যাখ্যা (অর্থবোধ) দিয়ে কোনটি প্রক্রিয়াটি অনুসরণ করা উচিত? "ওহ, এটি দুর্দান্তভাবে কাজ করছে?" বনাম "ওহ না, এটি ঠিক নেই।"

উত্তর:


81

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

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

সুতরাং, ব্যাখ্যা পরিকল্পনাটি কীভাবে পড়তে হবে তার পদ্ধতির জন্য ওরাকল ডকুমেন্টেশন একটি ভাল গাইড: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

পারফরম্যান্স টিউনিং গাইডের মাধ্যমেও ভালভাবে পড়ুন।

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

সুতরাং, নীচের লাইন: অ্যাক্সেস প্রক্রিয়া বুঝতে understand ডাটাবেস বুঝতে। ক্যোয়ারির উদ্দেশ্যটি বুঝুন tand থাম্বের নিয়ম এড়িয়ে চলুন।


4
আমি জানতাম প্রথম 9 টি শব্দের পরে এটি আপনি। এটি "নামটির সুরটির মতো" ... আমি কোনও শব্দে বা কম শব্দে একটি ডেভ পোস্ট সনাক্ত করতে পারি ...

আপনার "বৃহত্তর" ব্যবহারের সাথে আমি কিছুটা দুর্বল হয়ে পড়ব ... কখনও কখনও ডেটাগুলি আপনার সূচী কলামগুলির চারপাশে এতটা খারাপভাবে গুঁড়িয়ে দেওয়া যেতে পারে যে কোনও এফটিএস 10% সারিগুলির জন্যও একটি সূচক স্ক্যান সম্পাদন করতে পারে ...

4
10% - একেবারে। যদি আপনার প্রতি ব্লকে 200 টি সারি থাকে এবং আপনি 0.5% সারি সন্ধান করেন, তবে আপনাকে তাত্ত্বিকভাবে সমস্ত মান পেতে যেহেতু 100% ব্লক অ্যাক্সেস করতে হবে, সুতরাং এটি 10% এর চেয়েও বেশি চরম হয়।
ডেভিড অ্যালড্রিজ

13

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


4
লিঙ্কটি নষ্ট হয়ে গেছে। লাইভ লিঙ্ক । এখানে আপডেট সংস্করণ রয়েছে (11.2 এর জন্য)
আলেকজান্ডার মালাখভ

5

নীচের দুটি উদাহরণ একটি পূর্ণ স্ক্যান এবং একটি আইএনডেক্স ব্যবহার করে একটি দ্রুত স্ক্যান দেখায়।

আপনার খরচ এবং কার্ডিনালিটিতে মনোনিবেশ করা ভাল। উদাহরণগুলির দিকে তাকিয়ে সূচকের ব্যবহারটি ক্যোয়ারি চালানোর ব্যয় হ্রাস করে।

এটি কিছুটা জটিল (এবং এতে আমার 100% হ্যান্ডেল নেই) তবে মূলত ব্যয়টি সিপিইউ এবং আইও ব্যয়ের একটি ফাংশন, এবং কার্ডিনালিটিটি ওরাকল সর্বাধিক পার্থকৃত সারিগুলির সংখ্যা। এই দুটি হ্রাস করা ভাল জিনিস।

ভুলে যাবেন না যে কোনও প্রশ্নের ব্যয়টি আপনার ক্যোয়ারী এবং ওরাকল অপটিমাইজার মডেল দ্বারা প্রভাবিত হতে পারে (যেমন: COST, পছন্দ ইত্যাদি) এবং আপনি কতবার আপনার পরিসংখ্যান চালান।

উদাহরণ 1:

স্ক্যান http://docs.google.com/a/shanghainetwork.org/File?id=dd8xj6nh_7fj3cr8dx_b

সূচকগুলি ব্যবহার করে উদাহরণ 2:

INDEX http://docs.google.com/a/fukuoka-now.com/File?id=dd8xj6nh_9fhsqvxcp_b

এবং ইতিমধ্যে পরামর্শ হিসাবে, টেবিল স্ক্যান জন্য সন্ধান করুন। আপনি সাধারণত এগুলি এড়াতে পারেন।


আহ, রুল মোডের কোনও খরচ নেই ... সুতরাং আমি অনুমান করি যে আপনার বক্তব্যটি একদম নিখুঁতভাবে সঠিক হয়েছে তবে আমি বলব যে এটি মৌলিকভাবে ভুল। আপনি যদি CHOOSE বলে থাকেন তবে আপনি আরবিও বা সিবিও পেতে পারেন। সিবিও হ'ল একমাত্র যা ব্যয় গণনা করে।

4

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

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


3

সত্যিই এগুলির মতো ইস্যুগুলির জন্য, করণীয় সেরা হ'ল আসকটম । বিশেষত তার প্রশ্নের উত্তরটিতে অনলাইনে ওরাকল ডকের লিঙ্ক রয়েছে, যেখানে এই ধরণের বিধিগুলির অনেকগুলি ব্যাখ্যা করা হয়।

একটি বিষয় মনে রাখবেন, তা হ'ল পরিকল্পনাটি সত্যই সর্বোত্তম অনুমান।

স্ক্যালপ্লাসটি ব্যবহার করা শিখতে এবং আউটট্র্যাস কমান্ডটি দিয়ে পরীক্ষা করা ভাল ধারণা হবে। কিছু শক্ত সংখ্যা সহ, আপনি সাধারণত আরও ভাল সিদ্ধান্ত নিতে পারেন।

তবে আপনার উচিত উচিত। সে এ সম্পর্কে সব জানে :)


2

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


2

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

Seq Scan on my_table  (cost=0.00..15558.92 rows=620092 width=78)

কখনও কখনও টেবিল স্ক্যানগুলি আদর্শ হয়ে যায়, বলুন, সারিগুলিকে জিজ্ঞাসা করার জন্য একটি সূচক ব্যবহার করুন। তবে এটি সেই লাল-পতাকাগুলির নিদর্শনগুলির মধ্যে একটি যা আপনি সন্ধান করছেন বলে মনে হচ্ছে।


4
(পূর্ণ) টেবিল স্ক্যানগুলি অগত্যা মেমরি ক্যাশেটি শুদ্ধ করে না।
a_horse_with_no_name

2

মূলত, আপনি প্রতিটি ক্রিয়াকলাপটি একবার দেখুন এবং দেখুন কীভাবে কাজ করতে সক্ষম হওয়া উচিত সে সম্পর্কে আপনার জ্ঞানটি দিয়ে অপারেশনগুলি "বুদ্ধিমান" হয় কিনা।

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


1

পরিকল্পনার প্রতিটি অনুচ্ছেদে কতটা সময় ব্যয় হয়েছে তা দেখুন এবং ইঞ্জিন কী করছে তা বিবেচনা করুন। উদাহরণস্বরূপ, যদি এটি কোনও টেবিলটি স্ক্যান করছে তবে ক্ষেত্র (গুলি) যা স্ক্যান করছে সেগুলিতে একটি সূচক রাখার বিষয়টি বিবেচনা করুন


1

আমি সাধারণত সূচি বা টেবিল স্ক্যানের সন্ধান করি। এটি সাধারণত আমাকে বলে যে আমি একটি গুরুত্বপূর্ণ কলামে একটি সূচক মিস করছি যা যেখানে বিবৃতি বা যোগদানের বিবৃতিতে রয়েছে।

Http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx থেকে :

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

* Index or table scans: May indicate a need for better or  additional indexes.
* Bookmark Lookups: Consider changing the current clustered index,
  consider using a covering index, limit
  the number of columns in the SELECT
  statement.
* Filter: Remove any functions in the WHERE clause, don't include wiews
  in your Transact-SQL code, may need
  additional indexes.
* Sort: Does the data really need to be sorted? Can an index be used to
  avoid sorting? Can sorting be done at
  the client more efficiently? 

এগুলি এড়ানো সর্বদা সম্ভব নয় তবে আপনি এগুলি যত বেশি এড়াতে পারবেন তত দ্রুত ক্যোয়ারি পারফরম্যান্স হবে।


4
টেবিল স্ক্যানগুলি সমস্ত খারাপ নয় - টেবিল থেকে রেকর্ডিং ফিরে / প্রক্রিয়াকরণের সংখ্যার উপর নির্ভর করে একটি পূর্ণ টেবিল স্ক্যান সূচক স্ক্যানের চেয়ে দ্রুততর হতে পারে (আপনি যদি যাইহোক রেকর্ডগুলি ফিরিয়ে আনতে চলেছেন তবে আপনি একটি সূচক স্ক্যান করবেন এবং টেবিল থেকে সম্পূর্ণ পঠন - 1 এর পরিবর্তে 2 টি পদক্ষেপ)।
স্কটচের

-7

চলতি নিয়ম

(আপনি সম্ভবত বিশদটি পড়তে চান:

খারাপ

বেশ কয়েকটি বড় টেবিলের টেবিল স্ক্যান

ভাল

একটি অনন্য সূচক ব্যবহার করে
সূচক সমস্ত প্রয়োজনীয় ক্ষেত্র অন্তর্ভুক্ত

মোস্ট কমন উইন

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


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

8
আপত্তিজনক পরামর্শের জন্য বঞ্চিত। পারফরম্যান্সের 90% সমস্যার সমাধান অস্থায়ী সারণী এবং কোনও ক্যোয়ারী বিভাজন দ্বারা সমাধান করা হয় না। আপনি কোন পৃথিবীতে বাস করেন ?!
TheSoftwareJedi

@ জেডি, আমি এমন এক পৃথিবীতে বাস করি যেখানে অশ্লীলতা বেশিরভাগ ক্ষেত্রেই সঠিক এবং ডেটাবেসগুলি সংজ্ঞাগতভাবে বেশ কাঠামোগত। যদিও আপনার উত্তরটি পড়তে আগ্রহী।
এজে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.