Pravděpodobně není dostatek virtuální paměti když máte velký počet databází na serveru SQL Server

Příznaky

Pravděpodobně není dostatek místa k dispozici virtuální adresu v procesu serveru Microsoft SQL Server Pokud všechny následující podmínky jsou splněny, pokud je spuštěn SQL Server s výchozí hodnoty konfigurace:
  • Server má 2 GB nebo více paměti RAM.
  • Existuje velký počet databází v systému (například více než 500).
  • Většinu databází jsou aktualizovány (například databáze nemají stav "jen pro čtení").
  • Existuje dostatek současně aktivních uživatelských připojení použít maximálně 255 pracovních podprocesů serveru SQL Server.
Po vyčerpání celé 2 GB virtuálního adresového prostoru (nebo celé 3 GB virtuálního adresového prostoru je spotřebováno v SQL Server Enterprise Edition s přepínačem/3 GB v souboru Boot.ini), SQL Server může způsobit následující chybové zprávy.

Zpráva 1

Chyba: 17802, závažnosti: 18, stav: 3
Nelze vytvořit podproces událostí serveru.

Zpráva 2

SQL Server nelze spustit podproces process_loginread.

Zpráva 3

Upozornění: Vymazání mezipaměti postup do volných souvislé paměti.


Vyrovnávací paměti distribuce: Krádeže = 3454 zdarma = 2540 procedury = 138
Inram=0 Dirty=1108 Kept=35
I/O=0, Latched=0, Other=214821
Počty vyrovnávací paměti: Potvrzené = 222096 Target = 222096 zatříděna = 215964
InternalReservation = 547 ExternalReservation = 0 Min zdarma = 512
Postup mezipaměť: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Dynamický správce paměti: krádeže = 3556
OS=497 General=1706
Plán dotazu = 755 Optimalizátor = 0
Utilities=9 Connection=1583
Globální paměti objekty: Resource = 1119 uzamčení = 163 XDES = 1 SQLCache = 90 replikace = 5 LockBytes = 2 ServerGlobal = 20
Uděluje správce paměti dotazu: = 0 čekání = 0, Maximum = 164370 dostupné = 164370

Příčina

Pro každou aktualizované databázi serveru SQL Server přidělí alespoň jeden blok 64 KB pro použití formátování záznamů protokolu, než jsou psány na disk. Toto rozdělení dochází při první záznam protokolu je generován pro databázi, jako například během příkazu INSERT, UPDATE nebo DELETE. V závislosti na činnosti a velikost záznamů protokolu generované následných změn mohou být aktivována přidělení další přidělení 64 KB. SQL Server 7.0 bude přidělit více než tři bloky 54 KB. V SQL Server 2000, horní počet přidělení pro každou databázi je funkcí počet procesorů, že SQL Server konfigurován pro použití.

Jak potíže obejít

Pomocí -g spouštěcí parametr ponechejte další, nerezervované virtuální paměti k dispozici pro přidělení těchto databází. -G parametr je popsána v Readme.txt aktualizace service Pack serveru SQL Server 7.0 a SQL Server 2000 Books Online. Části "Další informace" v tomto článku zahrnuje nastavení Microsoft doporučuje, že můžete určit odpovídající hodnotu pro toto nastavení.

Další informace

