KB2952444 - FIX: halb jõudlus, kui kasutate tabelimuutujaid SQL Server 2012 või SQL Server 2014

Rakenduskoht
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Web SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Sümptomid

Kui asustate mitme reaga tabelimuutuja ja seejärel ühendate selle teiste tabelitega, võib päringu optimeerija valida ebaefektiivse päringuplaani, mis võib põhjustada päringute jõudluse aeglustumist.

Lahendus

Pärast selle kiirparanduse rakendamist saate sisse lülitada jälituslipu 2453, et lubada tabelimuutujal käivitada ümber kompileerimine, kui muudetakse piisavalt palju ridu. See võib lubada päringu optimeerijal valida tõhusama plaani.

Probleem lahendati esmalt järgmistes SQL Server koondvärskenduses või/ja hoolduspakettides.

SQL Server 2014 koondvärskendus 3 /en-us/help/2984923

Teave SQL Server koondvärskenduste kohta

Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Vaadake uusimaid SQL Server koondvärskendusi.

      

hoolduspakett 2 SQL Server 2012 jaoks

Teave SQL Server hoolduspakettide kohta

Hoolduspaketid on kumulatiivsed. Iga uus hoolduspakett sisaldab kõiki varasemates hoolduspakettides sisalduvaid parandusi koos uute parandustega. Meie soovitus on rakendada selle hoolduspaketi jaoks uusim hoolduspakett ja uusim koondvärskendus. Te ei pea enne uusima hoolduspaketi installimist installima eelmist hoolduspaketti. Uusima hoolduspaketi ja uusima koondvärskenduse kohta lisateabe saamiseks kasutage järgmises artiklis toodud tabelit 1.

SQL Server ja selle komponentide versiooni, väljaande ja värskenduse taseme määratlemine
      

Veel teavet

Kui kasutate tabelimuutujat paketis või protseduuris, kompileeritakse ja optimeeritakse päring tabelimuutuja algse tühja oleku jaoks. Kui sellel tabelimuutujal on käitusajal palju ridu, ei pruugi eel kompileeritud päringuplaan enam optimaalne olla. Näiteks võib päring ühendada pesastatud tsükliga tabelimuutuja, kuna see on tavaliselt tõhusam väikeste ridade jaoks. See päringuplaan võib olla ebaefektiivne, kui tabelimuutujal on miljoneid ridu. Räsiliitmine võib sellises olukorras olla parem valik. Uue päringuplaani saamiseks tuleb see uuesti kompileerida. Erinevalt muudest kasutajate või ajutistest tabelitest ei käivita tabelimuutuja ridade arvu muutus päringu ümber kompileerimist. Tavaliselt saate selle probleemi lahendada funktsiooniga OPTION (RECOMPILE), millel on oma kulud.
Jälituslipp 2453 võimaldab kasutada päringu kompileerimist ilma suvandita (RECOMPILE). See jälituslipp erineb funktsioonist OPTION (RECOMPILE) kahes põhiaspektis.
(1) See kasutab sama ridade loendamise läve nagu muud tabelid. Erinevalt funktsioonist OPTION (RECOMPILE) ei pea päring iga käivitamise jaoks kompileerima. See käivitaks kompileerimist ainult siis, kui ridade arvu muutus ületab eelmääratletud läve.
(2) OPTION (RECOMPILE) sunnib päringut pisileerima parameetreid ja optimeerima päringut nende jaoks. See jälituslipp ei jõusta parameetri pisilutamist.

Pange tähele, et see jälituse lipp peab käitusajal olema sees. Seda jälituslipu ei saa funktsiooniga QUERYTRACEON kasutada. Seda jälitusteabe lippu tuleb kasutada ettevaatlikult, kuna see võib suurendada päringute ümber kompileerimise arvu, mis võib parema päringu optimeerimise korral maksma minna rohkem kui kokkuhoid.

Olek

Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.