আমি কখন সূচকগুলি পুনর্নির্মাণ করব?


56

আমার রিলেশনাল ডাটাবেসে (এসকিউএল সার্ভার) সূচিগুলি পুনর্নির্মাণ করা উচিত?

নিয়মিত ভিত্তিতে সূচকগুলি পুনর্নির্মাণের জন্য কোনও মামলা আছে?


উত্তর:


41

আমার উত্তরের দিক থেকে খুব সাধারণ হওয়ার ঝুঁকিতে, আমি বলব যে আপনার নিয়মিত একটি সূচক রক্ষণাবেক্ষণ প্রক্রিয়া চালানো উচিত। তবে আপনার সূচক রক্ষণাবেক্ষণ প্রক্রিয়াটি কেবলমাত্র সূচকগুলিকে পুনর্নির্মাণ / পুনর্গঠিত করা উচিত যা বিশেষত এটির জন্য প্রয়োজন।

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

এসকিউএল সার্ভারের পক্ষে কথা বলছি, আমি সূচির আকার এবং সূচি বিভাজন স্তরটি বেছে নেওয়ার প্রবণতা করি যা আমি সূচক রক্ষণাবেক্ষণ সম্পাদন শুরু করি। যদি একটি সূচীতে 100 পৃষ্ঠারও কম থাকে তবে আমি কোনও রক্ষণাবেক্ষণ করব না।

যদি একটি সূচক 10% থেকে 30% খণ্ডিত হয় তবে আমি REORGANIZEসূচি এবং UPDATEপরিসংখ্যানগুলি করব। যদি কোনও সূচকটি 30% এর বেশি খণ্ডিত হয়, তবে আমি REBUILDসূচকটি করব - না UPDATE STATISTICS, কারণ এটি এর দ্বারা যত্ন নেওয়া হয় REBUILD। মনে রাখবেন যে একটি পুনর্নির্মাণ কেবল সূচকগুলির সাথে সরাসরি যুক্ত পরিসংখ্যান অবজেক্টকে আপডেট করে। অন্যান্য কলামের পরিসংখ্যান পৃথকভাবে বজায় রাখা প্রয়োজন।

এই উত্তরটি বলতে সত্যিই কেবল দীর্ঘ পথ: হ্যাঁ, আপনার রুটিন সূচক রক্ষণাবেক্ষণ করা উচিত, তবে কেবল সূচকগুলিতে যা এটি প্রয়োজন।


19

আমার রিলেশনাল ডাটাবেসে সূচীগুলি পুনঃনির্মাণ করা উচিত (উদাঃ এসকিউএল সার্ভার)?

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

নিয়মিত ভিত্তিতে সূচকগুলি পুনর্নির্মাণের জন্য কোনও মামলা আছে?

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

টম কিট , এই ক্লাসিক জিজ্ঞাসা টম থ্রেডে সুপারিশ করেছে:

সূচী পুনর্নির্মাণগুলির মধ্যে সময়ের ব্যবধান প্রায় চিরকাল হওয়া উচিত।

...

কীভাবে এটি আরও ভাল বলা যায় তা জানেন না - সূচকটি অতিরিক্ত স্থান সহ বড় এবং মোটা হতে চায়। এটি আপনার আপডেট হওয়া কলামে রয়েছে - সূচীতে প্রবেশের সূচকে স্থান থেকে অন্য স্থানে নিয়ে যাওয়া। একদিন সারিটির "A" কোড রয়েছে, পরের দিন কোডটি "G", তারপরে "জেড" তারপরে "এইচ" ইত্যাদি। সুতরাং সারিটির সূচকের এন্ট্রি সূচীতে স্থান থেকে অন্য স্থানে চলে যায়। এটি যেমন করে তেমন স্থান প্রয়োজন - ইচ্ছাশক্তি, যদি স্থানটি না থাকে তবে আমরা ব্লকটিকে দুটি ভাগে ভাগ করে দেব - এবং স্থান তৈরি করব। এখন সূচকটি মোটা হচ্ছে। সময়ের সাথে সাথে সূচকটি 2-3x আকারে শুরু হয়েছিল যখন আপনি শুরু করেছিলেন এবং "অর্ধ বা আরও খালি" কিন্তু আপনি ঠিক সারি সরিয়ে নিয়ে যাওয়ার পরে এটি ঠিক আছে। এখন যখন আমরা সারিগুলি চারদিকে ঘুরিয়ে নিই, ঘর তৈরির জন্য আমাদের আর ব্লকগুলি বিভক্ত করতে হবে না - ঘরটি ইতিমধ্যে উপলব্ধ।

তারপরে আপনি আসেন এবং পুনর্নির্মাণ করুন বা ছেড়ে দিন এবং সূচিটি পুনরায় তৈরি করুন (যার একই প্রভাব রয়েছে - কেবল পুনর্নির্মাণটি "নিরাপদ" - সূচকটি হারাতে পারে না এবং সূচকটি পুনর্নির্মাণের ফলে দ্রুত হতে পারে) সারণী স্ক্যান করার পরিবর্তে বিদ্যমান সূচকটি স্ক্যান করা এবং একটি নতুন সূচি বাছাই এবং তৈরি করা)। এখন, সেই দুর্দান্ত জায়গার সব শেষ হয়ে গেছে। আমরা আবারও ব্লকগুলি বিভক্ত করার প্রক্রিয়াটি শুরু করি - আমাদের যেখানেই শুরু হয়েছিল সেখানে আমাদের ফিরে পাওয়া।

আপনি কোনও স্থান সংরক্ষণ করেন নি।

