KB2344600 - REMEDIERE: Eroarea "Programator fără randament" poate apărea atunci când utilizați funcția CONTAINSTABLE împreună cu mai multe predicate OR și AND în SQL Server 2008 sau în SQL Server 2008 R2

Se aplică la
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Workgroup SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup

Microsoft distribuie remedierile Microsoft SQL Server 2008 ca fișier unic ce se poate descărca. Deoarece remedierile sunt cumulative, fiecare ediție nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu remedierea anterioară a SQL Server 2008. Microsoft distribuie remedierile Microsoft SQL Server 2008 sau SQL Server 2008 R2 ca fișier unic ce poate fi descărcat. Deoarece remedierile sunt cumulative, fiecare ediție nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu lansarea anterioară de remedieri pentru SQL Server 2008 sau SQL Server 2008 R2.

Simptome

Luați în considerare următorul scenariu:

  • Aveți o interogare de căutare în text complet care utilizează funcția CONTAINSTABLE împreună cu mai multe predicate OR și AND din condiția din Microsoft SQL Server 2008 sau SQL Server 2008 R2. De exemplu, aveți următoarele 50 de operațiuni AND: Declare @Keywords varchar(4000) = NULL

    setați @Keywords= N'((((((((((((((((((((((((((((((((((((((((((((((((((((
    ("TOKarchitect" OR "architectural")
    AND ("TOKengineer" OR "engineer"))
    AND "gineer") AND ("TOKmecanic" OR "mecanic"))
    AND ("TOKengineer" OR "Engineering"))
    AND ("TOKelectronic" OR "Electronics")) AND ("TOKengineer" OR "Engineer")) AND ("TOKelectronic" OR "Electronics")) AND ("TOKengineer" OR "Engineering")) AND ("TOKelectric" OR "Electrical")) AND ("TOKengineer" OR "Engineer")) AND ("TOKelectric" OR "Electrical")) AND ("TOKengineer" OR "Engineering")) AND ("TOKcontrol" OR "Control")) AND ("TOKsystem" OR "Systems")) AND ("TOKengineer" OR "Engineer")) AND ("TOKproject" OR "Project")) AND ("TOKmanager" OR "Manager")) AND ("TOKengineer" OR "Inginerie")) AND "Schemă") AND ("TOKmanufacture" OR "Manufacturing")) AND ("TOKengineer" OR "Engineer")) AND ("TOKmetallurgist" OR "Metalurgy")) AND ("TOKmetallurgist" OR "Metalurgist")) AND ("TOKprocess" OR "Process")) AND ("TOKTechnology" OR "Technology")) AND ("TOKproduct" OR "Production")) AND ("TOKengineer" OR "Engineer")) AND ("TOKuality" OR "Quality")) AND ("TOKengineer" OR "Engineer")) AND ("TOKuality" OR "Quality")) AND ("TOKcontrol" OR "Control")) AND ("TOKengineer" OR "Inginer")) AND ("TOKengineer" OR "Calitate")) AND ("TOKengineer" OR "Inginer")) AND ("TOKengineer" OR "Inginer")) AND ("TOKengineer" OR "Inginer")) AND ("TOKuality" OR "Calitate")) AND ("TOKcontrol" OR "Control")) AND ("TOKengineer" OR "Inginerie")) "Inginer")) AND "Mecatronics") AND ("TOKcivil" OR "Civil")) AND ("TOKengineer" OR "Engineer")) AND ("TOKcivil" OR "Civil")) AND ("TOKengineer" OR "Engineering")) AND ("TOKdesign" OR "Design")) AND ("TOKengineer" OR "Engineering")) AND ("TOKdesign" OR "Design")) AND ("TOKengineer" OR "Engineer")) AND ("TOKgraduate" OR "Graduate")) AND ("TOKengineer" OR "Engineer")) AND ("TOKgraduate" OR "Graduate")) AND ("TOKengineer" OR "engineering")) AND ("TOKengineer" OR "Engineering")) AND ("TOKengineer" OR "Engineering")) AND ("TOKgraduate" OR ("TOKgraduate" OR "Absolvent")) AND ") ANDNOT (") AND ("TOKRecruitment" OR "Recrutare")) AND ("TOKconsultant" OR "consultant")) AND ("TOKtrainee" OR "trainee")) AND ("TOKRecruitment" OR "recruitment"))'

    select * from CONTAINSTABLE(test_table, *, @keywords, 1000)

  • Dvs. executați interogarea.

În acest scenariu, poate apărea o eroare "Programator care nu cedează". În plus, un fișier mini-dump este generat în folderul jurnal de aplicație SQL Server 2008 sau SQL Server 2008 R2 și următoarea eroare este înregistrată în fișierul jurnal de erori SQL Server:

Notă

<Server de mărci> de timp care utilizează versiunea "dbghelp.dll" 4.0.5"

<Server marcaj> de timp ***Nu se poate obține contextul firului pentru spid 0
<Server marcaj> temporal *
*******************************************************************************

<Server marcaj> temporal *

<Server marcaj> de timp * ÎNCEPEȚI DUMPUL STIVEI:

<Time Stamp> Server * <Time> spid <SPID>
<Server marcaj> temporal *

<Time Stamp> Server * Non-yielding Scheduler

<Server marcaj> temporal *

