Al momento sei offline in attesa che la connessione Internet venga ristabilita

Potrebbe non esserci sufficiente memoria virtuale quando si dispone di un numero elevato di database all'interno di SQL Server

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 316749
Sintomi
Potrebbe non esserci sufficiente spazio di indirizzi virtuali disponibile nel processo di Microsoft SQL Server se tutte le seguenti condizioni sono vere quando si esegue SQL Server con l'impostazione predefinita i valori di configurazione:
  • Il server dispone di 2 GB o più di RAM.
  • Non vi sono molti dei database del computer (ad esempio, più di 500).
  • La maggior parte dei database vengono aggiornata (ad esempio, i database non sono uno stato di "sola lettura").
  • Sono disponibili sufficienti connessioni utente attive contemporaneamente per utilizzare la maggior parte dei 255 thread di lavoro di SQL Server.
SQL Server può causare la visualizzazione degli seguenti messaggi di errore dopo l'utilizzo spazio di indirizzi virtuali completamente da 2 GB (o dopo aver utilizzato spazio di indirizzi virtuali intero 3 GB SQL Server Enterprise Edition con il / 3 GB opzione nel file Boot.ini).

Messaggio 1

Errore: 17802, gravità: 18, stato: 3
Impossibile creare il thread di evento del server.

Messaggio 2

SQL Server in grado di non generare process_loginread thread.

Messaggio 3

Avviso: Eliminazione cache delle procedure per liberare memoria contigua.

Furto di distribuzione di buffer: = 3454 alla disponibile = 2540 procedure = 138
Inram = 0 = danneggiato 1108 mantenuti = 35
I / O = 0, latch = 0, altri = 214821
Numero di buffer: Commit = 222096 target = 222096 hash = 215964
InternalReservation = ExternalReservation 547 = 0 Min disponibile = 512
Procedure cache: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Furto di gestione di memoria dinamica: = 3556
Sistema operativo = 497 generale = 1706
Piano di Query = Optimizer 755 = 0
Utilità = connessione 9 = dal 1583
Risorse di oggetti di memoria globale: = 1119 blocchi = 163 XDES = 1 SQLCache = replica 90 = 5 LockBytes = ServerGlobal 2 = 20
Gestione memoria di query: concede = in attesa di 0 = 0 massimo = 164370 disponibile = 164370
Cause
Per ogni database aggiornati, SQL Server alloca almeno un blocco di 64 KB per l'utilizzo in formattazione i record del log prima vengono scritti su disco. Questa allocazione si verifica quando il primo record del log viene generato per il database, ad esempio durante un'istruzione INSERT, UPDATE o DELETE. A seconda dell'attività e dimensioni del record di log generato, le modifiche successive potrebbero attivare l'allocazione di ulteriori allocazioni di 64 KB. SQL Server 7.0 l'allocazione di più di tre blocchi di 54-KB. In SQL Server 2000, il numero superiore di allocazioni di una funzione del numero di processori per ogni database SQL Server è configurato per utilizzare.
Workaround
Utilizzare il -g parametro di avvio per lasciare non riservata, ulteriore memoria virtuale disponibile per questi database allocazioni. Il -g parametro è documentato nel file Readme.txt del SQL Server 7.0 service pack e nella documentazione in linea di SQL Server 2000. Il "Informazioni" in questo articolo include le impostazioni Microsoft consiglia di utilizzare per determinare il valore appropriato per questa impostazione.
Informazioni
In un computer con 2 GB di RAM, tutti i fondi di SQL Server ma 256 MB (SQL Server 7.0) o 384 MB (SQL Server 2000) di spazio di indirizzi virtuali durante il processo di avvio per l'utilizzo da pool di buffer. Inoltre, per memorizzare la cache di dati e procedure, SQL Server utilizza la memoria del pool di buffer per la maggior parte delle altre richieste di memoria da processi di SQL Server sono inferiori a 8 KB. La memoria non riservata rimanente è destinata all'utilizzo con altre allocazioni che non possono essere elaborate dal pool di buffer. Queste allocazioni includono, ma non sono limitate a:
  • Gli stack e il blocco di ambiente del thread associato per tutti i thread creati da SQL Server. Dopo che SQL Server crea tutti i thread di lavoro 255, si tratta di circa 140 MB.
  • Le allocazioni effettuate da altre DLL o processi che in esecuzione nello spazio di indirizzi di SQL Server (che varia da sistema a sistema), ad esempio:
    • Provider OLE DB da qualsiasi server collegato.
    • Oggetti COM che vengono caricati per utilizzo del sistema sp_OA stored procedure o stored procedure estese.
  • Le immagini (con estensione exe o dll) che vengono caricate nello spazio degli indirizzi, che normalmente utilizzare 20 a 25 MB, ma probabilmente più se si utilizzano i server collegati, sp_OA o esteso stored procedure.
  • Heap del processo e tutti gli heap che potrebbero creare SQL Server. Durante il processo di avvio, questo è in genere 10 MB, ma potrebbe essere più se si utilizza i server collegati, sp_OA o le stored procedure estese.
  • Allocazioni da processi di SQL Server che superano 8 KB, ad esempio quelli necessari per i piani di query di grandi dimensioni, inviare e ricevere buffer se l'opzione di configurazione dimensioni del pacchetto di rete è simile a 8 KB e così via. Per visualizzare questo numero, individuare il valore Riservato del sistema operativo che viene segnalato in DBCC MEMORYSTATUS e che viene segnalato come numero di pagine da 8 KB. I valori tipici per questo sono 5 MB.
  • Matrice di registrare informazioni di stato per ogni buffer nel pool di buffer. Si tratta in genere circa 20 MB, a meno che non SQL Server viene eseguito con le estensioni AWE (Address Windowing) attivata, in questo caso può essere significativamente più elevato.
