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

Traduzione articoli Traduzione articoli
Identificativo articolo: 316749 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

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:
Riduci questa tabellaEspandi questa tabella
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.

ProprietÓ

Identificativo articolo: 316749 - Ultima modifica: mercoledý 28 febbraio 2007 - Revisione: 11.1
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbmt kberrmsg kbtshoot kbnofix kbprb KB316749 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com