L'esecuzione di un database SQL Server 2005 con livello di compatibilità 80 ha un impatto negativo sulle prestazioni?

StackOverflow https://stackoverflow.com/questions/7237

  •  08-06-2019
  •  | 
  •  

Domanda

Il nostro software deve essere in grado di funzionare su SQL Server 2000 e 2005.Per semplificare lo sviluppo, eseguiamo i nostri database SQL Server 2005 con il livello di compatibilità 80.Tuttavia, in alcuni casi, le prestazioni del database sembrano più lente su SQL 2005 che su SQL 2000 (non l'abbiamo ancora confermato utilizzando i benchmark).L'aggiornamento del livello di compatibilità a 90 migliorerebbe le prestazioni sui server SQL 2005?

È stato utile?

Soluzione

Penso di aver letto da qualche parte che il motore di database di SQL Server 2005 dovrebbe essere circa il 30% più veloce del motore di SQL Server 2000.Potrebbe essere necessario eseguire il database in modalità compatibilità 90 per ottenere questi vantaggi.

Ma mi sono imbattuto in due scenari, in cui le prestazioni possono diminuire drasticamente quando si utilizza mssql 2005 rispetto a mssql 2000:

  1. Sniffing dei parametri:Quando si utilizza una procedura memorizzata, SQL Server calcolerà esattamente un piano di esecuzione alla volta, per prima cosa si chiama la procedura.Il piano di esecuzione dipende dai valori dei parametri forniti per quella chiamata.Nel nostro caso, le procedure che normalmente richiedevano circa 10 secondi vengono eseguite per ore con mssql 2005.Guarda Qui E Qui.

  2. Quando si utilizzano query distribuite, mssql 2005 si comporta diversamente per quanto riguarda i presupposti sull'ordinamento sul server remoto.Il comportamento predefinito prevede che il server copi tutte le tabelle remote coinvolte in una query nel tempdb locale e quindi esegua i join localmente.La soluzione alternativa consiste nell'utilizzare OPENQUERY, con cui è possibile controllare esattamente quale set di risultati viene trasferito dal server remoto.

Altri suggerimenti

dopo aver spostato i DB nel 2005, vero?

aggiornare le statistiche con la scansione completa?ricostruito gli indici?

prima provalo e poi controlla di nuovo le prestazioni

Inoltre, per tua informazione, se esegui il livello di compatibilità 90, alcune cose non sono più supportate come i join esterni vecchio stile (*= and =*)

Stai usando sottoseleziona nelle tue domande?

Dalla mia esperienza, un'istruzione SELECT con sottoselezione che funziona correttamente su SQL Server 2000 può eseguire la scansione su SQL Server 2005 (può essere 10 volte più lenta!).

Fai un esperimento: riscrivi una query per eliminare le sottoselezione e vedere come cambiano le sue prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top