|
|
Pubblicato su 21/05/2018 13:55:48
|
|
|

Negli ultimi due giorni ho incontrato un problema piuttosto frustrante: una procedura memorizzata di circa 120 righe viene eseguita nell'analizzatore di query di SQL Server 2012, La velocità è molto ideale, e circa 500 record di dati possono essere filtrati e catturati in meno di 1 secondo. Tuttavia, quando viene chiamato il codice del programma C#, viene richiesto il timeout della connessione. Imposta il CommandTimeout a 300 e ci vorranno circa 3 minuti per essere visualizzato. Ho controllato il codice più volte e non ho trovato errori. Il problema rimane.
Analisi della causa: 1. Perché la velocità di esecuzione nell'analizzatore di query è elevata e la quantità di dati non è elevata. 2. Solo la chiamata del programma è lenta. 3. Imposta il parametro CommandTimeout e il risultato può essere visualizzato, ma ci vorrà molto tempo.
In sintesi, si conclude preliminarmente che il problema risiede nel codice C#. Ma non c'era alcun vantaggio dopo l'ispezione.
Controlla queste informazioni su Baidu. Finalmente ho trovato un post informativo simile sul forum CSDN. Uno degli internauti ha risposto: "È possibile che il piano di implementazione sia scaduto", Mi ha davvero svegliato nel sogno.
Esegui immediatamente sull'analizzatore di query:
Testando di nuovo il programma, questa volta finalmente funzionò. La velocità è molto soddisfacente.
Analisi della causa: Poiché le stored procedure sono precompilate, un piano di esecuzione viene generato alla prima esecuzione, e questo piano di esecuzione viene utilizzato nelle esecuzioni successive (a meno che la stored procedure non sia specificata per essere ricompilata), invece di generare un piano di esecuzione ogni volta che viene eseguita. Quando la struttura dell'oggetto coinvolta nella stored procedure viene modificata, o i dati correlati cambiano significativamente, il che può rendere il piano originale inadatto allo status quo attuale (scadenza del piano di esecuzione), la stored procedure dovrebbe essere ricompilata.
Infine, allega il codice per la procedura memorizzata:
|
Precedente:Condividi un unico codice di pagina promozionale APP, adattivo, molto bello e generoso!Prossimo:Framework Open Source C# (Ristampa)
|