Sintomi
Quando si popola una variabile di tabella con molte righe e quindi si partecipa ad altre tabelle, Query Optimizer può scegliere un piano di query inefficiente, che può determinare una lentezza delle prestazioni delle query.
Risoluzione
Dopo aver applicato questo hotfix, è possibile attivare il contrassegno di traccia 2453 per consentire a una variabile di tabella di attivare la ricompilazione quando viene modificato un numero sufficiente di righe. Questo potrebbe consentire a Query Optimizer di scegliere un piano più efficiente. Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo o/e Service Pack per SQL Server.
Aggiornamento cumulativo 3 per SQL Server 2014 /en-us/help/2984923
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
I Service Pack sono cumulativi. Ogni nuovo Service Pack contiene tutte le correzioni che si trovano nei Service Pack precedenti, insieme a tutte le nuove correzioni. La nostra raccomandazione consiste nell'applicare il Service Pack più recente e l'ultimo aggiornamento cumulativo per tale Service Pack. Non è necessario installare un Service Pack precedente prima di installare il Service Pack più recente. Usare la tabella 1 nell'articolo seguente per trovare altre informazioni sul Service Pack più recente e l'ultimo aggiornamento cumulativo:
Ulteriori informazioni
Quando si usa una variabile di tabella in un batch o in una routine, la query viene compilata e ottimizzata per lo stato vuoto iniziale della variabile di tabella. Se questa variabile di tabella viene popolata con molte righe in fase di esecuzione, il piano di query precompilato potrebbe non essere più ottimale. Ad esempio, la query può partecipare a una variabile di tabella con un ciclo annidato, perché in genere è più efficiente per un numero limitato di righe. Questo piano di query può essere inefficiente se la variabile di tabella contiene milioni di righe. Un hash join può essere una scelta migliore in tale condizione. Per ottenere un nuovo piano di query, è necessario ricompilarlo. A differenza di altre tabelle utente o temporanee, tuttavia, il conteggio delle righe cambia in una variabile di tabella non attiva una ricompilazione della query. In genere, è possibile risolvere il problema con l'opzione (ricompilare), che ha un costo aggiuntivo. Il flag di traccia 2453 consente di ricompilare la query senza opzione (ricompilare). Questo flag di traccia è diverso da OPTION (RECOMPILE) in due aspetti principali. (1) usa la stessa soglia per il conteggio delle righe di altre tabelle. La query non deve essere compilata per ogni opzione di esecuzione a differenza di (ricompilare). Attiverà la ricompilazione solo quando la modifica del conteggio delle righe supera la soglia predefinita. (2) opzione (ricompilare) forza la query a sbirciare i parametri e ad ottimizzare la query. Questo flag di traccia non impone la visualizzazione dei parametri.Nota questo contrassegno di traccia deve essere attivo in fase di esecuzione. Non è possibile usare questo flag di traccia con QUERYTRACEON. Questo contrassegno di traccia deve essere usato con cautela perché può aumentare il numero di ricompilazioni di query che potrebbero costare più di un risparmio per migliorare l'ottimizzazione delle query.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".