Angemessene Größe der Windows O / S-Auslagerungsdatei für SQL Server

Translate

Kennt jemand eine gute Faustregel für die entsprechende Auslagerungsdatei für einen Windows 2003-Server, auf dem SQL Server ausgeführt wird?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Unabhängig von der Größe des Arbeitsspeichers benötigen Sie immer noch eine Auslagerungsdatei, die mindestens das 1,5-fache des physischen Arbeitsspeichers beträgt. Dies gilt auch dann, wenn Sie einen 1-TB-RAM-Computer haben. Sie benötigen eine 1,5-TB-Auslagerungsdatei auf der Festplatte (klingt verrückt, ist aber wahr).

Wenn ein Prozess MEM_COMMIT-Speicher über VirtualAlloc / VirtualAllocEx anfordert, muss die angeforderte Größe in der Auslagerungsdatei reserviert werden. Dies war im ersten Win NT-System der Fall und gilt auch heute nochVerwalten des virtuellen Speichers in Win32:

Wenn Speicher festgeschrieben wird, werden physische Speicherseiten zugewiesenund Platz ist in einer Auslagerungsdatei reserviert.

In einigen extremen Fällen fragt SQL Server immer nach MEM_COMMIT-Seiten. Und angesichts der Tatsache, dass SQL a verwendetDynamische SpeicherverwaltungPolitik, die im Voraus so viel Pufferpool wie möglich reserviert (Reserven undbegehtIn Bezug auf VAS) fordert SQL Server beim Start eine große Speicherplatzreservierung in der Auslagerungsdatei an. Wenn die Auslagerungsdatei nicht die richtige Größe hat, werden Fehler 801/802 in der ERRORLOG-Datei und den Operationen von SQL angezeigt.

Dies führt immer zu Verwirrung, da Administratoren fälschlicherweise davon ausgehen, dass ein großer Arbeitsspeicher keine Auslagerungsdatei benötigt. In Wahrheit ist das Gegenteil der Fall: Ein großer Arbeitsspeicher erhöht den Bedarf an Auslagerungsdateien, nur aufgrund des inneren Funktionierens des Windows NT-Speichermanagers. Die reservierte Auslagerungsdatei wird hoffentlich nie verwendet.

Quelle
Translate

Bei allem Respekt vor Remus (den ich sehr respektiere) stimme ich überhaupt nicht zu. Wenn Ihre Auslagerungsdatei groß genug ist, um einen vollständigen Speicherauszug zu unterstützen, wird jedes Mal ein vollständiger Speicherauszug ausgeführt. Wenn Sie über eine sehr große Menge an RAM verfügen, kann dies dazu führen, dass ein winziger Fehler zu einem größeren Ausfall wird.

Sie möchten NICHT, dass Ihr Server 1 TB RAM auf die Festplatte schreiben muss, wenn ein einmaliges vorübergehendes Problem vorliegt. Wenn ein wiederkehrendes Problem auftritt, können Sie die Auslagerungsdatei vergrößern, um einen vollständigen Speicherauszug zu erfassen. Ich würde warten, bis Sie von PSS (oder einer anderen Person, die für die Analyse eines vollständigen Speicherauszugs qualifiziert ist) angewiesen wurden, einen vollständigen Speicherauszug zu erfassen. Ein extrem kleiner Prozentsatz der Datenbankadministratoren weiß, wie ein vollständiger Speicherauszug analysiert wird. Ein Mini-Dump reicht aus, um die meisten Probleme zu beheben, die ohnehin auftreten.

Wenn Ihr Server so konfiguriert ist, dass ein vollständiger Speicherauszug von 1 TB zulässig ist und ein wiederkehrendes Problem auftritt, wie viel freien Speicherplatz würden Sie empfehlen? Sie könnten ein ganzes SAN an einem einzigen Wochenende füllen.

