সূচনা থেকে সূচনা বা যখন পারফরম্যান্স সমস্যা দেখা দেয়?


15

আমার প্রশ্ন সূচকের ব্যবহার সম্পর্কিত।

  1. আমার শুরু থেকেই ঠিক সূচি শুরু করা উচিত বা যখন পারফরম্যান্সের সমস্যা দেখা দেয়?

  2. আমরা কোয়েরি চালানোর সময় অস্থায়ী সূচিও তৈরি করতে পারি। এই জাতীয় কৌশলগুলির পক্ষে কি কি?

উত্তর:


17

আমার শুরু থেকেই ঠিক সূচি শুরু করা উচিত বা যখন পারফরম্যান্সের সমস্যা দেখা দেয়?

ব্যবহারের ধরণগুলি প্রকাশের সাথে সাথে সূচকের কৌশলটি বিকশিত হয়। এটি বলেছিল, এমন কৌশল এবং নকশার নির্দেশিকাও রয়েছে যা সামনে প্রয়োগ করা যেতে পারে।

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

  • আপনার প্রাথমিক এবং অন্যান্য অনন্য সীমাবদ্ধতা তৈরি করুন । এগুলি অনন্য সূচী দ্বারা প্রয়োগ করা হবে।

  • আপনার বিদেশী কী এবং সম্পর্কিত নন-ক্লাস্টারযুক্ত সূচকগুলি তৈরি করুন । বিদেশী কীগুলি হ'ল আপনার সর্বাধিক ঘন ঘন রেফারেন্সযুক্ত কলামগুলিতে যোগদান করা, তাই শুরু থেকেই এগুলি সূচী করুন।

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

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

অনুপস্থিত সূচক ডিএমভি এবং এসএসএমএসের ইঙ্গিতগুলি থেকে গাইডেন্সের ফলে এসকিউএল সার্ভার চেনাশোনাগুলিতে একটি অস্বাভাবিক সমস্যা অতিমাত্রায় নয়। এই সরঞ্জামগুলির কোনওটিই বিদ্যমান সূচকগুলি মূল্যায়ন করে না এবং আনন্দের সাথে পরামর্শ দিবে যে আপনি বিদ্যমান 5 টি কলাম সূচীতে একটি একক কলাম যুক্ত করার পরিবর্তে একটি নতুন 6 কলাম সূচক তৈরি করবেন।

-- If you have this
CREATE NONCLUSTERED INDEX [IX_MyTable_MyIndex] ON [dbo].[MyTable] 
(
    [col1] ASC
    , [col2] ASC
    , [col3] ASC
    , [col4] ASC
    , [col5] ASC
)

-- But your query would benefit from the addition of a column
CREATE NONCLUSTERED INDEX [IX_MyTable_MyIndex] ON [dbo].[MyTable] 
(
    [col1] ASC
    , [col2] ASC
    , [col3] ASC
    , [col4] ASC
    , [col5] ASC
    , [col6] ASC
)

-- SSMS will suggest you create this instead
CREATE NONCLUSTERED INDEX [IX_MyTable_AnotherIndexWithTheSameColumnsAsTheExistingIndexPlusCol6] ON [dbo].[MyTable] 
(
    [col1] ASC
    , [col2] ASC
    , [col3] ASC
    , [col4] ASC
    , [col5] ASC
    , [col6] ASC
)

কিম্বারলি ট্রিপকে ইনডেক্সিং কৌশল সম্পর্কিত কিছু দুর্দান্ত উপাদান রয়েছে যা এসকিউএল ফোকাস করার সময় অন্যান্য প্ল্যাটফর্মের ক্ষেত্রে প্রযোজ্য। এসকিউএল সার্ভার লোকের জন্য, উপরের উদাহরণের মতো সদৃশ সনাক্তকরণের জন্য কয়েকটি কার্যকর সরঞ্জাম রয়েছে

আমরা কোয়েরি চালানোর সময় অস্থায়ী সূচিও তৈরি করতে পারি। এই জাতীয় কৌশলগুলির পক্ষে কি কি?

এটি সাধারণত খুব কমই চালিত ক্যোয়ারির জন্য প্রযোজ্য হয়, সাধারণত ইটিএল। আপনার মূল্যায়ন করা দরকার:

  1. সূচী তৈরি করতে সময় কি ক্যোয়ারির সম্পাদনের সময়কে হ্রাস করে?
  2. সূচীটি রেখে দেওয়ার রক্ষণাবেক্ষণের ওভারহেডের দরকার পড়ার সময় তৈরি / ড্রপ করার সময়টি অতিক্রম করে।