V počítači s 2 GB nebo více paměti RAM, SQL Server rezerv všechny ale 256 MB (SQL Server 7.0) nebo 384 MB (SQL Server 2000) prostoru virtuálních adres během procesu spuštění používat fond vyrovnávacích pamětí. Navíc k ukládání dat a postup mezipaměti, SQL Server používá paměť fondu vyrovnávací paměti služby většina dalších požadavků na paměť z procesů serveru SQL Server, které jsou menší než 8 KB. Zbývající nerezervované paměti je určen pro použití s jiným rozdělením, které nemohou být zpracovány z fondu vyrovnávací paměti. Tyto příděly zahrnují, ale nejsou omezeny na:
  • Zásobníky a o blok prostředí podprocesu přidružené podprocesů serveru SQL Server vytvoří. Po serveru SQL Server vytvoří všechny 255 pracovních podprocesů, to je přibližně 140 MB.
  • Přidělení, která jsou prováděny další knihovny DLL nebo procesy, které jsou spuštěny v adresového prostoru serveru SQL Server (což se liší systém od systému), jako například:
    • Zprostředkovatelé OLE DB z jakékoli propojené servery.
    • Objekty COM, které jsou načteny pomocí systému sp_OA uložené procedury a rozšířené uložené procedury.
  • Všechny obrazy (.exe nebo .dll) zavedené v adresovém prostoru, které běžně používáte propojené servery sp_OApoužít 20 až 25 MB, ale pravděpodobně více nebo rozšířené uložené procedury.
  • Haldy procesu a další haldy, které by mohly vyvolat SQL Server. Během procesu spuštění to je obvykle 10 MB, ale může být více, pokud používáte propojené servery, sp_OAnebo rozšířené uložené procedury.
  • Přidělení procesů serveru SQL Server, které jsou větší než 8 KB, jako jsou potřebné pro plány dotazu velké odeslat a přijímací vyrovnávací paměti, pokud je možnost konfigurace velikost síťového paketu blízko 8 KB atd. Chcete-li zobrazit toto číslo, vyhledejte OS vyhrazené hodnoty, která je uvedena v DBCC MEMORYSTATUS a který je vykazován počet stránek 8 KB. Typické hodnoty jsou 5 MB.
  • Pole sledovat informace o stavu pro každé vyrovnávací paměti ve fondu vyrovnávací paměti. Je to obvykle asi 20 MB, pokud je SQL Server spuštěn s rozšíření AWE (Address Windowing) povoleno, v takovém případě může být výrazně vyšší.
V systémech, které mají velký počet databází může zabírat přidělení 64 KB, které jsou požadovány pro formátování protokolu všechny zbývající virtuální paměti. V tomto okamžiku může selhat následných přidělení, výsledkem je jedna nebo více chyb, které jsou uvedeny v části "Příznaky" v tomto článku.

Pomocí -g spouštěcí parametr můžete dát pokyn, nechat další virtuální paměti, aby kombinace tyto příděly vztahující se k protokolu a ostatní normální rozdělení se nespustí virtuálního adresového prostoru serveru SQL Server.

V následující tabulce jsou uvedeny některé navrhované počáteční body hodnotu -g v závislosti na počtu databází a verze serveru:
DatabázeSQL Server 7.0SQL Server 2000
250-g134N/A
500-g185N/A
750-g237N/A
1000-g288-g288
1250-g340-g340
1 500-g392-g392
Tato tabulka byla vypočtena pomocí typické hodnoty, které jsou uvedeny a je také založena na předpokladu, že žádná činnost propojený server, sp_OA nebo rozšířené uložené procedury jsou používány. Také je založena na předpokladu, že nepoužíváte AWE a že SQL Profiler není používán. Některé z těchto podmínek může vyžadovat zvýšení hodnoty -g.

Společnost Microsoft doporučuje podniknout prostudování před spustit server s databází více než to, protože režie, která je požadována pro s tímto počtem databází v systému trvá velké množství virtuální paměti mimo fondu vyrovnávací paměti, což může vést ke snížení výkonu systému jako celku.

Kromě toho vytváření mnoho databází má nejvýznamnější vliv na virtuální paměti. Jsou také jednotlivé databáze přidělení paměti, které mohou způsobit podmínku out paměti fondu vyrovnávací paměti. Například může zobrazit následující chybová zpráva:
Chyba: 701, závažnosti: 17, stav: 123.

Není dostatek paměti ke spuštění tohoto dotazu.
Protože SQL Server 2005 sleduje další metadata pro databáze než v předchozích verzích serveru SQL Server, může být tento druh z důvodu nedostatku paměti podmínku běžnější v SQL Server 2005.

Při sledování využití indexu pomocí sys.dm_db_index_usage_stats uložené procedury, operace může vyžadovat značné množství paměti. Operace vyžaduje značné množství paměti, pokud každá databáze obsahuje mnoho indexů.
Vlastnosti

ID článku: 316749 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor