SQL सर्वर पूर्ण-पाठ अनुक्रमणिका को सक्षम करने के बाद क्वेरीज़ को धीमा करें


10

मेरे पास अपने डेटाबेस के खिलाफ चल रहे प्रश्नों को सम्मिलित करने, अपडेट करने और हटाने के लिए एक asp.net वेबसाइट है।

कुछ दिनों पहले मैं तालिकाओं में से एक के दो स्तंभों पर एक पूर्ण-पाठ सूचकांक बनाता हूं। उसके बाद मैंने महसूस किया कि जब वेबसाइट उस टेबल पर अपडेट क्वेरीज़ चलाती है, तो SQL सर्वर प्रोसेस की मेमोरी और डिस्क का उपयोग उछल जाता है और अपडेट धीमा हो जाता है। पूर्ण-पाठ अनुक्रमणिका बनाने से पहले प्रश्न बिना किसी प्रदर्शन समस्या के चलते थे।

मुझे यह भी पता चला है कि अद्यतन क्वेरी जो पहले बहुत सरल थीं, अब जटिल हैं, क्योंकि निष्पादन योजना में अब पूर्ण पाठ सूचकांक अपडेट जैसी चीजें हैं। यह एक नई निष्पादन योजना का एक हिस्सा है जो पूर्ण-पाठ को सक्षम करने के बाद जटिल हो गया:

यहाँ छवि विवरण दर्ज करें

कुछ घंटों में जब मैं साइट की सामग्री को अपडेट करता हूं, तो मैंने 5000 अपडेट क्वेरी को चलाया और मुझे लगता है कि प्रत्येक पंक्ति के लिए हर बार पूर्ण पाठ अनुक्रमण प्रक्रिया की जाती है।

क्या मुझे पंक्तियों को अपडेट करने की शुरुआत में पूर्ण पाठ स्कैनिंग को अक्षम करना चाहिए और फिर इसे सक्षम करना चाहिए ( इस संबंधित प्रश्न में )?

क्या मैं 5 मिनट के लिए पूर्ण पाठ अनुक्रमण को रोकने के लिए SQL सर्वर को बता सकता हूं और फिर नए डेटा को अनुक्रमित करना शुरू कर सकता हूं?

क्या कोई बेहतर विकल्प है? मैं SQL Server 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}

निर्दिष्ट करता है कि पूर्ण-पाठ अनुक्रमणिका द्वारा कवर किए गए तालिका स्तंभों में किए गए परिवर्तन (अपडेट, डिलीट, या इंसर्ट) SQL सर्वर द्वारा पूर्ण-पाठ सूचकांक में प्रचारित किए जाएंगे। डेटा पूर्ण-पाठ अनुक्रमणिका के माध्यम से बदलता है WRITETEXTऔर UPDATETEXTपरिलक्षित नहीं होता है, और परिवर्तन ट्रैकिंग के साथ नहीं उठाया जाता है।

ALTER FULLTEXT INDEX (Transact-SQL) के लिए Microsoft दस्तावेज़ देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.