কোনও সূচক প্রয়োজনীয় বা প্রয়োজনীয় কিনা তা কীভাবে নির্ধারণ করবেন


110

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

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

(উপরে স্ক্রিপ্টগুলি কী করছে তা পরিষ্কার করার জন্য নীচে ল্যারি কোলেম্যানের উত্তর থেকে আংশিকভাবে সম্পাদনা করুন)

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

আমার কি এসকিউএল প্রোফাইলার চালানোর দরকার আছে, বা সারণীগুলির অনুসন্ধানের কোডটি পরীক্ষা করা ভাল? এবং আপনার কি অন্য কোনও পরামর্শ আছে?


1
এই নিবন্ধটি দেখুন sqlserverperformance.wordpress.com/2007/11/29/…
ইগর

অব্যর্থ সূচকগুলির জন্য পরীক্ষা করুন। নিবন্ধটি আপনাকে সহায়তা করতে পারে: sqlshack.com/…
শিওয়ানগিনি শিশুলকার

উত্তর:


80

আমি জেসন স্ট্র্যাটেজের সূচক বিশ্লেষণ স্ক্রিপ্টগুলি (পুরানো অবস্থান) ব্যবহার করি । তারা আপনাকে বলবে যে আপনার বিদ্যমান সূচিগুলি কতগুলি ব্যবহৃত হয় তেমনি কতগুলি অনুপস্থিত সূচকগুলি ব্যবহৃত হত। আমি সাধারণত সূচীগুলি যোগ করি না যতক্ষণ না তারা কোনও টেবিলে 5 বা 10% এর চেয়ে বেশি প্রশ্নের তৈরি করে।

সবচেয়ে গুরুত্বপূর্ণ, যদিও এটি ব্যবহারকারীর জন্য অ্যাপ্লিকেশনটি দ্রুত পর্যাপ্ত সাড়া দেয় তা নিশ্চিত করার বিষয়ে।

আপডেট: নতুন স্ক্রিপ্টগুলির জন্য জেসন স্ট্র্যাটের সূচী বিশ্লেষণ ব্লগ নিবন্ধসমূহ (নতুন অবস্থান)

ডাবল আপডেট: আজকাল আমি সূচি বিশ্লেষণ সম্পাদন করার সময় sp_BlitzIndex® ব্যবহার করি


সমস্ত টেবিল বিশ্লেষণ করার জন্য আমাদের কী পরিবর্তনগুলি দরকার?
মনস্টার এমএমআরপিজি

1
sp_BlitzIndex নির্দিষ্ট আকারের উপরে সমস্ত টেবিলের দিকে নজর দেবে। কীভাবে এটি সামঞ্জস্য করা যায় তা দেখতে আপনাকে ডকুমেন্টেশনটি দেখতে হবে।
জেরেমিয়া পেশকা

এসপি_ব্লিটজ ইন্ডেক্স কার্যকর করার জন্য প্যারামিটারগুলি এখানে রয়েছে: brentozar.com/blitzindex
জ্যাকআরবিটার

কোন ট্রিপল আপডেট?
সাইমন_উইভার

49

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

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

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

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

একটি সূচক কতটা কার্যকর তা নির্ধারণ করার জন্য আপনাকে অবশ্যই আপনার সূচি কীগুলির নির্বাচনিতা নির্ধারণ করতে হবে। মোট রেকর্ডে স্বতন্ত্র রেকর্ডের শতাংশ হিসাবে নির্বাচকতা সংজ্ঞায়িত করা যেতে পারে। আমার কাছে যদি [জন] টেবিল থাকে যাতে মোট মোট 100 টি রেকর্ড থাকে এবং [প্রথম নাম] কলামে 90 টি স্বতন্ত্র মান থাকে তবে আমরা বলতে পারি যে [প্রথম নাম] কলামটি 90% নির্বাচনী। উচ্চতর নির্বাচন, তত বেশি দক্ষ সূচক কী। নির্বাচনীকরণকে মাথায় রেখে, আপনার সর্বাধিক নির্বাচনী কলামগুলি আপনার সূচি কীতে প্রথমে রাখাই ভাল। আমার পূর্ববর্তী [ব্যক্তি] উদাহরণটি ব্যবহার করে, আমাদের যদি একটি [সর্বশেষ নাম] কলাম থাকে যা 95% নির্বাচিত ছিল? আমরা সূচি কী হিসাবে [সর্বশেষ নাম], [প্রথম নাম] দিয়ে একটি সূচক তৈরি করতে চাই।

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


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

[শেষের নাম], [প্রথম নাম] কলামগুলিতে সূচকটি কেবল তখনই ব্যবহার করা যেতে পারে যদি কোয়েরিটি সর্বশেষ নাম এবং প্রথম নামতে ফিল্টার করবে? যদি এটি কেবল প্রথম নামতে ফিল্টার করে তবে সূচকটি ব্যবহার করা গেল না, তাই না?
ম্যাজিয়ার

উত্তম উত্তর - সূচীকরণের সিদ্ধান্ত নেওয়ার সময় কার্ডিনালিটির চেয়ে নির্বাচন বাছাই বেশি গুরুত্বপূর্ণ
বিপরীত প্রকৌশলী

27