সূচকটি ঠিক ঠিক ঠিক আবার ফিরে এসেছিল।

আপনি পুনরায় এটি পুনর্নির্মাণের জন্য আপনার সময় নষ্ট করবেন আপনি এই দুষ্কৃত চক্রটি পুনরায় পুনরায় তৈরি করার কারণ হবেন।

এখানে যুক্তিটি দুর্দান্ত, তবে এটি একটি পঠন-ভারী লোড প্রোফাইলের বিরুদ্ধে পক্ষপাতদুষ্ট।

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

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


11

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


প্রিয় পাঠকদের কাছে কেবল একটি এফওয়াইআই যে এসকিউএলফুলের স্ক্রিপ্টটি> 5 বছরে আপডেট করা হয়নি তাই এটি যখন কাজ করে তখন এটি নতুনতম ঘণ্টা এবং শিসগুলি অন্তর্ভুক্ত না করে।
লোলিডিবিএ

আসলে, আমি বিশ্বাস করি যে আমি শেষবার যখন সাইটটি পরীক্ষা করেছিলাম (এখন এটি পৌঁছাতে পারে না (ভাল চিহ্ন হতে পারে না)), মিশেল আর এসকিউএল সার্ভারে সক্রিয়ভাবে কাজ করছিলেন না, এবং স্ক্রিপ্টে আরও কাজ করার কোনও সক্রিয় উদ্দেশ্য ছিল না had । যদি এটি আপনার জন্য কাজ করে, দুর্দান্ত! নতুন ইনস্টলেশনগুলির জন্য, ওলা হাল্লেংরেনের স্ক্রিপ্টগুলি বিবেচনা করুন : আমি উভয়ই ব্যবহার করেছি এবং এটি কোনও কঠিন স্থানান্তর নয়।
আরডিফোজ

7

ম্যাট এম থেকে গৃহীত উত্তরে উল্লিখিত হিসাবে, থাম্বের একটি সাধারণ নিয়ম হ'ল 30% এর বেশি খণ্ডিত সূচকগুলি পুনরায় তৈরি করা উচিত।

এই কোয়েরিটি আপনাকে 30% এর বেশি খণ্ডিত (কতগুলি আপনার যখন রয়েছে তখন আপনাকে সেগুলি পুনর্নির্মাণ করা উচিত) কতগুলি সূচিযুক্ত তা খুঁজে পেতে সহায়তা করবে:

SELECT DB_NAME() AS DBName,
       OBJECT_NAME(ind.object_id) AS TableName,
       ind.name AS IndexName,
       indexstats.index_type_desc AS IndexType,
       indexstats.avg_fragmentation_in_percent,
       indexstats.fragment_count,
       indexstats.avg_fragment_size_in_pages,
       SUM(p.rows) AS Rows 
  FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
         INNER JOIN sys.indexes AS ind ON (    ind.object_id = indexstats.object_id
                                           AND ind.index_id = indexstats.index_id)
         INNER JOIN sys.partitions AS p ON (    ind.object_id = p.object_id
                                            AND ind.index_id = p.index_id)
 WHERE indexstats.avg_fragmentation_in_percent > 30
 GROUP BY
       OBJECT_NAME(ind.object_id),
       ind.name,
       indexstats.index_type_desc,
       indexstats.avg_fragmentation_in_percent,
       indexstats.fragment_count,
       indexstats.avg_fragment_size_in_pages 
 ORDER BY indexstats.avg_fragmentation_in_percent DESC

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


2
@ লাউলিডিবিএ - এটি কিছুটা সংক্ষিপ্ত হতে পারে তবে আমার মনে হয় এটি প্রশ্নের উত্তর দেয় এবং আলোচনার জন্য দরকারী কিছু সরবরাহ করে। কীভাবে তা ব্যাখ্যা করার জন্য আমি এটি কিছুটা প্রসারিত করেছি। আমন্ডা - আমার সম্পাদনাটি যদি খুব বেশি ভুল বলে মনে হয় তবে দয়া করে এটিকে আবার ঘোরান!
আরডিফোজ

আপনাকে আরডিফোজ ধন্যবাদ ভাল লাগছে। হ্যাঁ, 30% এর বেশি খণ্ডিত পুনর্নির্মাণের সময় is
আমন্ডামডডক্স 3

5

আমি কখন সূচকগুলি পুনর্নির্মাণ করব?

যখন সূচক বিভাজন শতাংশ 30% এর বেশি হয়।

নিয়মিত ভিত্তিতে সূচকগুলি পুনর্নির্মাণের জন্য কোনও মামলা আছে?

এরকম কোনও ঘটনা নেই, তবে সাধারণভাবে সপ্তাহের একবারে সপ্তাহান্তে সূচকের রক্ষণাবেক্ষণ করা পরিবেশকে স্থিতিশীল রাখার সেরা অনুশীলন।

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

https://ola.hallengren.com/

নোট: অনুগ্রহ করে পুনর্নির্মাণের পরে পরিসংখ্যান আপডেট করতে ভুলবেন না, কারণ সূচি পুনর্নির্মাণ সমস্ত পরিসংখ্যান আপডেট করে না।


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

1

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

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

একটি যুক্তি রয়েছে যে টুকরো টুকরো টুকরো করা আপনার সার্ভারে কোনও তাত্পর্য ফেলবে না, তাই নিয়মিত করা কি আদৌ উপযুক্ত?

https://www.brentozar.com/archive/2017/12/index-maintenance-madness/

http://brentozar.com/go/defrag

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