3
+1 ক্লাস্টারিং কী, বৈদেশিক কী, স্বতন্ত্র / প্রাথমিক কী, এবং অনুপস্থিত সূচক ডিএমভিগুলির মুখের মূল্যে বিশ্বাস না করা ... এই সমস্ত কিছুই দুর্দান্ত পরামর্শ। এসকিউএল সার্ভারে বিদ্যমান সূচীগুলির সাথে লেনদেন করা sys.dm_db_index_usage_stats DMV ব্যবহার করে নিরীক্ষণ করা বেশ সহজ। সময়ের সাথে সাথে, আপনি এমন সূচিগুলি তালিকাভুক্ত করতে পারেন যা স্ক্যান করা হয়নি বা এর বিপরীতে অনুসন্ধান করা হয়নি, একই সাথে এই একই সূচকগুলি বেশ কয়েকবার আপডেট হয়েছে seeing এটি overindexing এর সূচক।
ম্যাট এম

1
+1, তবে 'যে কোনও স্পষ্টতই উচ্চ নির্বাচিত প্রশ্নের জন্য সূচক তৈরি করুন।' অন্যান্য সমস্ত পরিস্থিতিতে কভার করে না। সূচিগুলি ফলাফলগুলি বাছাইয়ে সহায়তা করতে পারে যদি আপনার প্রশ্নগুলি উচ্চতর নির্বাচনী নাও হয়। তারা যদি নির্বাচিত সমস্ত কলাম কভার করে তবে তারা প্রশ্নের গতি বাড়িয়ে দিতে পারে।
অবাস্তব

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

8

উভয় পদ্ধতির সাথে সত্যই যুক্ত ঝুঁকি রয়েছে:

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

আপনাকে সূচিগুলি আর ব্যবহার করা হচ্ছে না এবং তাদের চেষ্টা করে মুছে ফেলার জন্য নিজেকে শৃঙ্খলাবদ্ধ করতে হবে (পোস্টগ্রিএসকিউএল এটি করতে পারে; দুর্ভাগ্যক্রমে মাইএসকিউএল তুলনা করে বাক্সের বাইরে খুব দুর্বল))

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

আপনি যে ঝুঁকিটি প্রবর্তন করেছেন তা হ'ল আপনার সূচকের দরকার পড়ার সময় এবং কখন এটি যুক্ত করতে হবে তার মধ্যে আপনার পর্যাপ্ত পরিমাণের উইন্ডো নেই।

পোস্টগ্রিএসকিউএল বিল্ডিং ইনডেক্সগুলিকে সমর্থন করে CONCURRENTLYযা এই হঠাৎ-সূচক-অ্যাড-প্রয়োজনীয়তা থেকে কিছুটা চাপ হ্রাস করে, তবে ম্যানুয়ালটিতে কিছু ক্যাভেট উল্লেখ করা আছে।


বিকল্প (খ) আমার পছন্দ হিসাবে বিবেচনা করে তবে আমি মনে করি উভয় বিকল্পের একটি সংকর সম্ভবত সেরা সমাধান। এটি আপনার আত্মবিশ্বাসের স্তরের সাথে সম্পর্কিত যা আপনি ভাবেন যে কোনও সূচক আসলে ব্যবহৃত হবে কিনা।

এটিকে একটি জটিল আলোচনা করে তোলে এটি হ'ল সাধারণত সূচকগুলি পরিবর্তন করা সহজ তবে স্কিমা পরিবর্তন করা শক্ত। বেপরোয়া হওয়ার অজুহাত হিসাবে আমি খ এর বিলম্বিত প্রতিক্রিয়াটিকে প্রচার করতে চাই না ।


4

মার্ক এর উত্তর ছাড়াও

প্রত্যাশিত পরিমাণে বাস্তবসম্মত পরীক্ষার ডেটা রেখে আপনি একটি অনুভূতি পেতে পারেন। আমি অনেকগুলি, অনেকগুলি (খুব বেশি) কেস দেখেছি যেখানে 1000 সারি দিয়ে কোনও ক্যোয়ারী ঠিক আছে তবে মিলিয়ন উত্পাদনে নয়।