<Server marcaj> temporal *
*******************************************************************************

<Marcaj> temporal Server stack Semnătura pentru dump este 0x000000000000030D

<Server de marcaj> temporal Cod de retur proces de dump extern 0x20000001. Procesul de dump extern nu a returnat erori.

<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 62 ms, utilizator 75187 ms. Utilizarea procesului 98%. Sistem inactiv 0%. Interval: 76403 ms.

<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 125 ms, utilizator 145250 ms. Utilizarea procesului 98%. Sistem inactiv 0%. Interval: 148417 ms.

<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 171 ms, utilizator 205515 ms. Utilizarea procesului 98%. Sistem inactiv 0%. Interval: 209729 ms.

<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 218 ms, utilizator 266343 ms. Utilizarea procesului 98%. Sistem inactiv 0%. Interval: 271588 ms.

<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 234 ms, utilizator 325156 ms. Utilizarea procesului 97%. Sistem inactiv 0%. Interval: 333671 ms.
<Marcaj> temporal Proces server 0:0:0 (0xf94) Lucrătorul 0x00000000817481A0 pare să nu cedeze în Programatorul 0. Ora creării firului: 12925321224306. Approx Thread CPU utilizat: kernel 296 ms, utilizator 386000 ms. Utilizarea procesului 97%. Sistem inactiv 0%. Interval: 396370 ms.

Cauză

Această problemă apare deoarece SQL Server 2008 sau SQL Server 2008 R2 nu lansează corect un planificator.

Rezolvare

Informații despre actualizarea cumulativă

SQL Server 2008 R2

Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 5. Pentru mai multe informații despre cum să obțineți acest pachet de actualizări cumulative 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:

2438347 Actualizare cumulativă pachetul 5 pentru SQL Server 2008 R2 Notă Deoarece compilările sunt cumulative, fiecare remediere nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în versiunea anterioară de remedieri SQL Server 2008 R2. Vă recomandăm să luați în considerare aplicarea celei mai recente remedieri 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 Compilările SQL Server 2008 R2 care au fost lansate după lansarea SQL Server 2008 R2

SQL Server 2008 Service Pack 1

Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 10 pentru SQL Server 2008 Service Pack 1. Pentru informații suplimentare despre acest pachet de actualizări cumulative, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:

2279604 Pachetul de actualizare cumulativă 10 pentru pachetul Service Pack SQL Server 2008 1Notă Deoarece compilările sunt cumulative, fiecare remediere nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în remedierea anterioară SQL Server 2008. Microsoft vă recomandă să luați în considerare aplicarea celei mai recente remedieri 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 Compilările SQL Server 2008 care au fost lansate după lansarea SQL Server 2008 Service Pack 1 Remedierile rapide Microsoft SQL Server 2008 sunt create pentru anumite pachete Service Pack SQL Server. Trebuie să aplicați o remediere rapidă SQL Server 2008 Service Pack 1 la o instalare SQL Server 2008 Service Pack 1. În mod implicit, orice remediere rapidă furnizată într-un pachet Service Pack SQL Server este inclusă în următorul pachet Service Pack SQL Server.

SQL Server 2008 Service Pack 2

Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 1 pentru SQL Server 2008 Service Pack 2. Pentru informații suplimentare despre acest pachet de actualizări cumulative, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:

2289254 Actualizarea cumulativă 1 pentru SQL Server 2008 Service Pack 2Notă Deoarece compilările sunt cumulative, fiecare remediere nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în remedierea anterioară de SQL Server 2008. Vă recomandăm să luați în considerare aplicarea celei mai recente remedieri 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 Compilările SQL Server 2008 care au fost lansate după lansarea SQL Server 2008 Service Pack 2

Soluție

Pentru a rezolva această problemă, utilizați un lexicon de căutare în text complet pentru a defini sinonimele predicatului.

Pentru a face acest lucru, utilizați funcția FORMSOF împreună cu valoarea THESAURUS și apoi adăugați toate cuvintele cheie ca parametri.

Pentru exemplul descris în secțiunea "Simptome", următoarea este o versiune actualizată a interogării eșantion: Selectați * din test_table unde Contains(*,'FORMSOF (THESAURUS,"architectural","inginer","Mecanic","Inginerie","Electronică","Inginer","Electric","Control","Sisteme","Proiect","Manager","Producție","Metalurgie","Metalurgist","Proces","Proiectare","Tehnologie","Producție","Calitate","Control","Civil","Absolvent","Recrutare","consultant","stagiar" ,"recrutare")')

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.

Referințe

Pentru mai multe informații despre funcția CONTAINSTABLE, vizitați următorul site web Rețea Microsoft pentru dezvoltatori (MSDN):

Informații generale despre funcția CONTAINSTABLE Pentru informații suplimentare despre modelul incremental de service pentru SQL Server, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:

935897 Un model incremental de service este disponibil de la echipa SQL Server pentru a livra remedieri rapide pentru problemele raportate

Pentru mai multe informații despre schema de denumire pentru actualizările SQL Server, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:

822499 Schemă de denumire nouă pentru pachetele de actualizări software Microsoft SQL Server Pentru mai multe informații despre terminologia actualizării de software, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:

824684 Descrierea terminologiei standard care este utilizată pentru a descrie actualizările de software Microsoft