Sümptomid
Oletagem, et kasutate Microsoft SQL Server 2012 või Microsoft SQL Server 2014 kirjakooste replikatsiooni. Sünkroonimise protsessi käigus teeb ühendatud agent seansis uue põlvkonna. Kui mingil põhjusel, näiteks tupik või ajalõpp, on valitud põlvkond, mis on tupik ohver, ja tehing on tagasi pööratud, võib olla suur kett, mille blokeerimise MSinternal_makegeneration_inprog rakenduse lukk eelseisval põlvkonnal ning mida varem mainitud seanss kuvatakse pea blokeerija.
Põhjus
Protsessi loomise tagamiseks kasutatav rakenduse lukk on seansi taseme rakenduse lukk. Kui loomise protsessi käigus tuvastatakse tupik, pööratakse ainult kannet tagasi, kuid seanssi pole sisse logitud. Seansi taseme rakenduse lukustuse vabastamiseks peab seanss olema välja logitud. Seetõttu, kui esimese põlvkonna loomine nurjub tupikMSinternal_makegeneration_inprog , ei väljastata toimingu tagasipööramise ajal tõrke tõttu uuesti loogikat (seanssi ei logita välja ajal, kui loomisest ilmnes tõrge). Selle tulemusena blokeeritakse lukustamise taotluste lukustamine eelseisva põlvkonna protsessi käigus. Peablokeerija kuvatakse esimese põlvkonna taotlusena, mis ei ole tupik. Enne käigultparandust kustutab SQL Server ainult eduka põlvkonna loomise protsessi lukustuse. Kui tupik juhtub, jätab see orvuks seansi rakenduse lukustuse enne seansi väljalogimist.
Lahendus
See probleem parandati esmakordselt SQL serveri järgmises koondvärskenduses.
Kumulatiivne Update 5 SQL Server 2014 /en-us/help/3011055
Kumulatiivne värskendus 3 SQL Server 2012 SP2 jaoks /en-us/help/3002049
Iga uus koondvärskenduses SQL Server sisaldab kõiki käigultparandused ja kõik turvaparandusi, mis kuulusid eelmise koondvärskenduse. Vaadake SQL serveri kumulatiivseid värskendusi.
Olek
Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.