এসকিউএল সার্ভার পূর্ণ-পাঠ্য সূচি সক্ষম করার পরে ক্যোয়ারী আপডেট করুন Update


10

আমার একটি ডেটাবেস বিরুদ্ধে অনেকগুলি sertোকানো, আপডেট করা এবং মুছতে মুছতে একটি এসপ নেট ওয়েবসাইট রয়েছে।

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

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

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

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

সারিগুলি আপডেট করার শুরুতে আমি কি পুরো পাঠ্য স্ক্যানিংটি অক্ষম করব এবং তারপরে এটি পুনরায় সক্ষম করব ( এই সম্পর্কিত প্রশ্ন হিসাবে )?

আমি কি এসকিউএল সার্ভারকে 5 মিনিটের জন্য পুরো পাঠ্য সূচি বন্ধ করতে এবং তারপরে নতুন ডেটা ইনডেক্সিং শুরু করতে পারি?

এর চেয়ে ভাল বিকল্প আর কি আছে? আমি এসকিউএল সার্ভার 2012 ব্যবহার করছি।

উত্তর:


2

আমার ক্ষেত্রে আমাকে একটি অপ্রয়োজনীয় আপডেটের বিবৃতি পরিবর্তন করতে হয়েছিল:

আগে:

UPDATE Customer 
SET Rating = 'Not Rated'
WHERE ...

পরে:

UPDATE Customer
SET Rating = 'Not Rated'
WHERE ...
AND Rating <> 'Not Rated' -- THIS LINE WAS INSERTED

এই 4 মিনিট থেকে 5 সেকেন্ডে পারফরম্যান্স উন্নত করেছে। সমস্যাটি হ'ল আমি সমস্ত সারি আপডেট করতে ব্যবহার করেছিলাম, এমনকি যদি তাদের কাছে ইতিমধ্যে আমি যে মূল্য নির্ধারণ করতে চাইতাম তাও ছিল।


1

যদি আপনি এটি বন্ধ করে দেন (এটি অক্ষম করুন) তবে সূচিটি এটি ব্যবহার করে প্রশ্নের জন্য উপলব্ধ হবে না।

তবে, আপনি ম্যানুয়ালটিতে পরিবর্তন ট্র্যাকিং সেট করতে পারেন:

--disable automatic change tracking
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING MANUAL
GO

--run the update statement here

--re-enable automatical change tracking after updating it to reflect the recent changes
ALTER FULLTEXT INDEX schema.table START UPDATE POPULATION
GO
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING AUTO
GO

আপনি এই প্রশ্নের সাথে বর্তমান মানটি পরীক্ষা করতে পারেন:

SELECT TOP(10) change_tracking_state_desc, * 
FROM sys.fulltext_indexes 
WHERE object_name(object_id) = '...';

বৈধ বিকল্পগুলি হ'ল: SET CHANGE_TRACKING {MANUAL | AUTO | OFF}

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

অল্টার ফুলটেক্সট ইন্ডেক্স (লেনদেন-এসকিউএল) এর জন্য মাইক্রোসফ্ট ডকুমেন্টেশন দেখুন ।

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