আমি পুনর্নির্মাণ এবং সবকিছু পুনর্নির্মাণের পরে কেন আমার ডাটাবেসটি খণ্ডিত?


41

আমার একটি ডাটাবেস রয়েছে যা আমি এই টি-এসকিউএল চালিয়ে একবারে সমস্ত টেবিলকে ডিফ্র্যাগমেন্ট করার চেষ্টা করেছি:

SELECT 
        'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) +
        'ALTER INDEX all ON ' + name + ' REBUILD;'
    FROM sys.tables

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

আমার এখনও খণ্ডন আছে তা নির্ধারণ করতে আমি এটি চালিয়েছি:

SELECT * FROM 
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) 
WHERE avg_fragmentation_in_percent > 0

এবং আমি পেয়েছি:

database_id object_id   index_id    partition_number    index_type_desc alloc_unit_type_desc    index_depth index_level avg_fragmentation_in_percent    fragment_count  avg_fragment_size_in_pages  page_count  avg_page_space_used_in_percent  record_count    ghost_record_count  version_ghost_record_count  min_record_size_in_bytes    max_record_size_in_bytes    avg_record_size_in_bytes    forwarded_record_count  compressed_page_count
85  171147655   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   36.3636363636364    5   2.2 11  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  421576540   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   75  7   1.14285714285714    8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  965578478   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   14.7058823529412    6   5.66666666666667    34  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1061578820  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   40  4   1.25    5   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1109578991  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   30.7692307692308    5   2.6 13  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1205579333  2   1   NONCLUSTERED INDEX  IN_ROW_DATA 2   0   50  5   1.6 8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1493580359  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   50  6   1.66666666666667    10  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

আমি জানি আমি আসল কিছু অনুপস্থিত, তবে আমি কী জানি না।


আপনি কি ত্রুটি পেয়েছি? এছাড়াও একই জিনিসটিকে পুনর্গঠিত এবং পুনর্নির্মাণ করার কোনও কারণ আছে কি?
শন মেল্টন

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

উত্তর:


38

টেবিলগুলি ছোট আপনার সারণীতে পৃষ্ঠা গণনাগুলি হ'ল:

11, 8, 6, 5, 13, 8, 10

তারা মোট 480kb দখল করে। আপত্তিজনকভাবে যথেষ্ট আক্ষরিক কিছুই নেই।

সম্পাদনা করুন: এটি আরও কিছুটা ব্যাখ্যা দেয়।

একটি নতুন টেবিল বা সূচক সাধারণত অভিন্ন মাত্রার চেয়ে মিশ্র থেকে প্রথম 8 পৃষ্ঠাগুলি বরাদ্দ করা হয়। সুতরাং, প্রথম 8 পৃষ্ঠাগুলির প্রত্যেকটির পক্ষে বিভিন্ন মিশ্র এক্সটেন্টগুলি থেকে বরাদ্দ করা সম্ভব। 8 পৃষ্ঠাগুলি গ্রাহক একটি টেবিল বা সূচীতে 8 টি টুকরা থাকতে পারে, 8 টি বিভিন্ন মিশ্র এক্সেন্টেন্টগুলির প্রতিটিতে 1 টি।

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


ঠিক আছে, এটি সন্তোষজনক যদি না অন্য কারও কাছে উত্তর থাকে তবে আমি আপনাকে সঠিক হিসাবে চিহ্নিত করব।
জাস্টিন ডিয়ারিং

3
+1 মার্কের সাথে একমত যখন আপনার কাছে কিছু ডেটা থাকবে তখন খণ্ডিত হওয়ার বিষয়ে চিন্তা করুন। :-)
অ্যারন বারট্র্যান্ড

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

3
এটি এমন নয় যে এটি পারে না, তবে এটি কেন বিরক্ত করবে? এটি করা I / O এর উপর কোনও প্রভাব ফেলবে না - বিশেষত যেহেতু এই ছোট টেবিলগুলি যাইহোক মেমরিতে থাকার গ্যারান্টিযুক্ত।
অ্যারন বারট্র্যান্ড

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

19

" মাইক্রোসফ্ট এসকিউএল সার্ভার 2000 সূচক ডিফ্রেগেশনেশন সেরা অভ্যাসগুলি " থেকে উদ্ধৃতি :

"বিভাজন ডিস্ক আই / ওকে প্রভাবিত করে। সুতরাং, বৃহত্তর সূচীগুলিতে ফোকাস করুন কারণ তাদের পৃষ্ঠাগুলি এসকিউএল সার্ভার দ্বারা ক্যাশে হওয়ার সম্ভাবনা কম less সূচকের আকার সম্পর্কে ধারণা পেতে ডিবিসিসি শ্যাওকন্টিগ দ্বারা রিপোর্ট করা পৃষ্ঠা গণনাটি ব্যবহার করুন (প্রতিটি পৃষ্ঠা হ'ল ৮ কেবি আকারে) সাধারণভাবে, আপনার এক হাজারেরও কম পৃষ্ঠাগুলির সূচকগুলির টুকরো টুকরো করার বিষয়টি নিয়ে উদ্বিগ্ন হওয়া উচিত নয় the পরীক্ষায়, 10,000 টিরও বেশি পৃষ্ঠাগুলিযুক্ত সূচকগুলি উল্লেখযোগ্যভাবে আরও পৃষ্ঠা সহ সূচীতে সর্বাধিক লাভ অর্জন করে (বৃহত্তর) 50,000 পৃষ্ঠাগুলির চেয়ে বেশি)

সুতরাং এই জাতীয় আপনার প্রশ্নের উত্তর দেয় এবং মার্ক এবং হারুনের উত্তরগুলিকে সমর্থন করে।

আপনি ব্রেন্ট ওজারের নিম্নলিখিত নিবন্ধগুলিতে সূচি বিভাজন সম্পর্কে ভাল তথ্য পেতে পারেন:

এছাড়াও..একটি সূচকে সাধারণভাবে (বিভাজন সম্পর্কিত সমস্যাগুলি সম্পর্কে) এক বিশাল সমুদ্রের সন্ধান পাওয়া যায় কিম্বার্লি ট্রিপের ব্লগে


12

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

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'ALTER INDEX all ON ' + name + ' REBUILD;
    ' FROM sys.tables;

PRINT @sql; -- to see the first 8,000 characters and make sure it checks out
-- EXEC sp_executesql @sql;

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