Riduzione delle prestazioni quando si esegue un'istruzione SELECT... IN query dopo l'aggiornamento a SQL Server 2012 e versioni successive

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 3144525
Sintomi
Dopo l'aggiornamento da Microsoft SQL Server 2008 R2 o versione precedente di SQL Server 2012 o versione successiva, è possibile selezionare tale... IN le query che contengono funzioni definite dall'utente richiedono più tempo per completare più nelle versioni precedenti.
Cause
Questo problema si verifica perché quel selezionare... IN le istruzioni che contengono funzioni definite dall'utente (FDU) sono completamente registrate e richiedere ulteriore tempo per completare in SQL Server 2012 e versioni successive.

Nota Selezionare qualsiasi ... IN le istruzioni che contengono funzioni definite dall'utente sono operazioni a registrazione minima nelle versioni precedenti (SQL Server 2008 R2 e versioni precedenti). Questa modifica è stata introdotta per assicurarsi dell'integrità dei dati, come la funzione definita dall'utente può eseguire operazioni di lettura/scrittura sullo stesso oggetto e può causare il danneggiamento dei dati, se è attivata la registrazione minima.
Workaround
Se selezionate le funzioni definite dall'utente che vengono utilizzate il ... IN istruzione non esegue le operazioni di accesso ai dati, è possibile specificare la clausola SCHEMABINDING per le funzioni definite dall'utente, che la proprietà di UserDataAccess derivata per quelle funzioni definite dall'utente verrà impostata su 0. Dopo questa modifica, selezionare ... IN verranno registrate almeno le istruzioni. Per ulteriori informazioni, vedere il codice di esempio nel blog per un esempio sull'utilizzo SCHEMABINDING.

Nota Se l'istruzione fa riferimento almeno una funzione definita dall'utente che questa proprietà è impostata su 1, l'operazione viene completamente registrata.
Informazioni
Esempio di codice seguente viene illustrata la differenza nel comportamento tra SQL Server 2008 R2 e SQL Server 2012 o 2014:

create database DB1gouse DB1gocreate function dbo.MyTrim (@name as varchar(100))returns varchar (100)asbeginreturn (RTRIM(ltrim(@name)))endgocreate table dbo.tab_prod (c1 int, c2 varchar(10))godeclare @a int set @a = 1while @a <= 100000begin insert into tab_prodvalues (@a , '  test ')set @a = @a + 1endbegin transelect  *,  dbo.mytrim(c2) as trimc2 into tab_test from tab_prod

Nella tabella seguente vengono confrontati il tempo di CPU per un'operazione select in SQL Server 2008 R2 con quella del 2014 di SQL Server:

VersioneTempo di esecuzione (tempo CPU)
SQL Server 2008 R2719 ms
SQL Server 20141360 ms

Nella tabella seguente confronta l'utilizzo del log delle transazioni per un'operazione select in SQL Server 2008 R2 con quella del 2014 di SQL Server:

VersioneNome del databaseDimensione del registro (MB)Spazio di log utilizzato (%)Stato
SQL Server 2008 R2DB10.742187551.578950
SQL Server 2014DB132.1796938.44380
Nota importante I risultati di queste tabelle sono solo un esempio della modifica nel comportamento tra SQL Server 2008 R2 e SQL Server 2014 e molto specifici nell'ambiente di laboratorio che è stato utilizzato per questo test. La differenza di prestazioni effettive dell'ambiente verrà dipendono dall'hardware che esegue l'istanza SQL in.
Nota: questo è un articolo a "PUBBLICAZIONE RAPIDA", creato direttamente all'interno dell'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento vengono fornite "così come sono" in risposta alle problematiche riscontrate. A causa della rapidità con cui vengono resi disponibili, i materiali possono contenere errori di battitura e sono soggetti a modifica senza preavviso, in qualsiasi momento. Per altre considerazioni, vedere le Condizioni per l'utilizzo.

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 3144525 - Ultima revisione: 03/03/2016 22:39:00 - Revisione: 1.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB3144525 KbMtit
Feedback