2016-09-23 13 views
5

हम 2.6 मिलियन रिकॉर्ड वाले तालिका में SQL Server 2008 R2 पूर्ण-पाठ खोज का उपयोग कर रहे हैं। खोज प्रदर्शन अक्सर खराब होता है, यह आमतौर पर रिपोर्ट किए गए पैटर्न का पालन करता है: ठंडा सिस्टम/पहला रन ~ 10 + सेक, बाद में चलता है ~ 1-2 सेकंड।संस्करण 2008 आर 2 के बाद से कोई एसक्यूएल सर्वर पूर्ण-पाठ खोज (एफटीएस) प्रदर्शन सुधार है?

 
Indexing speed, size and single query execution time using: 

         Lucene  MS SQL FTS 
Indexing Speed   3 MB/sec 1 MB/sec 
Index Size    10-25%  25-30% 
Simple query   < 20 ms  < 20 ms 
Query With Custom Score < 4 sec  > 20 sec 
 
Parallel Query Executions (10 threads, average execution time per query in ms): 

            MS SQL FTS Lucene (File System) Lucene (RAM) 
Cold System:   Simple Query 56   643     21 
        Boost Query  19669*  859     27 
Second executions: Simple Query 14   8      < 5 
        Boost Query  465   17      9 

*average time, the very first query could be executed up to 2 min(!) 

मेरे सवालों का:

So You Think You Can Search – Comparing Microsoft SQL Server FTS and Apache Lucene

लेख विकिपीडिया डंप डेटा का उपयोग कर निम्नलिखित गति तुलना परिणाम दिखाता है: यह निम्न आलेख फ़रवरी, 2013 की तिथि में सूचना दी परिणामों के साथ इनलाइन है हैं:

  1. चूंकि कई थे 8 फरवरी, 2013 को आलेख प्रकाशित होने के बाद से प्रमुख एसक्यूएल सर्वर रिलीज, क्या कोई भी हालिया SQL सर्वर संस्करणों (2012, 2014 और 2016) में माइग्रेट किए जाने पर समान डेटा (अधिमानतः 1+ मिलियन रिकॉर्ड) पर किसी भी एफटीएस प्रदर्शन सुधार की रिपोर्ट कर सकता है?

  2. क्या हाल ही में SQL सर्वर संस्करण रैम में रखे गए एफटीएस कैटलॉग/इंडेक्स का समर्थन करते हैं जैसे कि सोलर/ल्यूसीन करते हैं?

अद्यतन: हमारे परिदृश्य में हम शायद ही कभी एफटी सूची जुड़ा हुआ तालिका में नया डेटा सम्मिलित है, लेकिन केवल बहुत बार खोज पढ़ चला। इसलिए, मुझे नहीं लगता कि एसक्यूएल लगातार एफटीएस इंडेक्स का पुनर्निर्माण मुद्दा है।

उत्तर

1

Fulltext Search Improvements in SQL Server 2012:

हम कैसे प्रश्नों एक साझा स्कीमा अवरोध खोल करने के जारी सूचकांक अद्यतन इंतजार कर रहे हैं, जबकि, कितनी स्मृति सूचकांक टुकड़ा आबादी के दौरान आवंटित किया जाता है से ब्लॉक से पूरे कोड बेस को देखा, कैसे हम शीर्ष एन खोज क्वेरी के लिए ऑप्टिमाइज़ करने के लिए स्ट्रीमिंग टेबल वैल्यू फ़ंक्शन के रूप में क्वेरी कोड बेस को पुनर्गठित कर सकता है, हम समानांतर धागे पर खोज निष्पादित करने के लिए प्रमुख वितरण हिस्टोग्राम कैसे बनाए रख सकते हैं, इस तरीके से कि हम प्रोसेसर गणना निर्देशों का बेहतर लाभ कैसे ले सकते हैं (उदाहरण के लिए स्कोरिंग रैंक) ... अंत परिणाम यह है कि हम प्रदर्शन को काफी हद तक बढ़ावा देने में सक्षम हैं (कई मामलों में 10 एक्स जब बड़े क्वेरी वर्क के साथ समवर्ती इंडेक्स अपडेट की बात आती है oads) और किसी भी भंडारण संरचनाओं या मौजूदा एपीआई सतह को बदलने के बिना पैमाने। एसक्यूएल 2008/आर 2 से डेनाली तक जाने वाले हमारे सभी ग्राहक इस सुधार से लाभान्वित होंगे।

+0