আমি সম্প্রতি ব্রেন্টওজার আনলিস্টেড http://www.brentozar.com/blitzindex/ এ লোকের কাছ থেকে একটি দুর্দান্ত ফ্রি স্ক্রিপ্ট আবিষ্কার করেছি

কোন সূচকের অস্তিত্ব রয়েছে, কতবার ব্যবহার করা হয় এবং কোয়েরি ইঞ্জিন কতবার এমন একটি সূচক সন্ধান করে যা অস্তিত্বহীন তা নিয়ে এটি কিছু ভাল বিশ্লেষণ করে।

এটি গাইডেন্স সাধারণত ভাল। কখনও কখনও এটি ধারণাগুলির কিছুটা অতিরিক্ত প্রস্তাব দেয় tive আমি এখনও অবধি সাধারণভাবে নিম্নলিখিতগুলি সম্পাদন করেছি:

  • সরানো সূচকগুলি যা কখনও পড়েনি (বা মাসে মাসে 50 বারেরও কম হতে পারে)।
  • বিদেশী কী এবং ক্ষেত্রগুলিতে সর্বাধিক সুস্পষ্ট সূচী যুক্ত হয়েছে আমি জানি আমরা প্রচুর ব্যবহার করি।

আমি সমস্ত প্রস্তাবিত সূচকগুলি যোগ করি নি, এবং এক সপ্তাহ পরে ফিরে এসেছি যে অনুসন্ধানের ইঞ্জিন পরিবর্তে অন্য কয়েকটি নতুন সূচী ব্যবহার করছে বলে তারা আর সুপারিশ করা হয়নি!

সাধারণত আপনার সূচী এড়ানো উচিত:

  • খুব ছোট টেবিল (50 থেকে 200 রেকর্ডেরও কম): প্রায়শই ইঞ্জিনটি দ্রুত হয় যদি এটি সূচকটি লোড করে, পড়তে, প্রক্রিয়াজাতকরণ ইত্যাদির চেয়ে টেবিলটি স্ক্যান করে if
  • প্রথম উল্লিখিত কলামে লো কার্ডিনালিটি ( http://en.wikedia.org/wiki/Cardinality_(SQL_statements) সহ কলামগুলিতে সূচীগুলি এড়িয়ে চলুন । উদাহরণস্বরূপ, লিঙ্গ ক্ষেত্রের ইনডেক্সিং (এম / এফ) খুব কম ব্যবহার হয়, এটি টেবিলটি স্ক্যান করতে এবং match 50% এর সাথে মিল খুঁজে পাওয়া ঠিক যেমন ব্যবহারিক। যদি সূচকে আরও নির্দিষ্ট কিছু (যেমন [জন্মের তারিখ, লিঙ্গ]) এর পরে এটি তালিকাভুক্ত করা হয় তবে এটি আরও ভাল - আপনি নির্দিষ্ট সময়ের মধ্যে সমস্ত পুরুষের জন্ম নিতে পারেন।

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

আমি কিছু টেবিল 900MB থেকে 400MB এ কমিয়েছি, কেবল কারণ এগুলি আগে থেকেই অস্ট্রাস্ট্রকের স্তূপ ছিল। http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx

পুনঃসংগঠিত / পুনর্নির্মাণ

খণ্ডিত সূচীগুলির জন্য আপনার খোঁজ করা উচিত। কিছুটা টুকরো টুকরো ঠিক আছে, অবসেসিভ হবে না! পুনর্গঠন এবং পুনর্নির্মাণের মধ্যে পার্থক্যটি জানুন http://technet.microsoft.com/en-us/library/ms189858.aspx !

নিয়মিত পর্যালোচনা

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

কতগুলো

সাম্প্রতিক একটি ভিডিওতে ব্রেন্ট সুপারিশ করেছে (সাধারণত) প্রচুর লেখার (যেমন অর্ডার টেবিল) সহ একটি টেবিলে আরও 5 টি সূচী না থাকে এবং 10 এর বেশি হয় না যদি এটি লিখিত (যেমন বিশ্লেষণের জন্য লগিং টেবিল) এর চেয়ে অনেক বেশি পড়তে হয় তবে http: / /www.youtube.com/watch?v=gOsflkQkHjg

সার্বিক

এটা নির্ভর করে!

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

আশাকরি এটা সাহায্য করবে!


14

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

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

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

আরও কৃত্রিম উত্তর হল sys.dm_db_index_usage_statsদৃষ্টিভঙ্গিটি দেখুন এবং সূচকগুলি কীভাবে ব্যবহার করা হচ্ছে তা দেখুন, তবে এটি সাধারণত অজানা কাজের চাপের উপর সাইট বিশ্লেষণ করার জন্য একটি পন্থা (যেমন সাহায্যের জন্য আহ্বানিত পরামর্শদাতাকে সম্ভবত এটি শুরু করা হবে)।


7

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

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

আরও দেখুন: অফিসিয়াল এমএস ডিএমভি ডক্স


-1

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

কয়েকটি পরিসংখ্যান প্রশ্ন রয়েছে যা জিজ্ঞাসা করে যে কত সময় নিচ্ছে। ধীরে ধীরে দিয়ে শুরু করুন। যদি ক্যোয়ারী প্রিকেটিকে কোনও সূচক না থাকে তবে একটি তৈরি করা সহায়তা করবে।

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