যদি আপনি পারেন তবে প্রযোজনার অনুলিপি পরে কাজ করুন,

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

অস্থায়ী সূচী? ETL লোড নিদর্শনগুলির বাইরে, যদি একবার তাদের প্রয়োজন হয় তবে তাদের আবার প্রয়োজন হবে। ভুলে যাবেন না: একটি সূচক তৈরি / ড্রপ একটি লিখন এবং লগ হয় = আরও বেশি লোড


3

কিছু জিনিস যুক্ত করতে।

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

এটি আমার পদ্ধতির

  1. মার্কের মতো, সূচিগুলি তৈরি করুন যেখানে তারা বোঝায় but
  2. নতুন সূচকগুলি তৈরি করতে পারফরম্যান্সটি ধীর হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে না। আপনি যখনই নতুন এসকিউএল লেখেন, একটি ক্যোয়ারী প্ল্যান চালান (পছন্দসই আপনার প্রোড ডাটাবেসের বিরুদ্ধে)। নতুন সূচকের প্রয়োজন আছে কিনা তা আপনার দেখতে সক্ষম হওয়া উচিত।
  3. অবাস্তব কলামগুলির জন্য যেখানে ক্লজ রাখতে > 0বা > ""আপনার যেখানে থাকতে ভয় পাবেন না ।

    1. অর্থাৎ, আপনাকে বলি যে আপনি এ, বি, সি এবং ডি তে সূচি রেখেছেন তবে আপনার কাছে কেবল এ, বি, ডি তথ্য রয়েছে। আপনি করতে পারবেন না এমন কোনও কারণ নেই-
    select * from blah 
    where A="one" 
    and B="two" 
    and C>=""     --to match index
    and D="four"
    
    --This will use your existing index. No need to create a redundant one.

আরেকটি বিষয়, এটি "ডিবিএ" ফোরামে রয়েছে তবে সূচী তৈরির বিষয়টি সত্যই বিকাশের দায়িত্ব হওয়া উচিত, ডিবিএর নয়। (সে ক্ষেত্রে যেখানে তারা সম্পূর্ণ পৃথক
are

2
সূচি দ্বারা গৃহীত স্থান সম্পর্কিত আপনার বক্তব্যটি কিছুটা বিভ্রান্তিমূলক, একটি ক্লাস্টারযুক্ত সূচীতে খুব কম ওভারহেড রয়েছে is আপনি যদি সেই সময়ে কোনও প্রশ্ন পোস্ট করতে পারেন তবে এটি আরও অনুসন্ধানের জন্য মূল্যবান হবে। দ্বিতীয়ত, আমি একমত নই যে সূচক তৈরি করা বিকাশকারীর ডোমেন। এটি সেই ক্ষেত্রগুলির মধ্যে একটি যেখানে বিকাশকারী এবং ডিবিএর মধ্যে সহযোগিতা সেরা ফলাফল দিতে পারে of
মার্ক স্টোরী-স্মিথ

1
আমি আপনাকে আমাদের সারণির একটি উদাহরণ দেব। টেবিলের আকার: 21052404 কেবি। এই টেবিলটিতে একটি নন-ক্লাস্টারড ইনডেক্সের আকার: 6637470 কেবি। খুব কম ওভারহেড? আমি মনে করি না. আরও, আমি বলছি না যে ডিবিএগুলির সাথে সহযোগিতা করা উচিত নয়, আমি বলছি যে কোনও নতুন সূচি তৈরি করা দরকার কিনা তা নির্ধারণ করার জন্য এটি বিকাশকারীর দায়িত্ব হওয়া উচিত। তাদের এসকিউএল লেখা উচিত নয় এবং ডাবাসকে তাদের নিজেরাই এটি নির্ধারণ করার আশা করা উচিত।
ব্যবহারকারী 606723

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

টাচ। কীটি হ'ল একটি [সাংখ্যিক (24), চর, তারিখ] এবং এনসি কলামগুলি হ'ল [তারিখ, সংখ্যাসূচক (24)]। (এই নির্দিষ্ট সূচকে মাত্র দুটি কলাম)।
ব্যবহারকারী 606723

2

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

এটি শুরুতে অনুমানের কাজ হবে তবে সময় মতো আপনার যথাযথ ব্যবহারের পরিসংখ্যান থাকায় আপনার একটি পরিষ্কার চিত্র হবে।

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