MODIFICA RIEPILOGO Per una richiesta di Damien_The_Unbeliever
L'obiettivo è ottenere la migliore/maggior parte delle informazioni sul valore della variabile in SQL PRIMA della creazione del piano, generalmente lo sniffing dei parametri lo fa. Potrebbe esserci una ragione per cui lo sniffing dei parametri è stato "disabilitato" in questo caso. Senza vedere una migliore rappresentazione del codice effettivo non possiamo davvero dire quale sia la soluzione o perché esiste il problema. Prova le seguenti cose per forzare le aree interessate a generare piani utilizzando i valori effettivi.
*VERSIONE LUNGA CON PIÙ DETTAGLI *
È questo il tuo effettivo processo memorizzato? Hai dei valori predefiniti per i tuoi parametri? Se sì, quali sono?
Lo sniffing dei parametri può aiutare, ma deve avere valori di parametri tipici per creare bene il piano e, in caso contrario, non aiuterà davvero o creerà un piano errato basato sul valore del parametro non tipico. Pertanto, se una variabile ha un valore predefinito null o un valore che non è un valore tipico la prima volta che viene eseguita e il piano compilato, viene creato un piano errato.
Se qualcun altro ha scritto questo sproc, potrebbe aver intenzionalmente "disabilitato" lo sniffing dei parametri con le variabili locali per un motivo. Le regole aziendali possono richiedere queste strutture variabili.
L'obiettivo è ottenere la migliore/maggior parte delle informazioni sul valore della variabile in SQL PRIMA della creazione del piano e in genere lo sniffing dei parametri lo fa. Ma ci sono cose che possono far sì che influisca negativamente sulle prestazioni, e questo potrebbe essere il motivo per cui è "disabilitato". Sembra ancora che il piano venga creato con valori atipici per i parametri o informazioni insufficienti, utilizzando o meno lo sniffing dei parametri.
Prova a chiamare la query all'interno di sproc con Use sp_executesql per eseguire le query interessate, costringendolo a generare un piano per quell'area con le variabili effettive e vedere se è meglio. Questa potrebbe essere la tua soluzione se devi avere questo tipo di valore di parametro irregolare - creare processi memorizzati che eseguano le parti interessate e chiamarle in seguito dall'interno della procedura memorizzata - dopo che la variabile ha ricevuto un valore tipico.
Senza vedere una migliore rappresentazione del codice effettivo, è difficile vedere quale sia il problema. Speriamo che queste informazioni possano aiutare -