Eine Auslagerungsdatei mit 1,5 * RAM war damals die Norm, als Sie das Glück hatten, einen SQL Server mit 3 oder 4 GB RAM zu haben. Dies ist nicht mehr der Fall. Ich lasse die Auslagerungsdatei auf allen Produktionsservern in der Windows-Standardgröße und -einstellungen (mit Ausnahme eines SSAS-Servers, auf dem Speicherdruck herrscht).

Und nur zur Verdeutlichung habe ich mit Servern gearbeitet, die von 2 GB RAM bis 2 TB RAM reichen. Nach mehr als 11 Jahren musste ich die Auslagerungsdatei nur einmal vergrößern, um einen vollständigen Speicherauszug zu erfassen.

Quelle
Translate

Laut Microsoft "verringert sich der Bedarf an einer Auslagerungsdatei, wenn der Arbeitsspeicher eines Computers zunimmt." In diesem Artikel wird dann beschrieben, wie mithilfe von Leistungsprotokollen ermittelt wird, wie viel der Auslagerungsdatei enthälttatsächlichverwendet werden. Versuchen Sie zunächst, Ihre Auslagerungsdatei auf den 1,5-fachen Systemspeicher einzustellen, führen Sie dann die empfohlene Überwachung durch und nehmen Sie von dort aus Anpassungen vor.

So bestimmen Sie die geeignete Auslagerungsdateigröße für 64-Bit-Versionen von Windows

Quelle
Translate

Je größer, desto besser bis zur Größe des Arbeitssatzes der Anwendung, in dem Sie anfangen, sinkende Renditen zu erzielen. Sie können versuchen, dies zu finden, indem Sie die Größe langsam erhöhen oder verringern, bis sich die Cache-Trefferquoten erheblich ändern. Wenn die Cache-Trefferquote jedoch über 90% liegt, sind Sie wahrscheinlich in Ordnung. Im Allgemeinen sollten Sie dies bei einem Produktionssystem im Auge behalten, um sicherzustellen, dass es nicht über die RAM-Zuweisung hinausgewachsen ist.

Quelle
Translate

Wir hatten kürzlich einige Leistungsprobleme mit einem unserer SQL Server, die wir nicht vollständig eingrenzen konnten, und verwendeten tatsächlich eines unserer Microsoft-Support-Tickets, um sie bei der Fehlerbehebung zu unterstützen. Die optimale Größe der Auslagerungsdatei für SQL Server wurde ermittelt, und Microsoft empfiehlt dies1 1/2 mal so viel RAM.

Quelle
Translate

Wenn Sie auf der Suche nach hoher Leistung sind, sollten Sie das Paging vollständig vermeiden, damit die Auslagerungsdateigröße an Bedeutung verliert. Investieren Sie so viel RAM wie möglich für den DB-Server.

Quelle
Translate

Nach langem Suchen haben unsere dedizierten SQL Server, auf denen Enterprise x64 unter Windows 2003 Enterprise x64 ausgeführt wird, keine Auslagerungsdatei.

Die Auslagerungsdatei ist einfach ein Cache für Dateien, die vom Betriebssystem verwaltet werden, und SQL verfügt über ein eigenes internes Speicherverwaltungssystem.

Der MS-Artikel, auf den verwiesen wird, qualifiziert nicht, dass der Rat für das Betriebssystem gilt, auf dem Standarddienste wie die Dateifreigabe ausgeführt werden.

Wenn eine Auslagerungsdatei vorhanden ist, wird die Festplatten-E / A einfach belastet, da Windows versucht zu helfen, wenn nur das SQL-Betriebssystem die Aufgabe ausführen kann.

Quelle
js5
Translate

In diesem Fall ist die normale Empfehlung des 1,5-fachen des gesamten physischen Arbeitsspeichers nicht die beste. Diese sehr allgemeine Empfehlung wird unter der Annahme gegeben, dass der gesamte Speicher von "normalen" Prozessen verwendet wird, bei denen die am wenigsten verwendeten Seiten im Allgemeinen auf die Festplatte verschoben werden können, ohne dass massive Leistungsprobleme für den Anwendungsprozess entstehen, zu dem der Speicher gehört.