Nei sistemi dotati di un numero elevato di database, le allocazioni di 64 KB necessari per la formattazione di registro potrebbero occupare tutta la memoria virtuale rimanente. A questo punto, le allocazioni successive potrebbero non riuscire, come conseguenza una o più degli errori elencati nella sezione "Sintomi" in questo articolo.

Utilizzando il -g parametro di avvio, è possibile indicare lasciare ulteriore memoria virtuale disponibile per la combinazione di queste allocazioni correlata ai log e altre allocazioni normale non viene eseguito esaurisca lo spazio degli indirizzi virtuale di SQL Server.

Nella tabella che segue elenchi alcuni suggerito di punti di partenza per la -g valore in base al numero di database e la versione del server:
DatabaseSQL Server 7.0SQL Server 2000
250-g134 N/D
500-g185 N/D
750-g237 N/D
1000-g288 -g288
1250-g340 -g340
1500-g392 -g392
In questa tabella è stata calcolata utilizzando i valori tipici elencati ed è anche basato sul presupposto che attività del server collegato, sp_OA né stored procedure estese sono in uso. Inoltre si basa sul presupposto che non si utilizza AWE e che SQL Profiler non è in uso. Una di queste condizioni potrebbe essere necessario aumentare il valore di -g .

Si consiglia di adottare seria considerazione prima di eseguire un server con più database più perché l'overhead richiesto per con questo numero di database nel sistema richiede molta memoria virtuale lontano dal pool di buffer, conseguente peggioramento delle prestazioni per il sistema nel suo complesso.

Inoltre, la creazione di numerosi database ha lo più significativo effetto memoria virtuale. Sono inoltre disponibili allocazioni di memoria per ogni database che possono causare una condizione di esaurimento della memoria del pool di buffer. Ad esempio, si potrebbe essere visualizzato il seguente messaggio di errore:
Errore: 701, gravità: 17, stato: 123.
Memoria di sistema insufficienti per eseguire la query è.
Questo tipo di condizione di esaurimento della memoria potrebbe essere più comune in SQL Server 2005, poiché SQL Server 2005 tiene traccia di ulteriori metadati per database rispetto alle versioni precedenti di SQL Server.

Quando si verifica l'utilizzo di indice utilizzando la procedura sys.dm_db_index_usage_stats memorizzati, l'operazione potrebbe richiede una notevole quantità di memoria. L'operazione richiede una notevole quantità di memoria se ogni database dispone di numerosi indici.

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 316749 - Ultima revisione: 02/28/2007 18:48:54 - Revisione: 11.1

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition

  • kbmt kberrmsg kbtshoot kbnofix kbprb KB316749 KbMtit
Feedback