পূর্ণ-পাঠ্য সূচী রক্ষণাবেক্ষণের জন্য গাইডলাইন


29

পূর্ণ-পাঠ্য সূচি বজায় রাখার জন্য কোন নির্দেশিকা বিবেচনা করা উচিত?

আমি পুনর্নির্মাণের বা পূর্ণ টেক্সট ক্যাটালগ (দেখুন পুনঃসংগঠিত করা উচিত BOL )? একটি যুক্তিসঙ্গত রক্ষণাবেক্ষণ ক্যাডেন্স কি? রক্ষণাবেক্ষণ কখন প্রয়োজন হয় তা নির্ধারণ করতে কোন হিউরিস্টিকস (10% এবং 30% খণ্ড প্রান্তিকের অনুরূপ) ব্যবহার করা যেতে পারে?

(নীচের সমস্ত কিছু কেবলমাত্র অতিরিক্ত তথ্যের সাথে প্রশ্নটি বিস্তারিতভাবে বর্ণনা করা এবং আমি এ পর্যন্ত কী সম্পর্কে ভেবেছি তা দেখানো হয়))



অতিরিক্ত তথ্য: আমার প্রাথমিক গবেষণা

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

নেই মাইক্রোসফট ডকুমেন্টেশন যে বেস টেবিলের বি-গাছ সূচক defragmenting এবং তারপর পূর্ণ পাঠ্য ক্যাটালগ উপর একটি পুনঃসংগঠিত করণ পারফরম্যান্সের উন্নতি করতে পারে যে উল্লেখ, কিন্তু এটা কোন নির্দিষ্ট সুপারিশক্রমে স্পর্শ করে না।

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

অতিরিক্ত তথ্য: মৌলিক কর্মক্ষমতা পরীক্ষা করা

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

এখানে চিত্র বর্ণনা লিখুন

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

অতিরিক্ত তথ্য: প্রাথমিক ধারণা

আমি একটি রাত্রি বা সাপ্তাহিক টাস্ক তৈরি করার কথা ভাবছি। দেখে মনে হচ্ছে যে এই কাজটি একটি পুনর্নির্মাণ বা পুনর্গঠন করতে পারে।

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

উত্তর:


36

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


রক্ষণাবেক্ষণ কখন প্রয়োজন হয় তা নির্ধারণ করার জন্য আমাদের তাত্ত্বিক

এখানে চিত্র বর্ণনা লিখুন

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

এই অন্বেষণের সময়, আমরা দেখতে পেয়েছিলাম যে সিস্টেমের ক্যাটালগটি কোনও প্রদত্ত পূর্ণ-পাঠ্য সূচকে কীভাবে খণ্ডগুলিতে বিভক্ত করা হয় সে সম্পর্কে অনেক তথ্য সরবরাহ করে। তবে, কোনও অফিসিয়াল "ফ্র্যাগমেন্টেশন%" গণনা করা হয়নি (যেমন sys.dm_db_index_physical_stats এর মাধ্যমে বি-ট্রি ইনডেক্সের জন্য রয়েছে )। পূর্ণ-পাঠ্য খণ্ডের তথ্যের ভিত্তিতে, আমরা আমাদের নিজস্ব "পূর্ণ-পাঠ্য খণ্ড%" গণনা করার সিদ্ধান্ত নিয়েছি। এরপরে আমরা ডেভ সার্ভারটি বারবার 100 থেকে 25,000 সারিগুলির মধ্যে যে কোনও জায়গায় উত্পাদন ডেটার জন্য এক মিলিয়ন সারি কপিতে বারবার এলোমেলো আপডেট করতে, পূর্ণ-পাঠ্য খণ্ড রেকর্ড করতে এবং ব্যবহার করে একটি বেঞ্চমার্ক পূর্ণ-পাঠ্য ক্যোয়ারী সম্পাদন করতে ব্যবহার করি CONTAINSTABLE

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

এখানে চিত্র বর্ণনা লিখুন


রক্ষণাবেক্ষণ পরিকল্পনা

প্রতিটি পূর্ণ-পাঠ্য সূচকের জন্য একটি বিভাজন% গণনা করার জন্য আমরা নিম্নলিখিত কোডটি ব্যবহার করার সিদ্ধান্ত নিয়েছি। কমপক্ষে 10% বিভক্তকরণ সহ তুচ্ছ আকারের কোনও পূর্ণ-পাঠ্য সূচীগুলিকে আমাদের ওভার-নাইট রক্ষণাবেক্ষণ দ্বারা পুনর্নির্মাণের জন্য পতাকাঙ্কিত করা হবে।

