|
|
Zveřejněno 21.05.2018 13:55:48
|
|
|

Za poslední dva dny jsem narazil na problém, který je docela frustrující – uložená procedura o délce asi 120 řádků je vykonána v analyzátoru dotazů SQL Server 2012, Rychlost je velmi ideální a asi 500 datových záznamů lze filtrovat a zachytit za méně než 1 sekundu. Nicméně při volání v programovém kódu C# je časový limit spojení vyzván. Nastavte Timeout příkazu na 300 a zobrazí se asi za 3 minuty. Kód jsem několikrát kontroloval a nenašel jsem žádné chyby. Problém zůstává.
Analýza příčin: 1. Protože rychlost vykonávání v analyzátoru dotazů je rychlá a množství dat není velké. 2. Pouze volání v programu je pomalé. 3. Nastavte parametr Příkaz Timeout a výsledek lze zobrazit, ale bude to trvat dlouho.
Shrnuto, předběžně se usoudí, že problém spočívá v kódu C#. Ale po inspekci nebyl žádný zisk.
Podívejte se na tyto informace o Baidu. Nakonec jsem našel podobný informační příspěvek na fóru CSDN. Jeden z uživatelů internetu v odpovědi uvedl: "Je možné, že plán implementace vypršel." Opravdu mě to probudilo ve snu.
Okamžitě proveďte na analyzátoru dotazů:
Program jsem znovu otestoval, tentokrát konečně fungoval. Rychlost je velmi uspokojivá.
Analýza příčin: Protože uložené procedury jsou předkompilovány, plán vykonání je generován při prvním provedení a tento plán se používá při dalších provedeních (pokud není uložený postup specifikován pro rekompilaci), místo aby se plán generoval pokaždé. Když je struktura objektu ve uložené procedurě upravena nebo se související data výrazně změní, což může způsobit, že původní plán nebude vhodný pro aktuální stav (expirace plánu vykonání), měla by být uložená procedura znovu zkompilována.
Nakonec připojte kód uložené procedury:
|
Předchozí:Sdílejte jednu promo stránku APP – zdrojový kód, adaptivní, velmi krásný a štědrý!Další:C# Open Source Framework (přetisk)
|