|
|
Postitatud 21.05.2018 13:55:48
|
|
|

Viimase kahe päeva jooksul olen sattunud üsna frustreeriva probleemiga – SQL Server 2012 päringuanalüsaatoris täidetakse umbes 120 reaga salvestatud protseduur, Kiirus on väga ideaalne ning umbes 500 andmekirjet saab filtreerida ja salvestada vähem kui ühe sekundiga. Kuid kui C# programmikoodis kutsutakse, kuvatakse ühenduse aeg. Sea CommandTimeout 300-le ja selle kuvamine võtab umbes 3 minutit. Kontrollisin koodi mitu korda ja ei leidnud ühtegi viga. Probleem jääb alles.
Põhjusanalüüs: 1. Sest päringuanalüsaatori täitmiskiirus on kiire ja andmemaht ei ole suur. 2. Ainult programmis kõne on aeglane. 3. Sea CommandTimeout parameeter ja tulemus saab kuvada, kuid see võtab kaua aega.
Kokkuvõttes järeldatakse esialgselt, et probleem peitub C# koodis. Kuid pärast ülevaatust ei olnud mingit kasu.
Vaata seda infot Baidus. Lõpuks leidsin sarnase infopostituse CSDN foorumist. Üks netikasutajatest ütles vastuses: "Võimalik, et rakendusplaan on aegunud." See äratas mind unenäos tõeliselt.
Teosta kohe päringuanalüsaatoril:
Testisin programmi uuesti, seekord lõpuks töötas. Kiirus on väga rahuldav.
Põhjusanalüüs: Kuna salvestatud protseduurid on eelkompileeritud, genereeritakse täitmisplaan esimesel täitmisel ning seda täitmisplaani kasutatakse järgmistel täitmistel (välja arvatud juhul, kui salvestatud protseduuri on määratud ümberkompileerimiseks), mitte ei genereerita täitmisplaan iga kord, kui see on täidetud. Kui salvestatud protseduuris osalevat objektistruktuuri muudetakse või seotud andmed muutuvad oluliselt, mis võib muuta algse plaani sobimatuks praeguse olukorra (täitmisplaani aegumine) jaoks, tuleks salvestatud protseduur uuesti kompileerida.
Lõpuks lisa salvestatud protseduuri kood:
|
Eelmine:Jaga ühte APP promotsioonilehte koodiallikat, adaptiivne, väga ilus ja helde!Järgmine:C# avatud lähtekoodiga raamistik (kordustrükk)
|