2016-09-23 21 views
5

SQL Server 2008 R2 Tam Metin Araması'nı 2.6 milyon kayıt içeren bir tablo üzerinde kullanıyoruz. Arama performansı genellikle zayıftır, yaygın olarak bildirilen paterni takip eder: soğuk sistem/ilk çalıştırma ~ 10 + sn, sonraki 1-2 saniyede çalışır.Sürüm 2008 R2'den bu yana Sql Server Tam Metin Araması (FTS) performansında iyileştirmeler var mı?

 
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(!) 

Sorularım:

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

makale Vikipedi veri dökümü kullanarak aşağıdaki hız karşılaştırması sonuçlarını gösterir: Bu Feb 2013 tarihli aşağıdaki makalede bildirilen sonuçlarla paralel olacak olan Bunlar:

  1. Birkaç tane olduğundan Makalenin 8 Şubat 2013'te yayınlanmasından bu yana büyük SQL Server sürümleri, daha yeni SQL Server sürümlerine (2012, 2014 ve 2016) taşındıklarında herhangi bir FTS performans iyileştirmesini aynı verilere (tercihen 1 milyondan fazla kayıt) bildirebilir mi?

  2. Daha yeni SQL Server sürümleri, solr/lucene gibi RAM'e yerleştirilen FTS kataloglarını/dizinlerini destekliyor mu?

GÜNCELLEME: bizim senaryoda nadiren FT katalog bağlantılı tabloya yeni veri eklemek, ama sadece çok sık arar okumak çalıştırın. Yani, SQL sürekli FTS indeksi yeniden inşallah olduğunu düşünüyorum.

cevap

1

Fulltext Search Improvements in SQL Server 2012:

Biz endeks parçası nüfus sırasında tahsis ne kadar bellek dan, paylaşılan bir şema kilidi açabilir devam eden endeks güncellemesi beklerken sorgular engellemek nasıl kadar tüm kod tabanı baktı

, nasıl biz sorgu kod tabanını TOP N arama sorguları için optimize etmek için bir akış Tablosu Değer İşlevi olarak yeniden düzenleyebilir, paralel işlemcilerde aramayı yürütmek için anahtar dağıtım histogramlarını nasıl tutabileceğimizi, işlemci hesaplama talimatlarının daha iyi avantajlarından nasıl yararlanabileceğimize kadar örneğin puanlama)… Sonuç olarak, performansı büyük ölçüde artırabiliyoruz (birçok durumda 10X, büyük sorgu çalışmalarıyla eşzamanlı dizin güncellemeleri söz konusu olduğunda herhangi bir depolama yapısını veya mevcut API yüzeyini değiştirmek zorunda kalmadan ölçekler ve ölçek. SQL 2008/R2'den Denali'ye giden tüm müşterilerimiz bu iyileştirme ile faydalanacak.

+0

Yorumlarınız için teşekkür ederiz, çok değerli bilgiler. Ancak, gerçek dünya deneyimleri arıyordum. MSFT hak taleplerine ek olarak, birileri SQL Server 2008 R2'den daha yeni sürümlere geçiş yaptığında gerçek FTS performans artışını rapor edebilir mi? Şimdiye kadar birçok insan daha yeni SQL Server sürümlerinde (örneğin 2014) bile FTS yavaşlığından şikayetçi buldum. SQL Server 2005, FTS açısından en hızlı sürüm olarak görünüyor. – andrews

+0

geliştirici sürümleri ücretsizdir ve kurumsal olarak aynı özelliklere sahiptir. Bunları – TheGameiswar

+0

test alanı olarak kullanabilirsiniz, bizde ms aboneliği var. Yeni bir sql örneğini almak sorun değil.Sadece hangi sürüme yükseltileceğine dair veri topluyoruz. Arama süresi şimdi olduğu gibi kalırsa, FTS'den solr'a geçeceğiz. – andrews

0

SQL Server FTS ınternals'larına biraz kazmanızı tavsiye ederim. Bu, sorgunuzun nasıl yürütüldüğüne dair bir fikir verecektir ve eğer bu sizin için işe yarayıp yaramadıysa. Buradan başlayalım: https://technet.microsoft.com/en-us/library/ms142505(v=sql.105).aspx ve burada: https://msdn.microsoft.com/ru-ru/library/cc721269.aspx. Dahili olarak FTS, tablolar ve dizinler kullanır. Tüm faydaları ve dezavantajları ile. Yani, diğer bir tablo gibi, bu iç tablonun verileri Arabellek Havuzunda değilse, SQL Server diskten RAM'e okur. RAM'deki veriler bir kez, RAM'den okunacaktır.

+0

Denis, bağlantılar için teşekkürler. Ama soruma bağlandığım makaleye bakın. Makale, Solr/Lucene'nin, RAM'de Index konumunu özel olarak desteklediğini ve SQL Server'ın bunu desteklemediği söylenirken, Solr dizininin RAM'de kaldığında bile, soğuk sorgularda bile performans artışının fark edildiğini belirtiyor. SQL Server FTS'nin son sürümlerde bu özel özelliğe sahip olup olmadığını bilmek istedim, varsayılan olarak önbelleğe almayı normal dizin önbelleğe almayı değil. – andrews

+0

@andrews, evet, vurgulamak istediğim şey buydu: "SQL Server disk kullan, Lucene RAM kullan", yanlış. Eğer 32 GB'lık bir ramınız varsa, ancak endeksiniz 64 GB ise, RAM'i tamamen kullanamazsınız, ne SQL Server'ı ne de Lucene'yi kullanamazsınız. –

+0

@andrews SQL Server FTS, FTS sorgusunda kullanıcı tablolarıyla birleştirilen bir dizi tablodur. Diğer herhangi bir tablo gibi FTS verileri sadece RAM'den okunabilir, bu yüzden SQL Server gerekli verileri RAM'e götürmeli ve istemciye göndermelidir. Yeterli RAM ise, tüm bu veriler RAM'de kalacaktır. Bu, oldukça etkili olan mevcut ilişkisel mekanizmaların bir çeşit yeniden kullanılmasıdır. –