Microsoft distribuie Microsoft SQL Server 2008 Service Pack 1 (SP1) sau SQL 2008 R2 remedieri ca un fișier descărcabil. Deoarece remedierile sunt cumulative, fiecare lansare nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu SQL Server 2008 SP1 anterior sau SQL 2008 R2 fix release.
Simptome
Luați în considerare următorul scenariu:
-
În Microsoft SQL Server 2008 sau SQL Server 2008 R2, efectuați o interogare împotriva unei anumite coloane dintr-un tabel care are mai multe rânduri. Interogarea are un predicat care conține o clauză WHERE.
-
Termenul pe care îl utilizați pentru Predicatul conține conține un cuvânt. Cuvântul apare în unele coloane care sunt incluse într-un index text complet al tabelului.
În acest scenariu, interogarea durează mult timp pentru a compila. De exemplu, această problemă poate apărea atunci când se execută următoarea interogare:
SELECT count(*)FROM dbo.MyLargeTable whereCONTAINS (email_address, '"name@contoso.com"')
Note
-
Să presupunem că ". com" apare în unele coloane care sunt incluse într-un index text complet al tabelului.
-
Puteți urmări timpul de compilare al interogării pentru a determina dacă întâmpinați această problemă. Pentru instrucțiuni detaliate despre cum să urmăriți timpul de compilare, consultați secțiunea "mai multe informații".
Cauză
Această problemă se produce din cauza unei erori în logica de estimare cardinality pentru indexurile de text complet. În acest caz, o scanare a mai multor coloane care conțin un cuvânt care se întâmplă frecvent se efectuează înainte de îngustarea domeniului de căutare pentru coloanele așteptate.
Rezolvare
Informații despre actualizarea cumulativă
SQL Server 2008 Service Pack 2
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 4 pentru SQL Server 2008 Service Pack 2. Pentru mai multe informații despre acest pachet de actualizare cumulativă, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2527180 Pachetul de actualizare cumulativă 4 pentru SQL Server 2008 Service Pack 2Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 fix release. Microsoft recomandă să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2402659 SQL Server 2008 construiește care au fost lansate după ce s-a lansat SQL Server 2008 Service Pack 2 Sunt create remedieri rapide Microsoft SQL Server 2008 pentru anumite pachete de servicii SQL Server. Trebuie să aplicați o remediere rapidă SQL Server 2008 Service Pack 2 la o instalare de SQL Server 2008 Service Pack 2. În mod implicit, orice remediere rapidă furnizată într-un pachet de servicii SQL Server este inclusă în următorul pachet de servicii SQL Server.Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 13. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă pentru SQL Server 2008 SP1, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2497673 Pachetul de actualizare cumulativă 13 pentru SQL Server 2008 Service Pack 1 Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 SP1 remediată. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
970365 SQL Server 2008 construiește care au fost lansate după ce s-a lansat SQL Server 2008 Service Pack 1
SQL Server 2008 R2 Service Pack 1
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 1 pentru SQL Server 2008 R2 Service Pack 1. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2544793 Pachetul de actualizare cumulativă 1 pentru SQL Server 2008 R2 Service Pack 1Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 R2 remediată. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2567616 SQL Server 2008 R2 construiește care au fost lansate după ce s-a lansat SQL Server 2008 R2 Service Pack 1
SQL Server 2008 R2
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 7. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă pentru SQL Server 2008 R2, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2507770 Pachetul de actualizare cumulativă 7 pentru SQL Server 2008 R2 Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 R2 remediată. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
981356 SQL Server 2008 R2 construiește care au fost lansate după ce s-a lansat SQL Server 2008 R2
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.
Soluție de evitare
Pentru a evita această problemă, utilizați una dintre metodele următoare:
-
Utilizați * pentru a include toate coloanele din căutare în loc de o coloană. Acest lucru modifică câte rânduri sunt evaluate efectiv înainte ca textul complet integrat să își compileze estimarea cardinalității. De exemplu, rulează următoarea interogare:
SELECT count(*) FROM dbo.MyLargeTabel where CONTAINS (*, '"test@contoso.com"')
-
Faceți ca Word să se producă frecvent un cuvânt oprire utilizând o instrucțiune ALTER FULLTEXT STOPLIST. Pentru mai multe informații despre instrucțiunea ALTER FULLTEXT STOPLIST pentru Transact-SQL, vizitați următorul site Web Microsoft Developer Network (MSDN): informații generale despre instrucțiunea ALTER fulltext STOPLIST pentru Transact-SQL
Mai multe informații
Pentru a urmări timpul de compilare al interogării, urmați acești pași:
-
Capturați o urmă SQL Profiler atunci când se execută interogarea. Pentru a face acest lucru, monitorizați TSQL: BatchCompleted și TSQL: StmtCompleted Events sau RPC: finalizat și SP: StmtCompleted Events.
-
Rețineți ora CPU a lotului și timpul pentru CPU.
-
Scădeți timpul de CPU al declarației din timpul CPU pentru lot. Rezultatul indică timpul CPU care este necesar pentru a analiza și a compila lotul.
Pentru mai multe informații despre cum să utilizați un predicat conține pentru Transact-SQL, vizitați următorul site Web Microsoft Development Network (MSDN):