टिप्पणी के लिए धन्यवाद, बहुत मूल्यवान जानकारी। हालांकि, मैं एक असली दुनिया के अनुभव की तलाश में था। एमएसएफटी दावों के अलावा, क्या कोई वास्तविक एफटीएस प्रदर्शन वृद्धि पर रिपोर्ट कर सकता है जब उन्होंने SQL Server 2008 R2 को हाल के संस्करणों में माइग्रेट कर दिया है? अब तक मैंने पाया है कि कई लोग एफटीएस की धीमी गति से शिकायत करते हैं, यहां तक ​​कि हाल ही में एसक्यूएल सर्वर संस्करणों (उदाहरण के लिए 2014) में भी। ऐसा लगता है कि एफटीएस के मामले में एसक्यूएल सर्वर 2005 सबसे तेज रिलीज था। – andrews

+0

डेवलपर संस्करण मुक्त हैं और एंटरप्राइज़ के समान विशेषताएं हैं। आप उन्हें परीक्षण ग्राउंड – TheGameiswar

+0

के रूप में उपयोग कर सकते हैं हमारे पास एमएस सदस्यता है। एक नया एसक्यूएल उदाहरण प्राप्त करने में कोई समस्या नहीं है।बस किस संस्करण को अपग्रेड करना है, इस पर डेटा एकत्रित करना। यदि खोज समय अब ​​जैसा रहता है, तो हम एफटीएस से सोलर तक चले जाएंगे। – andrews

0

मैं आपको SQL सर्वर एफटीएस आंतरिक में थोड़ा सा खोदने की सलाह दूंगा। यह आपको एक विचार देगा कि आपकी क्वेरी कैसे निष्पादित की जाती है और यदि यह आपके लिए काम करती है या नहीं। मैं यहां से शुरू करने का सुझाव देता हूं: https://technet.microsoft.com/en-us/library/ms142505(v=sql.105).aspx और यहां: https://msdn.microsoft.com/ru-ru/library/cc721269.aspx। आंतरिक रूप से एफटीएस टेबल और इंडेक्स का उपयोग करता है। उनके सभी लाभ और कमियों के साथ। तो, किसी अन्य तालिका की तरह, यदि उस आंतरिक तालिका का डेटा बफर पूल में नहीं है, तो SQL सर्वर डिस्क से रैम तक पढ़ेगा। एक बार राम में डेटा, यह रैम से पढ़ा जाएगा।

+0

डेनिस, लिंक के लिए धन्यवाद। लेकिन मेरे प्रश्न में मैंने जो लेख जोड़ा है उसे देखें। लेख में कहा गया है कि सोलर/ल्यूसीन विशेष रूप से राम में इंडेक्स स्थान का समर्थन करते हैं और सोलर इंडेक्स रैम में होने पर भी ठंडे प्रश्नों के साथ प्रदर्शन वृद्धि को देखते हैं, जबकि SQL सर्वर को इसका समर्थन नहीं करना कहा जाता है। मैं जानना चाहता था कि एसक्यूएल सर्वर एफटीएस में हालिया रिलीज में यह विशिष्ट सुविधा है या नहीं, सामान्य इंडेक्स कैशिंग को गिनती नहीं है जो डिफ़ॉल्ट रूप से करता है। – andrews

+0

@andrews, हाँ, यही वह है जो मैं तनाव देना चाहता था, यह कथन: "SQL सर्वर डिस्क का उपयोग करें, ल्यूसीन रैम का उपयोग करें", गलत है। यदि आपके पास 32 जीबी रैम है, लेकिन आपकी अनुक्रमणिका 64 जीबी है, वैसे भी, आप इसे पूरी तरह से रैम में नहीं रख सकते हैं, न तो SQL सर्वर का उपयोग कर सकते हैं, न ही लुसीन। –

+0

@andrews SQL सर्वर FTS केवल टेबल का एक सेट है जो FTS क्वेरी पर उपयोगकर्ता तालिकाओं के साथ जुड़ गया है। किसी भी अन्य तालिका की तरह एफटीएस डेटा केवल रैम से पढ़ा जा सकता है, इसलिए SQL सर्वर को आवश्यक डेटा लेना चाहिए और इसे क्लाइंट को भेजना चाहिए। यदि यह पर्याप्त रैम है, तो वह डेटा रैम में रहेगा। यह मौजूदा संबंधपरक तंत्र का कुछ प्रकार का पुन: उपयोग है जो काफी कुशल हैं। –

संबंधित मुद्दे