-- Compute fragmentation information for all full-text indexes on the database
SELECT c.fulltext_catalog_id, c.name AS fulltext_catalog_name, i.change_tracking_state,
    i.object_id, OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) AS object_name,
    f.num_fragments, f.fulltext_mb, f.largest_fragment_mb,
    100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0) AS fulltext_fragmentation_in_percent
INTO #fulltextFragmentationDetails
FROM sys.fulltext_catalogs c
JOIN sys.fulltext_indexes i
    ON i.fulltext_catalog_id = c.fulltext_catalog_id
JOIN (
    -- Compute fragment data for each table with a full-text index
    SELECT table_id,
        COUNT(*) AS num_fragments,
        CONVERT(DECIMAL(9,2), SUM(data_size/(1024.*1024.))) AS fulltext_mb,
        CONVERT(DECIMAL(9,2), MAX(data_size/(1024.*1024.))) AS largest_fragment_mb
    FROM sys.fulltext_index_fragments
    GROUP BY table_id
) f
    ON f.table_id = i.object_id

-- Apply a basic heuristic to determine any full-text indexes that are "too fragmented"
-- We have chosen the 10% threshold based on performance benchmarking on our own data
-- Our over-night maintenance will then drop and re-create any such indexes
SELECT *
FROM #fulltextFragmentationDetails
WHERE fulltext_fragmentation_in_percent >= 10
    AND fulltext_mb >= 1 -- No need to bother with indexes of trivial size

এই অনুসন্ধানগুলি নীচের মত ফলাফল দেয় এবং এই ক্ষেত্রে সারি 1, 6 এবং 9 সারিগুলি সর্বোত্তম পারফরম্যান্সের জন্য খুব খণ্ডিত হিসাবে চিহ্নিত হবে কারণ পূর্ণ-পাঠ্য সূচী 1MB এর ওপরে এবং কমপক্ষে 10% খণ্ডিত হয়েছে।

এখানে চিত্র বর্ণনা লিখুন


রক্ষণাবেক্ষণ

আমাদের ইতিমধ্যে একটি রাতের রক্ষণাবেক্ষণ উইন্ডো রয়েছে, এবং খণ্ডের গণনা গণনা করা খুব সস্তা to সুতরাং আমরা প্রতি রাতে এই চেকটি চালিয়ে যাব এবং তারপরে 10% খণ্ডের দ্বারপ্রান্তের উপর ভিত্তি করে কেবলমাত্র একটি পূর্ণ-পাঠ্য সূচী পুনর্নির্মাণের আরও ব্যয়বহুল ক্রিয়াকলাপটি সম্পাদন করব।


পুনর্নির্মাণ বনাম পুনঃনির্মাণ বনাম ড্রপ / তৈরি করুন

এসকিউএল সার্ভার অফার করে REBUILDএবং REORGANIZEবিকল্পগুলি দেয়, তবে সেগুলি সম্পূর্ণরূপে কেবলমাত্র একটি পূর্ণ-পাঠ্য ক্যাটালগের জন্য উপলব্ধ (যাতে কোনও সংখ্যক পূর্ণ-পাঠ্য সূচী থাকতে পারে)) উত্তরাধিকারগত কারণে, আমাদের কাছে একটি একক পূর্ণ-পাঠ্য ক্যাটালগ রয়েছে যাতে আমাদের সমস্ত পূর্ণ-পাঠ্য সূচী রয়েছে। সুতরাং, আমরা এর পরিবর্তে পৃথক পূর্ণ-পাঠ্য সূচী স্তরে ( DROP FULLTEXT INDEX) এবং তারপরে ( ) পুনরায় তৈরি করতে CREATE FULLTEXT INDEXবেছে নিয়েছি।

যৌক্তিক উপায়ে সম্পূর্ণ পাঠ্য সূচীগুলি পৃথক ক্যাটালগগুলিতে ভেঙে এর REBUILDপরিবর্তে সঞ্চালন করা আরও আদর্শ হতে পারে তবে এর মধ্যে ড্রপ / তৈরি সমাধানটি আমাদের জন্য কাজ করবে।

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