Bei Servern, auf denen SQL Server ausgeführt wird (im Allgemeinen mit sehr viel RAM), wird der Großteil des physischen RAM für den SQL Server-Prozess festgeschrieben und sollte (bei korrekter Konfiguration) im physischen Speicher gesperrt werden, um zu verhindern, dass er in die Auslagerungsdatei ausgelagert wird . SQL Server verwaltet seinen eigenen Speicher sehr sorgfältig unter Berücksichtigung der Leistung und verwendet einen großen Teil des RAM, der seinem Prozess zugewiesen ist, als Datencache, um die Festplatten-E / A zu reduzieren. Es ist nicht sinnvoll, diese Datencacheseiten in die Auslagerungsdatei zu übertragen, da der einzige Zweck, diese Daten überhaupt im RAM zu haben, darin besteht, die Festplatten-E / A zu reduzieren. (Beachten Sie, dass das Windows-Betriebssystem den verfügbaren Arbeitsspeicher ähnlich wie den Festplatten-Cache verwendet, um den Systembetrieb zu beschleunigen.) Da SQL Server bereits seinen eigenen Speicherplatz verwaltet, sollte dieser Speicherplatz nicht als "pageable" betrachtet und nicht in eine Berechnung für die Auslagerungsdatei einbezogen werden Größe.

In Bezug auf MEM_COMMIT, das von Remus erwähnt wird, ist die Terminologie verwirrend, da sich "reserviert" in der Sprache des virtuellen Speichers nie auf die tatsächliche Zuweisung bezieht, sondern darauf, die Verwendung eines Adressraums (nicht physischen Raums) durch einen anderen Prozess zu verhindern. Der zum "Festschreiben" verfügbare Speicher entspricht im Wesentlichen der Summe aus physischem RAM und Auslagerungsdatei. Durch Ausführen eines MEM_COMMIT wird nur der im festgeschriebenen Pool verfügbare Betrag verringert. Es tutnichtOrdnen Sie zu diesem Zeitpunkt eine übereinstimmende Seite in der Auslagerungsdatei zu. Wenn eine festgeschriebene Speicherseite tatsächlich beschrieben wird, weist das virtuelle Speichersystem eine physische Speicherseite zu und stößt möglicherweise eine andere Speicherseite vom physischen RAM in die Auslagerungsdatei. Siehe MSDNsVirtualAlloc-FunktionReferenz.

Das Windows-Betriebssystem verfolgt den Speicherdruck zwischen Anwendungsprozessen und seinem eigenen Festplatten-Cache-Mechanismus und entscheidet, wann nicht gesperrte Speicherseiten von physisch in die Auslagerungsdatei verschoben werden sollen. Meines Wissens nach kann eine im Vergleich zum tatsächlichen nicht gesperrten Speicherplatz viel zu große Auslagerungsdatei dazu führen, dass Windows den Anwendungsspeicher übermäßig eifrig in die Auslagerungsdatei auslagert, was dazu führt, dass diese Anwendungen unter den Folgen von Seitenfehlern leiden (langsame Leistung).

Solange auf dem Server keine anderen speicherintensiven Prozesse ausgeführt werden, sollte eine Auslagerungsgröße von 4 GB ausreichend sein. Wenn Sie SQL Server so eingestellt haben, dass Seiten im Speicher gesperrt werden, sollten Sie auch die maximale Speichereinstellung von SQL Server so festlegen, dass dem Betriebssystem und anderen Prozessen physischer RAM für das Betriebssystem zur Verfügung steht.

802-Fehler in SQL Server weisen darauf hin, dass das System keine weiteren Seiten für den Datencache festschreiben kann. Das Erhöhen der Auslagerungsdatei hilft in dieser Situation nur insofern, als Windows Speicher aus Nicht-SQL Server-Prozessen auslagern kann. Wenn Sie in dieser Situation zulassen, dass der SQL Server-Speicher in die Auslagerungsdatei hineinwächst, werden möglicherweise die Fehlermeldungen entfernt. Dies ist jedoch kontraproduktiv, da der Grund für den Datencache bereits erwähnt wurde.

Quelle