Handbuch zur Architektur der SpeicherverwaltungMemory Management Architecture Guide

Gilt für: JaSQL Server JaAzure SQL-Datenbank JaAzure Synapse Analytics (SQL DW) JaParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Windows-Manager für virtuellen ArbeitsspeicherWindows Virtual Memory Manager

Die zugesicherten Bereiche des Adressraums werden vom Windows-Manager für virtuellen Arbeitsspeicher (VMM, Virtual Memory Manager) dem verfügbaren physischen Arbeitsspeicher zugeordnet.The committed regions of address space are mapped to the available physical memory by the Windows Virtual Memory Manager (VMM).

Weitere Informationen zur von anderen Betriebssystemen unterstützten Größe des physischen Speichers finden Sie in der Windows-Dokumentation Arbeitsspeichergrenzwerte für Windows-Versionen (möglicherweise in englischer Sprache).For more information on the amount of physical memory supported by different operating systems, see the Windows documentation on Memory Limits for Windows Releases.

Mit virtuellen Speichersystemen kann mehr physischer Arbeitsspeicher zugesichert werden, als tatsächlich vorhanden ist, sodass das Verhältnis von virtuellem zu physischem Arbeitsspeicher das Verhältnis 1:1 überschreiten kann.Virtual memory systems allow the over-commitment of physical memory, so that the ratio of virtual-to-physical memory can exceed 1:1. Auf diese Weise können größere Programme auf Computern mit verschiedenen Konfigurationen des physischen Arbeitsspeichers ausgeführt werden.As a result, larger programs can run on computers with a variety of physical memory configurations. Wenn jedoch deutlich mehr virtueller Arbeitsspeicher verwendet wird, als die kombinierten durchschnittlichen Workingsets aller Prozesse verwenden, kann dies zu einem ungünstigen Leistungsverhalten führen.However, using significantly more virtual memory than the combined average working sets of all the processes can cause poor performance.

SQL Server-ArbeitsspeicherarchitekturSQL Server Memory Architecture

InSQL ServerSQL Server wird Arbeitsspeicher nach Bedarf dynamisch reserviert und freigegeben.SQL ServerSQL Server dynamically acquires and frees memory as required. Die Angabe des Arbeitsspeicherumfangs durch den Administrator, der SQL ServerSQL Serverzugeordnet werden soll, ist in der Regel nicht erforderlich, obwohl die Möglichkeit weiterhin besteht und in einigen Umgebungen erforderlich ist.Typically, an administrator does not have to specify how much memory should be allocated to SQL ServerSQL Server, although the option still exists and is required in some environments.

Eines der vorrangigen Ziele beim Entwurf jeder Datenbanksoftware ist die Minimierung der Datenträger-E/A, da Lese- und Schreibvorgänge auf dem Datenträger zu den ressourcenintensivsten Vorgängen zählen.One of the primary design goals of all database software is to minimize disk I/O because disk reads and writes are among the most resource-intensive operations. SQL ServerSQL Server erstellt einen Pufferpool im Arbeitsspeicher, um Seiten aufzunehmen, die aus der Datenbank gelesen werden.builds a buffer pool in memory to hold pages read from the database. Ein großer Teil des Codes in SQL ServerSQL Server dient dazu, die Anzahl von physischen Lese- und Schreibvorgängen zwischen dem Datenträger und dem Pufferpool zu minimieren.Much of the code in SQL ServerSQL Server is dedicated to minimizing the number of physical reads and writes between the disk and the buffer pool. SQL ServerSQL Server versucht, ein Gleichgewicht zwischen den beiden folgenden Zielen herzustellen:tries to reach a balance between two goals:

  • Verhindern, dass der Pufferpool so groß wird, dass im gesamten System nicht genügend Arbeitsspeicher verfügbar ist.Keep the buffer pool from becoming so big that the entire system is low on memory.
  • Minimieren physischer E/A-Vorgänge in den Datenbankdateien durch Maximieren der Größe des Pufferpools.Minimize physical I/O to the database files by maximizing the size of the buffer pool.

Hinweis

Bei einem stark ausgelasteten System können umfangreiche Abfragen, die zum Ausführen sehr viel Arbeitsspeicher erfordern, nicht immer die Mindestmenge des angeforderten Arbeitsspeichers erhalten. Während auf die Arbeitsspeicherressourcen gewartet wird, wird deshalb ein Timeoutfehler erzeugt.In a heavily loaded system, some large queries that require a large amount of memory to run cannot get the minimum amount of requested memory and receive a time-out error while waiting for memory resources. Zur Behebung dieses Problems sollten Sie den Wert für die Option Abfragewartezeiterhöhen.To resolve this, increase the query wait Option. Für eine parallele Abfrage können Sie den Wert für die Option Max. Grad an Parallelitätreduzieren.For a parallel query, consider reducing the max degree of parallelism Option.

Hinweis

Bei einem stark ausgelasteten System mit ungenügendem Arbeitsspeicher können Abfragen mit Zusammenführungsjoin, Sortierung und Bitmap im Abfrageplan zum Löschen der Bitmap führen, wenn für die Abfragen nicht der für die Bitmap erforderliche minimale Arbeitsspeicher verfügbar ist.In a heavily loaded system under memory pressure, queries with merge join, sort and bitmap in the query plan can drop the bitmap when the queries do not get the minimum required memory for the bitmap. Dies kann die Abfrageleistung beeinträchtigen. Wenn zudem der Sortierprozess nicht genügend Arbeitsspeicher erhält, kann dies zu einer erhöhten Verwendung von Arbeitstabellen in der tempdb-Datenbank führen, was ein Anwachsen der tempdb-Datenbank bewirkt.This can affect the query performance and if the sorting process can not fit in memory, it can increase the usage of worktables in tempdb database, causing tempdb to grow. Um dieses Problem zu lösen, müssen Sie physischen Arbeitsspeicher hinzufügen oder die Abfragen so optimieren, dass Sie einen anderen und schnelleren Abfrageplan verwenden.To resolve this problem add physical memory or tune the queries to use a different and faster query plan.

Bereitstellen der maximalen Menge von Arbeitsspeicher für SQL ServerSQL ServerProviding the maximum amount of memory to SQL ServerSQL Server

Mithilfe von AWE und der Berechtigung „Locked Pages in Memory“ können Sie für die SQL ServerSQL Server-Datenbank-Engine die folgenden Mengen von Arbeitsspeicher bereitstellen.By using AWE and the Locked Pages in Memory privilege, you can provide the following amounts of memory to the SQL ServerSQL Server Database Engine.

Hinweis

Die folgende Tabelle enthält eine Spalte für 32-Bit-Versionen, die nicht mehr verfügbar sind.The following table includes a column for 32-bit versions, which are no longer available.

32-Bit 132-bit 1 64 Bit64-bit
Konventioneller ArbeitsspeicherConventional memory Alle Editionen von SQL ServerSQL Server .All SQL ServerSQL Server editions. Bis zu der für den virtuellen Prozessadressraum geltenden Beschränkung:Up to process virtual address space limit:
– 2 GB- 2 GB
– 3 GB mit Startparameter „/3gb“ 2- 3 GB with /3gb boot parameter 2
– 4 GB unter WOW64 3- 4 GB on WOW64 3
Alle Editionen von SQL ServerSQL Server .All SQL ServerSQL Server editions. Bis zu der für den virtuellen Prozessadressraum geltenden Beschränkung:Up to process virtual address space limit:
– 7 TB mit IA64-Architektur (IA64 wird in SQL Server 2012 (11.x)SQL Server 2012 (11.x) und höher nicht unterstützt)- 7 TB with IA64 architecture (IA64 not supported in SQL Server 2012 (11.x)SQL Server 2012 (11.x) and above)
– Maximum des Betriebssystems mit X64 Architektur 4- Operating system maximum with x64 architecture 4
AWE-Mechanismus (Ermöglicht SQL ServerSQL Server , auf 32-Bit-Plattformen über die Beschränkung für den virtuellen Prozessadressraum hinauszugehen.)AWE mechanism (Allows SQL ServerSQL Server to go beyond the process virtual address space limit on 32-bit platform.) Standard-, Enterprise- und Developer-Editionen von SQL ServerSQL Server: Pufferpool kann auf bis zu 64 GB Arbeitsspeicher zugreifen.SQL ServerSQL Server Standard, Enterprise, and Developer editions: Buffer pool is capable of accessing up to 64 GB of memory. Nicht zutreffend 5Not applicable 5
Betriebssystemberechtigung „Lock Pages in Memory“ (ermöglicht das Sperren des physischen Speichers, sodass das Betriebssystem keine Seiten des gesperrten Arbeitsspeichers auslagern kann.) 6Lock pages in memory operating system (OS) privilege (allows locking physical memory, preventing OS paging of the locked memory.) 6 Standard-, Enterprise- und Developer-Editionen von SQL ServerSQL Server: Der SQL ServerSQL Server-Prozess muss den AWE-Mechanismus verwenden.SQL ServerSQL Server Standard, Enterprise, and Developer editions: Required for SQL ServerSQL Server process to use AWE mechanism. Über den AWE-Mechanismus zugeordneter Speicher kann nicht ausgelagert werden.Memory allocated through AWE mechanism cannot be paged out.
Wird dieses Privileg erteilt, ohne dass AWE aktiviert ist, hat dies keine Auswirkungen auf den Server.Granting this privilege without enabling AWE has no effect on the server.
Nur bei Bedarf verwendet, nämlich wenn es Anzeigen gibt, dass der sqlservr-Prozess ausgelagert wird. In diesem Fall wird im Fehlerprotokoll Fehler 17890 gemeldet, ähnlich wie im folgenden Beispiel: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.Only used when necessary, namely if there are signs that sqlservr process is being paged out. In this case, error 17890 will be reported in the Errorlog, resembling the following example: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

1 Ab SQL Server 2014 (12.x)SQL Server 2014 (12.x)sind 32-Bit-Versionen nicht verfügbar.1 32-bit versions are not available starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x).
2 „/3gb“ ist ein Startparameter des Betriebssystems.2 /3gb is an operating system boot parameter. Weitere Informationen finden Sie in der MSDN Library.For more information, visit the MSDN Library.
3 WOW64 (Windows on Windows 64) ist ein Modus, in dem SQL ServerSQL Server (32-Bit) unter einem 64-Bit-Betriebssystem ausgeführt wird.3 WOW64 (Windows on Windows 64) is a mode in which 32-bit SQL ServerSQL Server runs on a 64-bit operating system.
4 SQL ServerSQL Server Standard Edition unterstützt bis zu 128 GB.4 SQL ServerSQL Server Standard Edition supports up to 128 GB. SQL ServerSQL Server Enterprise Edition unterstützt Betriebssystemmaximum.Enterprise Edition supports the operating system maximum.
5 Beachten Sie, dass die Option „sp_configure awe enabled“ in SQL ServerSQL Server(64-Bit) vorhanden ist, jedoch ignoriert wird.5 Note that the sp_configure awe enabled option was present on 64-bit SQL ServerSQL Server, but it is ignored.
6 Wenn die Berechtigung „Lock Pages in Memory (LPIM)“ erteilt wird (entweder für 32-Bit zur Unterstützung von AWE oder für 64-Bit als eigenständige Option), wird empfohlen, auch die Option „Max. Serverarbeitsspeicher“ festzulegen.6 If lock pages in memory privilege (LPIM) is granted (either on 32-bit for AWE support or on 64-bit by itself), we recommend also setting max server memory. Weitere Informationen zu LPIM finden Sie unter Konfigurationsoptionen für den Serverarbeitsspeicher.For more information on LPIM, refer to Server Memory Server Configuration Options

Hinweis

Ältere Versionen von SQL ServerSQL Server können unter einem 32-Bit-Betriebssystem ausgeführt.Older versions of SQL ServerSQL Server could run on a 32-bit operating system. Für den Zugriff auf mehr als 4 GB (Gigabyte) Arbeitsspeicher auf einem 32-Bit-Betriebssystem ist Address Windowing Extensions (AWE) erforderlich, um den Speicher zu verwalten.Accessing more than 4 gigabytes (GB) of memory on a 32-bit operating system required Address Windowing Extensions (AWE) to manage the memory. Dies ist nicht erforderlich, wenn SQL ServerSQL Server unter 64-Bit-Betriebssystemen ausgeführt wird.This is not necessary when SQL ServerSQL Server is running on 64-bit operation systems. Weitere Informationen zu AWE finden Sie unter Prozessadressraum und Verwalten von Arbeitsspeicher für große Datenbanken in der Dokumentation zu SQL Server 2008SQL Server 2008.For more information about AWE, see Process Address Space and Managing Memory for Large Databases in the SQL Server 2008SQL Server 2008 documentation.

Änderungen an der Verwaltung des Arbeitsspeichers ab SQL Server 2012 (11.x)SQL Server 2012 (11.x)Changes to Memory Management starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)

In früheren Versionen von SQL ServerSQL Server (SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 und SQL Server 2008 R2SQL Server 2008 R2) erfolgte die Speicherbelegung mithilfe von fünf verschiedenen Mechanismen:In earlier versions of SQL ServerSQL Server ( SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 and SQL Server 2008 R2SQL Server 2008 R2), memory allocation was done using five different mechanisms:

  • Einzelseitenbelegung (Single-Page Allocator, SPA) , die im SQL ServerSQL Server-Prozess nur Speicherbelegungen umfasst, die kleiner als oder gleich 8 KB waren.Single-Page Allocator (SPA), including only memory allocations that were less than, or equal to 8-KB in the SQL ServerSQL Server process. Die Konfigurationsoptionen Max. Serverarbeitsspeicher (MB) und Min. Serverarbeitsspeicher (MB) bestimmten die Grenzen des vom SPA verbrauchten physischen Arbeitsspeichers.The max server memory (MB) and min server memory (MB) configuration options determined the limits of physical memory that the SPA consumed. Der Pufferpool bildete zugleich den Mechanismus für SPA und den größten Verbraucher für Einzelseitenbelegungen.THe buffer pool was simultaneously the mechanism for SPA, and the largest consumer of single-page allocations.
  • Mehrseitenbelegung (Multi-Page Allocator, MPA) , für Speicherbelegungen, die mehr als 8 KB erfordern.Multi-Page Allocator (MPA), for memory allocations that request more than 8-KB.
  • CLR-Belegung, einschließlich des SQL CLR-Heaps und dessen globaler Belegungen, die während der CLR-Initialisierung erstellt werden.CLR Allocator, including the SQL CLR heaps and its global allocations that are created during CLR initialization.
  • Speicherbelegungen für Threadstapel im SQL ServerSQL Server-Prozess.Memory allocations for thread stacks in the SQL ServerSQL Server process.
  • Direkte Windows-Belegungen (Direct Windows allocations, DWA) für Speicherbelegungsanforderungen, die direkt an Windows gerichtet sind.Direct Windows allocations (DWA), for memory allocation requests made directly to Windows. Dazu gehören die Windows-Heapnutzung und direkte virtuelle Belegungen von Modulen, die in den SQL ServerSQL Server-Prozess geladen werden.These include Windows heap usage and direct virtual allocations made by modules that are loaded into the SQL ServerSQL Server process. Beispiele für solche Speicherbelegungsanforderungen beinhalten Belegungen von DLLs erweiterter gespeicherter Prozeduren, Objekte, die mithilfe von Automatisierungsprozeduren (sp_OA-Aufrufen) erstellt werden, und Belegungen von verknüpften Serveranbietern.Examples of such memory allocation requests include allocations from extended stored procedure DLLs, objects that are created by using Automation procedures (sp_OA calls), and allocations from linked server providers.

Seit SQL Server 2012 (11.x)SQL Server 2012 (11.x) sind alle Einzelseitenbelegungen, Mehrseitenbelegungen und CLR-Belegungen in einer Seitenbelegung beliebiger Größe konsolidiert. Diese ist in den Speichergrenzwerten enthalten, die durch die Konfigurationsoptionen Max. Serverarbeitsspeicher (MB) und Min. Serverarbeitsspeicher (MB) gesteuert werden.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), Single-Page allocations, Multi-Page allocations and CLR allocations are all consolidated into a "Any size" Page Allocator, and it's included in memory limits that are controlled by max server memory (MB) and min server memory (MB) configuration options. Diese Änderung ermöglichte eine genauere Dimensionierung für alle Arbeitsspeicheranforderungen, die von der SQL ServerSQL Server-Arbeitsspeicherverwaltung verarbeitet werden.This change provided a more accurate sizing ability for all memory requirements that go through the SQL ServerSQL Server memory manager.

Wichtig

Überprüfen Sie Ihre aktuellen Konfigurationen von Max. Serverarbeitsspeicher (MB) und Min. Serverarbeitsspeicher (MB) nach dem Upgrade auf SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2019 (15.x)SQL Server 2019 (15.x).Carefully review your current max server memory (MB) and min server memory (MB) configurations after you upgrade to SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2019 (15.x)SQL Server 2019 (15.x). Das hat den Grund, dass diese Konfigurationen seit SQL Server 2012 (11.x)SQL Server 2012 (11.x) im Vergleich zu früheren Versionen jetzt mehr Arbeitsspeicherbelegungen umfassen.This is because starting in SQL Server 2012 (11.x)SQL Server 2012 (11.x), such configurations now include and account for more memory allocations compared to earlier versions. Diese Änderungen betreffen sowohl 32-Bit- als auch 64-Bit-Versionen von SQL Server 2012 (11.x)SQL Server 2012 (11.x) und SQL Server 2014 (12.x)SQL Server 2014 (12.x) sowie 64-Bit-Versionen von SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2019 (15.x)SQL Server 2019 (15.x).These changes apply to both 32-bit and 64-bit versions of SQL Server 2012 (11.x)SQL Server 2012 (11.x) and SQL Server 2014 (12.x)SQL Server 2014 (12.x), and 64-bit versions of SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2019 (15.x)SQL Server 2019 (15.x).

In der folgenden Tabelle ist aufgeführt, ob ein bestimmter Typ von Speicherbelegung durch die Konfigurationsoptionen Max. Serverarbeitsspeicher (MB) und Min. Serverarbeitsspeicher (MB) gesteuert wird:The following table indicates whether a specific type of memory allocation is controlled by the max server memory (MB) and min server memory (MB) configuration options:

Typ der SpeicherbelegungType of memory allocation SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 und SQL Server 2008 R2SQL Server 2008 R2, SQL Server 2008SQL Server 2008 and SQL Server 2008 R2SQL Server 2008 R2 Seit SQL Server 2012 (11.x)SQL Server 2012 (11.x)Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)
EinzelseitenbelegungenSingle-page allocations JaYes Ja, in Seitenbelegungen beliebiger Größe konsolidiertYes, consolidated into "any size" page allocations
MehrseitenbelegungenMulti-page allocations NeinNo Ja, in Seitenbelegungen beliebiger Größe konsolidiertYes, consolidated into "any size" page allocations
CLR-BelegungenCLR allocations NeinNo JaYes
Threadstapel-ArbeitsspeicherThread stacks memory NeinNo NeinNo
Direkte Belegungen von WindowsDirect allocations from Windows NeinNo NeinNo

Ab SQL Server 2012 (11.x)SQL Server 2012 (11.x), SQL ServerSQL Server wird möglicherweise mehr Arbeitsspeicher als der in der Einstellung „Max. Serverarbeitsspeicher“ angegebene Wert zugewiesen.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), SQL ServerSQL Server might allocate more memory than the value specified in the max server memory setting. Dieses Verhalten kann auftreten, wenn der Wert für Serverspeicher gesamt (KB) bereits die Einstellung Zielserverspeicher (KB) erreicht hat, die als maximaler Serverarbeitsspeicher angegeben ist.This behavior may occur when the Total Server Memory (KB) value has already reached the Target Server Memory (KB) setting (as specified by max server memory). Wenn nicht ausreichend zusammenhängender freier Arbeitsspeicher vorhanden ist, um die Anforderung von Mehrseiten-Speicheranforderungen (mehr als 8 KB) zu bedienen, da der Arbeitsspeicher fragmentiert ist, kann SQL ServerSQL Server eine Zusage über den Grenzwert hinaus vornehmen, statt die Arbeitsspeicheranforderung zurückzuweisen.If there is insufficient contiguous free memory to meet the demand of multi-page memory requests (more than 8 KB) because of memory fragmentation, SQL ServerSQL Server can perform over-commitment instead of rejecting the memory request.

Sobald diese Belegung vorgenommen wird, startet die Hintergrundaufgabe Ressourcenmonitor, um alle Arbeitsspeicherverbraucher aufzufordern, den belegten Arbeitsspeicher freizugeben, und versucht, den Wert von Serverspeicher gesamt (KB) unter die Angabe für Zielserverspeicher (KB) zu bringen.As soon as this allocation is performed, the Resource Monitor background task starts to signal all memory consumers to release the allocated memory, and tries to bring the Total Server Memory (KB) value below the Target Server Memory (KB) specification. Aus diesem Grund kann die Arbeitsspeicherbelegung von SQL ServerSQL Server kurzzeitig den Wert der Einstellung „Max. Serverarbeitsspeicher“ übersteigen.Therefore, SQL ServerSQL Server memory usage could briefly exceed the max server memory setting. In dieser Situation überschreitet der gemeldete Wert des Leistungsindikators Serverspeicher gesamt (KB) die Einstellungen für „Max. Serverarbeitsspeicher“ und Zielserverspeicher (KB) .In this situation, the Total Server Memory (KB) performance counter reading will exceed the max server memory and Target Server Memory (KB) settings.

Dieses Verhalten wird normalerweise während folgender Vorgänge beobachtet:This behavior is typically observed during the following operations:

  • Umfangreiche Columnstore-Indexabfragen.Large Columnstore index queries.
  • Erstellungen und Neuerstellungen des Columnstore-Index, die viel Arbeitsspeicher für die Ausführung von Hash- und Sortiervorgängen benötigen.Columnstore index (re)builds, which use large volumes of memory to perform Hash and Sort operations.
  • Sicherungsvorgänge, die große Speicherpuffer erfordern.Backup operations that require large memory buffers.
  • Ablaufverfolgungsvorgänge, die große Eingabeparameter speichern müssen.Tracing operations that have to store large input parameters.

Änderungen an "memory_to_reserve" ab SQL Server 2012 (11.x)SQL Server 2012 (11.x)Changes to "memory_to_reserve" starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)

In früheren Versionen von SQL Server (SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 und SQL Server 2008 R2SQL Server 2008 R2) reservierte die SQL ServerSQL Server-Arbeitsspeicherverwaltung einen Teil des virtuellen Prozessadressbereichs (Process Virtual Address Space, VAS) für die Verwendung durch die Mehrseitenbelegung (Multi-Page Allocation, MPA) , CLR-Belegung, Speicherbelegungen für Threadstapel im SQL Server-Prozess und Direkte Belegungen von Windows (Direct Windows Allocations, DWA) .In earlier versions of SQL Server ( SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 and SQL Server 2008 R2SQL Server 2008 R2), the SQL ServerSQL Server memory manager set aside a part of the process virtual address space (VAS) for use by the Multi-Page Allocator (MPA), CLR Allocator, memory allocations for thread stacks in the SQL Server process, and Direct Windows allocations (DWA). Dieser Teil des virtuellen Adressbereichs wird auch als „Zu belassender Arbeitsspeicher“ oder „Nicht-Pufferpool“-Bereich bezeichnet.This part of the virtual address space is also known as "Mem-To-Leave" or "non-Buffer Pool" region.

Der virtuelle Adressbereich, der für diese Zuteilungen reserviert ist, wird durch die Konfigurationsoption memory_to_reserve festgelegt.The virtual address space that is reserved for these allocations is determined by the memory_to_reserve configuration option. Der von SQL ServerSQL Server verwendete Standardwert ist 256 MB.The default value that SQL ServerSQL Server uses is 256 MB. Verwenden Sie den SQL ServerSQL Server-Startparameter -g, um den Standardwert zu überschreiben.To override the default value, use the SQL ServerSQL Server -g startup parameter. Informationen zum Startparameter -g finden Sie auf der Dokumentationsseite zu Startoptionen für den Datenbank-Engine-Dienst.Refer to the documentation page on Database Engine Service Startup Options for information on the -g startup parameter.

Da seit SQL Server 2012 (11.x)SQL Server 2012 (11.x) Speicherbelegungen oberhalb von 8 KB ebenfalls von der Seitenbelegung beliebiger Größe vorgenommen werden, schließt der Wert von memory_to_reserve die Mehrseitenbelegungen nicht ein.Because starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), the new "any size" page allocator also handles allocations greater than 8 KB, the memory_to_reserve value does not include the multi-page allocations. Von dieser Änderung abgesehen bleibt bei dieser Konfigurationsoption alles unverändert.Except for this change, everything else remains the same with this configuration option.

Der folgenden Tabelle können Sie entnehmen, ob ein bestimmter Typ Speicherbelegung in den Bereich memory_to_reserve des virtuellen Adressbereichs für den SQL ServerSQL Server-Prozess fällt:The following table indicates whether a specific type of memory allocation falls into the memory_to_reserve region of the virtual address space for the SQL ServerSQL Server process:

Typ der SpeicherbelegungType of memory allocation SQL Server 2005 (9.x)SQL Server 2005 (9.x), SQL Server 2008SQL Server 2008 und SQL Server 2008 R2SQL Server 2008 R2, SQL Server 2008SQL Server 2008 and SQL Server 2008 R2SQL Server 2008 R2 Seit SQL Server 2012 (11.x)SQL Server 2012 (11.x)Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)
EinzelseitenbelegungenSingle-page allocations NeinNo Nein, in Seitenbelegungen beliebiger Größe konsolidiertNo, consolidated into "any size" page allocations
MehrseitenbelegungenMulti-page allocations JaYes Nein, in Seitenbelegungen beliebiger Größe konsolidiertNo, consolidated into "any size" page allocations
CLR-BelegungenCLR allocations JaYes JaYes
Threadstapel-ArbeitsspeicherThread stacks memory JaYes JaYes
Direkte Belegungen von WindowsDirect allocations from Windows JaYes JaYes

Dynamische ArbeitsspeicherverwaltungDynamic Memory Management

Die Arbeitsspeicherverwaltung von SQL Server-Datenbank-EngineSQL Server Database Engine ruft standardmäßig so viel Arbeitsspeicher wie nötig ab, ohne dass es dabei zu einem Speicherengpass auf dem System kommt.The default memory management behavior of the SQL Server-Datenbank-EngineSQL Server Database Engine is to acquire as much memory as it needs without creating a memory shortage on the system. SQL Server-Datenbank-EngineSQL Server Database Engine verwendet dazu die für Arbeitsspeicherbenachrichtigungen verfügbaren APIs in Microsoft Windows.The SQL Server-Datenbank-EngineSQL Server Database Engine does this by using the Memory Notification APIs in Microsoft Windows.

Bei dynamischer Verwendung des Arbeitsspeichers von SQL ServerSQL Server wird der im System verfügbare Arbeitsspeicher in regelmäßigen Abständen abgefragt.When SQL ServerSQL Server is using memory dynamically, it queries the system periodically to determine the amount of free memory. Bei Beibehaltung dieses freien Arbeitsspeichers werden Auslagerungsvorgänge durch das Betriebssystem verhindert.Maintaining this free memory prevents the operating system (OS) from paging. Wenn weniger freier Arbeitsspeicher vorhanden ist, gibt SQL ServerSQL Server Arbeitsspeicher für das Betriebssystem frei.If less memory is free, SQL ServerSQL Server releases memory to the OS. Wenn mehr Arbeitsspeicher frei ist, kann SQL ServerSQL Server auch mehr Speicher reservieren.If more memory is free, SQL ServerSQL Server may allocate more memory. SQL ServerSQL Server fügt Arbeitsspeicher nur dann hinzu, wenn durch die Arbeitsauslastung mehr Arbeitsspeicher erforderlich ist. Bei einem ruhenden Server wird die Größe seines virtuellen Adressraums nicht vergrößert.adds memory only when its workload requires more memory; a server at rest does not increase the size of its virtual address space.

Max. Serverarbeitsspeicher steuert die SQL ServerSQL Server-Speicherbelegung, die Arbeitsspeicherkompilierung, alle Caches (einschließlich des Pufferpools), Arbeitsspeicherzuweisungen für die Abfrageausführung, den Arbeitsspeicher für den Sperren-Manager und den CLR-Arbeitsspeicher 1 (im Wesentlichen alle Arbeitsspeicherclerks in sys.dm_os_memory_clerks ).Max server memory controls the SQL ServerSQL Server memory allocation, compile memory, all caches (including the buffer pool), query execution memory grants, lock manager memory, and CLR1 memory (essentially any memory clerk found in sys.dm_os_memory_clerks).

1-CLR-Speicher wird seit SQL Server 2012 (11.x)SQL Server 2012 (11.x) unter max_server-memory-Belegungen verwaltet.1 CLR memory is managed under max_server_memory allocations starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x).

Die folgende Abfrage gibt Informationen über den aktuell belegten Arbeitsspeicher zurück:The following query returns information about currently allocated memory:

SELECT 
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
    large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
    locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
    virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
    virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
    virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
    page_fault_count AS sql_page_fault_count,
    memory_utilization_percentage AS sql_memory_utilization_percentage, 
    process_physical_memory_low AS sql_process_physical_memory_low, 
    process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;  

Arbeitsspeicher für Threadstapel1, CLR2, DLL-Dateien von erweiterten Prozeduren, OLE DB-Anbieter, auf die verteilte Abfragen verweisen, Automatisierungsobjekte, auf die Transact-SQLTransact-SQL-Anweisungen verweisen, und jede Art von Arbeitsspeicher, die von nicht zu SQL ServerSQL Server gehörenden DLLs belegt wird, werden nicht durch „Max. Serverarbeitsspeicher“ gesteuert.Memory for thread stacks1, CLR2, extended procedure .dll files, the OLE DB providers referenced by distributed queries, automation objects referenced in Transact-SQLTransact-SQL statements, and any memory allocated by a non SQL ServerSQL Server DLL are not controlled by max server memory.

1 Informationen zu den standardmäßig berechneten Arbeitsthreads für eine bestimmte Anzahl kategorisierter CPUs auf dem aktuellen Host finden Sie auf der Dokumentationsseite zum Konfigurieren der Serverkonfigurationsoption Maximale Anzahl von Arbeitsthreads.1 Refer to the documentation page on how to Configure the max worker threads Server Configuration Option, for information on the calculated default worker threads for a given number of affinitized CPUs in the current host. Die Stapelgrößen für SQL ServerSQL Server sind wie folgt:SQL ServerSQL Server stack sizes are as follows:

SQL Server-ArchitekturSQL Server Architecture BetriebssystemarchitekturOS Architecture StapelgrößeStack Size
X86 (32-Bit)x86 (32-bit) X86 (32-Bit)x86 (32-bit) 512 KB512 KB
X86 (32-Bit)x86 (32-bit) X64 (64-Bit)x64 (64-bit) 768 KB768 KB
X64 (64-Bit)x64 (64-bit) X64 (64-Bit)x64 (64-bit) 2048 KB2048 KB
IA64 (Itanium)IA64 (Itanium) IA64 (Itanium)IA64 (Itanium) 4096 KB4096 KB

2 CLR-Arbeitsspeicher wird seit SQL Server 2012 (11.x)SQL Server 2012 (11.x) unter max_server_memory-Belegungen verwaltet.2 CLR memory is managed under max_server_memory allocations starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x).

SQL ServerSQL Server Mithilfe der für Speicherbenachrichtigungen verfügbaren API QueryMemoryResourceNotification ermittelt SQL Server, wann der SQL ServerSQL Server-Speicher-Manager Speicher zuordnen oder freigeben kann.uses the memory notification API QueryMemoryResourceNotification to determine when the SQL ServerSQL Server Memory Manager may allocate memory and release memory.

Beim Starten berechnet SQL ServerSQL Server die Größe des virtuellen Adressraumes für den Pufferpool auf Grundlage verschiedener Parameter, z. B. der Größe des physischen Arbeitsspeichers des Systems, der Anzahl der Serverthreads und verschiedener Startparameter.When SQL ServerSQL Server starts, it computes the size of virtual address space for the buffer pool based on a number of parameters such as amount of physical memory on the system, number of server threads and various startup parameters. SQL ServerSQL Server reserviert die berechnete Größe des virtuellen Adressraumes für den Pufferpool, verwendet jedoch nur die für die aktuelle Last erforderliche Größe an physischem Arbeitsspeicher.reserves the computed amount of its process virtual address space for the buffer pool, but it acquires (commits) only the required amount of physical memory for the current load.

Die Instanz greift dann je nach Arbeitsauslastung auf weiteren Arbeitsspeicher zu.The instance then continues to acquire memory as needed to support the workload. Wenn weitere Benutzer eine Verbindung herstellen und Abfragen ausführen, ruft SQL ServerSQL Server dem Bedarf entsprechend zusätzlichen physischen Arbeitsspeicher ab.As more users connect and run queries, SQL ServerSQL Server acquires the additional physical memory on demand. Eine SQL ServerSQL Server-Instanz ordnet so lange zusätzlichen physischen Arbeitsspeicher zu, bis entweder die Zielvorgabe „Max. Serverarbeitsspeicher“ erreicht ist oder das Betriebssystem anzeigt, dass kein weiterer freier Arbeitsspeicher zur Verfügung steht. Die Instanz gibt Arbeitsspeicher frei, wenn die Einstellung für „Min. Serverarbeitsspeicher“ überschritten wird oder das Betriebssystem anzeigt, dass zu wenig freier Arbeitsspeicher vorhanden ist.A SQL ServerSQL Server instance continues to acquire physical memory until it either reaches its max server memory allocation target or the OS indicates there is no longer an excess of free memory; it frees memory when it has more than the min server memory setting, and the OS indicates that there is a shortage of free memory.

Sobald weitere Anwendungen auf einem Computer gestartet werden, auf dem eine Instanz von SQL ServerSQL Serverausgeführt wird, benötigen sie Arbeitsspeicher, sodass der Umfang des freien physischen Arbeitsspeichers auf einen Wert unter dem SQL ServerSQL Server -Ziel fällt.As other applications are started on a computer running an instance of SQL ServerSQL Server, they consume memory and the amount of free physical memory drops below the SQL ServerSQL Server target. Die Instanz von SQL ServerSQL Server passt ihren Arbeitsspeicherverbrauch an.The instance of SQL ServerSQL Server adjusts its memory consumption. Wenn eine andere Anwendung beendet wird und mehr Arbeitsspeicher verfügbar wird, vergrößert die Instanz von SQL ServerSQL Server die Speicherbelegung.If another application is stopped and more memory becomes available, the instance of SQL ServerSQL Server increases the size of its memory allocation. SQL ServerSQL Server kann mehrere MB Arbeitsspeicher pro Sekunde freigeben und reservieren, um schnell auf Änderungen der Speicherbelegung zu reagieren.can free and acquire several megabytes of memory each second, allowing it to quickly adjust to memory allocation changes.

Auswirkungen der Konfigurationsoptionen Min. Serverarbeitsspeicher und Max. ServerarbeitsspeicherEffects of min and max server memory

Durch die Konfigurationsoptionen Min. Serverarbeitsspeicher und Max. Serverarbeitsspeicher werden die obere und untere Grenze für den Umfang des Speichers festgelegt, der vom Pufferpool und anderen Caches der SQL ServerSQL Server-Datenbank-Engine verwendet wird.The min server memory and max server memory configuration options establish upper and lower limits to the amount of memory used by the buffer pool and other caches of the SQL ServerSQL Server Database Engine. Der Pufferpool reserviert nicht sofort die Menge an Speicher, die durch „Min. Serverarbeitsspeicher“ angegeben wurde.The buffer pool does not immediately acquire the amount of memory specified in min server memory. Der Pufferpool reserviert zuerst nur so viel Speicher, wie für die Initialisierung erforderlich ist.The buffer pool starts with only the memory required to initialize. Mit ansteigender Arbeitsauslastung von SQL Server-Datenbank-EngineSQL Server Database Engine wird weiterer Speicher reserviert, um die Arbeitsauslastung zu unterstützen.As the SQL Server-Datenbank-EngineSQL Server Database Engine workload increases, it keeps acquiring the memory required to support the workload. Der Pufferpool gibt erst dann einen Teil des reservierten Speichers wieder frei, wenn der unter „Min. Serverarbeitsspeicher“ angegebene Wert erreicht wurde.The buffer pool does not free any of the acquired memory until it reaches the amount specified in min server memory. Sobald „Min. Serverarbeitsspeicher“ erreicht ist, verwendet der Pufferpool den Standardalgorithmus, um Speicher nach Bedarf zu reservieren und freizugeben.Once min server memory is reached, the buffer pool then uses the standard algorithm to acquire and free memory as needed. Der einzige Unterschied besteht darin, dass der Pufferpool bei der Speicherbelegung nie unter die Ebene absinkt, die durch „Min. Serverarbeitsspeicher“ angegeben ist, und nie mehr Speicher reserviert, als durch die unter „Max. Serverarbeitsspeicher“ angegebene Ebene angegeben ist.The only difference is that the buffer pool never drops its memory allocation below the level specified in min server memory, and never acquires more memory than the level specified in max server memory.

Hinweis

SQL ServerSQL Server reserviert als Prozess mehr Speicher als durch die Option „Max. Serverarbeitsspeicher“ angegeben wird.as a process acquires more memory than specified by max server memory option. Sowohl interne als auch externe Komponenten können Speicher außerhalb des Pufferpools belegen; dies führt zur Beanspruchung zusätzlicher Speicherkapazitäten, der dem Pufferpool zugeordnete Speicher stellt jedoch normalerweise trotzdem den größten Teil des von SQL ServerSQL Server belegten Speichers dar.Both internal and external components can allocate memory outside of the buffer pool, which consumes additional memory, but the memory allocated to the buffer pool usually still represents the largest portion of memory consumed by SQL ServerSQL Server.

Der Umfang des von SQL Server-Datenbank-EngineSQL Server Database Engine reservierten Speichers hängt ausschließlich von der Arbeitsauslastung der jeweiligen Instanz ab.The amount of memory acquired by the SQL Server-Datenbank-EngineSQL Server Database Engine is entirely dependent on the workload placed on the instance. Eine SQL ServerSQL Server -Instanz, die nur wenige Anforderungen verarbeitet, wird den Wert von „Min. Serverarbeitsspeicher“ möglicherweise nie erreichen.A SQL ServerSQL Server instance that is not processing many requests may never reach min server memory.

Wenn für „Min. Serverarbeitsspeicher“ und „Max. Serverarbeitsspeicher“ derselbe Wert angegeben wurde, beendet SQL Server-Datenbank-EngineSQL Server Database Engine die dynamische Freigabe und Zuordnung von Speicher für den Pufferpool, sobald der SQL Server-Datenbank-EngineSQL Server Database Engine zugeordnete Speicher diesen Wert erreicht hat.If the same value is specified for both min server memory and max server memory, then once the memory allocated to the SQL Server-Datenbank-EngineSQL Server Database Engine reaches that value, the SQL Server-Datenbank-EngineSQL Server Database Engine stops dynamically freeing and acquiring memory for the buffer pool.

Wenn eine Instanz von SQL ServerSQL Server auf einem Computer ausgeführt wird, auf dem häufig andere Anwendungen gestartet oder beendet werden, kann das Starten anderer Anwendungen durch die Belegung und Freigabe von Speicher, die durch die Instanz von SQL ServerSQL Server vorgenommen wird, verlangsamt werden.If an instance of SQL ServerSQL Server is running on a computer where other applications are frequently stopped or started, the allocation and deallocation of memory by the instance of SQL ServerSQL Server may slow the startup times of other applications. Wenn SQL ServerSQL Server eine von mehreren Serveranwendungen ist, die auf einem einzelnen Computer ausgeführt werden, kann es darüber hinaus erforderlich sein, dass der Umfang des SQL ServerSQL Serverzugeordneten Speichers von Systemadministratoren gesteuert wird.Also, if SQL ServerSQL Server is one of several server applications running on a single computer, the system administrators may need to control the amount of memory allocated to SQL ServerSQL Server. In solchen Fällen können Sie mithilfe der Optionen „Min. Serverarbeitsspeicher“ und „Max. Serverarbeitsspeicher“ steuern, wie viel Speicher von SQL ServerSQL Server verwendet werden kann.In these cases, you can use the min server memory and max server memory options to control how much memory SQL ServerSQL Server can use. Die Optionen Min. Serverarbeitsspeicher und Max. Serverarbeitsspeicher werden in Megabyte angegeben.The min server memory and max server memory options are specified in megabytes. Weitere Informationen finden Sie unter Konfigurationsoptionen für den Serverarbeitsspeicher.For more information, see Server Memory Configuration Options.

Spezifikationen für den von SQL Server-Objekten verwendeten ArbeitsspeicherMemory used by SQL Server objects specifications

In der folgenden Liste werden die Richtwerte für den Arbeitsspeicher beschrieben, den die einzelnen Objekte in SQL ServerSQL Serverbelegen.The following list describes the approximate amount of memory used by different objects in SQL ServerSQL Server. Die aufgeführten Angaben sind Schätzwerte und können je nach Umgebung und Erstellung der Objekte variieren:The amounts listed are estimates and can vary depending on the environment and how objects are created:

  • Sperre (durch den Sperren-Manager verwaltet): 64 Bytes + 32 Bytes pro BesitzerLock (as maintained by the Lock Manager): 64 bytes + 32 bytes per owner
  • Benutzerverbindung: Ca. (3 * Netzwerkpaketgröße + 94 KB)User connection: Approximately (3 * network_packet_size + 94 kb)

Die Netzwerkpaketgröße entspricht der Größe der TDS-Pakete (Tabular Data Stream), die für die Kommunikation zwischen Anwendungen und der SQL ServerSQL Server-Datenbank-Engine verwendet werden.The network packet size is the size of the tabular data scheme (TDS) packets that are used to communicate between applications and the SQL ServerSQL Server Database Engine. Die Standardpaketgröße beträgt 4 KB und wird durch die Konfigurationsoption Netzwerkpaketgröße gesteuert.The default packet size is 4 KB, and is controlled by the network packet size configuration option.

Wenn mehrere aktive Resultsets (Multiple Active Result Sets, MARS) aktiviert sind, benötigt die Benutzerverbindung ca. (3 + 3 *numerische_logische_Verbindungen)* Netzwerkpaketgröße + 94 KB.When multiple active result sets (MARS) are enabled, the user connection is approximately (3 + 3 * num_logical_connections) * network_packet_size + 94 KB

Auswirkungen von „Min. Arbeitsspeicher pro Abfrage“Effects of min memory per query

Sie können mithilfe der Konfigurationsoption Min. Arbeitsspeicher pro Abfrage die Mindestmenge an Arbeitsspeicher (in KB) festlegen, die für das Ausführen einer Abfrage zugeordnet wird.The min memory per query configuration option establishes the minimum amount of memory (in kilobytes) that will be allocated for the execution of a query. Dies ist auch als minimale Arbeitsspeicherzuweisung bekannt.This is also known as the minimum memory grant. Alle Abfragen müssen warten, bis der mindestens erforderliche Arbeitsspeicher zugesichert werden kann oder bis der Wert überschritten wird, der in der Serverkonfigurationsoption „Abfragewartezeit“ angegeben ist, bevor die Ausführung gestartet wird.All queries must wait until the minimum memory requested can be secured, before execution can start, or until the value specified in the query wait server configuration option is exceeded. Der Wartetyp, der in diesem Szenario gesammelt wird, ist RESOURCE_SEMAPHORE.The wait type that is accumulated in this scenario is RESOURCE_SEMAPHORE.

Wichtig

Legen Sie die Konfigurationsoption „Min. Arbeitsspeicher pro Abfrage“ nicht auf einen zu hohen Wert fest, insbesondere nicht auf stark ausgelasteten Systemen, da dadurch Folgendes verursacht werden kann:Do not set the min memory per query server configuration option too high, especially on very busy systems, because doing so could lead to:

  • Stärkerer Wettbewerb um Arbeitsspeicherressourcen.Increased competition for memory resources.
  • Verringerte Parallelität durch den erhöhten Bedarf an Arbeitsspeicher für jede einzelne Abfrage, auch wenn zur Laufzeit weniger Arbeitsspeicher als in dieser Konfiguration erforderlich ist.Decreased concurrency by increasing the amount of memory for every single query, even if the required memory at runtime is lower that this configuration.

Empfehlungen zur Verwendung dieser Konfiguration finden Sie unter Konfigurieren der Serverkonfigurationsoption „Min. Arbeitsspeicher pro Abfrage“.For recommendations on using this configuration, see Configure the min memory per query Server Configuration Option.

Überlegungen zur ArbeitsspeicherzuweisungMemory grant considerations

Für die Zeilenmodusausführung kann die ursprüngliche Arbeitsspeicherzuweisung nicht überschritten werden.For row mode execution, the initial memory grant cannot be exceeded under any condition. Wenn mehr Arbeitsspeicher als ursprünglich zugewiesen erforderlich ist, um Hash- oder Sortiervorgänge durchzuführen, laufen diese auf den Datenträger über.If more memory than the initial grant is needed to execute hash or sort operations, then these will spill to disk. Ein überlaufender Hashvorgang wird von einer Arbeitsdatei in tempDB unterstützt, während ein überlaufender Sortiervorgang von einer Arbeitstabelle unterstützt wird.A hash operation that spills is supported by a Workfile in TempDB, while a sort operation that spills is supported by a Worktable.

Ein Überlauf, der während eines Sortiervorgangs auftritt, wird als Sortierwarnung bezeichnet.A spill that occurs during a Sort operation is known as a Sort Warning. Sortierwarnungen zeigen an, dass der Arbeitsspeicher für Sortiervorgänge nicht ausreicht.Sort warnings indicate that sort operations do not fit into memory. Darin sind keine Sortiervorgänge eingeschlossen, die die Indexerstellung beinhalten, sondern nur Sortiervorgänge innerhalb einer Abfrage (z.B. eine ORDER BY-Klausel in einer SELECT-Anweisung).This does not include sort operations involving the creation of indexes, only sort operations within a query (such as an ORDER BY clause used in a SELECT statement).

Ein Überlauf, der während eines Hashvorgangs auftritt, wird als Hashwarnung bezeichnet.A spill that occurs during a hash operation is known as a Hash Warning. Hashwarnungen treten auf, wenn während eines Hashvorgangs eine Hashrekursion oder eine Beendigung des Hashings (Hashabbruch) auftritt.These occur when a hash recursion or cessation of hashing (hash bailout) has occurred during a hashing operation.

  • Die Hashrekursion tritt auf, wenn die Eingabe für den verfügbaren Arbeitsspeicher zu groß ist und deshalb auf mehrere Partitionen verteilt wird, die separat verarbeitet werden.Hash recursion occurs when the build input does not fit into available memory, resulting in the split of input into multiple partitions that are processed separately. Sollten diese Partitionen für den Arbeitsspeicher immer noch zu groß sein, werden sie in Unterpartitionen aufgeteilt, die dann ebenfalls separat verarbeitet werden.If any of these partitions still do not fit into available memory, it is split into sub-partitions, which are also processed separately. Dieser Vorgang wird so lange fortgesetzt, bis jede Partition in den verfügbaren Arbeitsspeicher passt oder die maximale Rekursionsebene erreicht ist.This splitting process continues until each partition fits into available memory or until the maximum recursion level is reached.
  • Ein Hashabbruch tritt auf, wenn ein Hashvorgang die maximale Rekursionsebene erreicht hat und ein alternativer Plan verwendet wird, um die restlichen Partitionsdaten zu verarbeiten.Hash bailout occurs when a hashing operation reaches its maximum recursion level and shifts to an alternate plan to process the remaining partitioned data. Diese Ereignisse können zu verringerter Leistung auf Ihrem Server führen.These events can cause reduced performance in your server.

Für die Batchmodusausführung kann die ursprüngliche Arbeitsspeicherzuweisung standardmäßig bis zu einem bestimmten internen Schwellenwert dynamisch erhöht werden.For batch mode execution, the initial memory grant can dynamically increase up to a certain internal threshold by default. Dieser Mechanismus der dynamischen Arbeitsspeicherzuweisung wurde dafür entwickelt, die speicherresidente Ausführung von Hash- und Sortiervorgängen im Batchmodus zu ermöglichen.This dynamic memory grant mechanism is designed to allow memory resident execution of hash or sort operations running in batch mode. Wenn diese Vorgänge immer noch zu viel Arbeitsspeicher erfordern, laufen diese auf den Datenträger über.If these operations still do not fit into memory, then these will spill to disk.

Weitere Informationen zu den Ausführungsmodi finden Sie unter Handbuch zur Architektur der Abfrageverarbeitung.For more information on execution modes, see the Query Processing Architecture Guide.

PufferverwaltungBuffer management

Der Hauptzweck einer SQL ServerSQL Server -Datenbank ist das Speichern und Abrufen von Daten. Daher stellt eine hohe Ein-/Ausgabe auf dem Datenträger ein Hauptmerkmal der Datenbank-Engine dar.The primary purpose of a SQL ServerSQL Server database is to store and retrieve data, so intensive disk I/O is a core characteristic of the Database Engine. Datenträger-E/A-Vorgänge beanspruchen viele Ressourcen und benötigen relativ viel Zeit für die Ausführung. Daher ist SQL ServerSQL Server so konzipiert, dass E/A-Vorgänge möglichst effizient gestaltet werden.And because disk I/O operations can consume many resources and take a relatively long time to finish, SQL ServerSQL Server focuses on making I/O highly efficient. Die Pufferverwaltung ist eine zentrale Komponente zum Erreichen dieser Effizienz.Buffer management is a key component in achieving this efficiency. Die Pufferverwaltungskomponente weist zwei Mechanismen auf: den Puffer-Manager, mit dem auf Datenbankseiten zugegriffen wird und mit dem sie aktualisiert werden, und den Puffercache (auch als Pufferpool bezeichnet), mit dem Datenbankdatei-E/A-Vorgänge reduziert werden.The buffer management component consists of two mechanisms: the buffer manager to access and update database pages, and the buffer cache (also called the buffer pool), to reduce database file I/O.

Funktionsweise der PufferverwaltungHow buffer management works

Ein Puffer ist eine 8-KB-Seite im Arbeitsspeicher. Dies entspricht der Größe einer Datenseite oder Indexseite.A buffer is an 8 KB page in memory, the same size as a data or index page. Der Puffercache ist ebenfalls in Seiten von je 8 KB unterteilt.Thus, the buffer cache is divided into 8 KB pages. Mit dem Puffer-Manager werden die Funktionen verwaltet, mit denen Daten- oder Indexseiten aus Datenbankdatenträgerdateien in den Puffercache geladen und geänderte Seiten zurück auf den Datenträger geschrieben werden.The buffer manager manages the functions for reading data or index pages from the database disk files into the buffer cache and writing modified pages back to disk. Eine Seite verbleibt im Puffercache, bis der Pufferbereich vom Puffer-Manager zum Laden weiterer Daten benötigt wird.A page remains in the buffer cache until the buffer manager needs the buffer area to read in more data. Daten werden nur dann zurück auf den Datenträger geschrieben, wenn sie geändert wurden.Data is written back to disk only if it is modified. Daten im Puffercache können mehrfach geändert werden, bevor sie zurück auf den Datenträger geschrieben werden.Data in the buffer cache can be modified multiple times before being written back to disk. Weitere Informationen finden Sie unter Lesen von Seiten und Schreiben von Seiten.For more information, see Reading Pages and Writing Pages.

Beim Starten berechnet SQL ServerSQL Server die Größe des virtuellen Adressraums für den Puffercache auf Grundlage verschiedener Parameter, z.B. der Größe des physischen Arbeitsspeichers des Systems, der konfigurierten Anzahl maximaler Serverthreads und verschiedener Startparameter.When SQL ServerSQL Server starts, it computes the size of virtual address space for the buffer cache based on a number of parameters such as the amount of physical memory on the system, the configured number of maximum server threads, and various startup parameters. SQL ServerSQL Server reserviert die berechnete Größe des virtuellen Adressraums (das Arbeitsspeicherziel) für den Puffercache, verwendet jedoch nur die für die aktuelle Last erforderliche Größe an physischem Arbeitsspeicher.reserves this computed amount of its process virtual address space (called the memory target) for the buffer cache, but it acquires (commits) only the required amount of physical memory for the current load. Sie können die Spalten bpool_commit_target und bpool_committed in der Katalogsicht der sys.dm_os_sys_info abfragen, um die Anzahl der als Arbeitsspeicherziel reservierten Seiten bzw. die Anzahl der Seiten zurückzugeben, für die im Puffercache ein Commit ausgeführt wird.You can query the bpool_commit_target and bpool_committed columns in the sys.dm_os_sys_info catalog view to return the number of pages reserved as the memory target and the number of pages currently committed in the buffer cache, respectively.

Das Intervall zwischen dem Start von SQL ServerSQL Server und dem Zeitpunkt, wenn der Puffercache sein Arbeitsspeicherziel erreicht hat, wird als Anlaufprozess bezeichnet.The interval between SQL ServerSQL Server startup and when the buffer cache obtains its memory target is called ramp-up. In dieser Zeit wird der Puffer mit den erforderlichen Leseanforderungen gefüllt.During this time, read requests fill the buffers as needed. Durch eine Leseanforderung für eine einzelne 8 KB-Seite wird beispielsweise eine einzelne Pufferseite gefüllt.For example, a single 8 KB page read request fills a single buffer page. Dies bedeutet, dass der Anlaufprozess von der Anzahl und der Art der Clientanforderungen abhängt.This means the ramp-up depends on the number and type of client requests. Dieser Prozess wird beschleunigt, indem Leseanforderungen für einzelne Seiten in ausgerichtete 8-Seiten-Anforderungen (die einen Block darstellen) transformiert werden.Ramp-up is expedited by transforming single page read requests into aligned eight page requests (making up one extent). Dadurch kann der Anlaufprozess sehr viel schneller erfolgen, insbesondere auf Maschinen mit großem Arbeitsspeicher.This allows the ramp-up to finish much faster, especially on machines with a lot of memory. Weitere Informationen zu Seiten und Blöcken finden Sie im Handbuch zur Architektur von Seiten und Blöcken.For more information about pages and extents, refer to Pages and Extents Architecture Guide.

Ein Großteil seines Arbeitsspeichers verwendet der Puffer-Manager im SQL ServerSQL Server -Vorgang. Daher erfolgt eine Zusammenarbeit zwischen Puffer-Manager und Speicher-Manager, damit auch andere Komponenten die Puffer verwenden können.Because the buffer manager uses most of the memory in the SQL ServerSQL Server process, it cooperates with the memory manager to allow other components to use its buffers. Der Puffer-Manager interagiert vorrangig mit den folgenden Komponenten:The buffer manager interacts primarily with the following components:

  • Ressourcen-Manager zur Steuerung der gesamten Speicherauslastung, und für 32-Bit-Plattformen zur Steuerung der Adressraumverwendung.Resource manager to control overall memory usage and, in 32-bit platforms, to control address space usage.
  • Datenbank-Manager und dem SQL ServerSQL Server -Betriebssystem (SQLOS) für Datei-E/A-Vorgänge auf niedriger Ebene.Database manager and the SQL ServerSQL Server Operating System (SQLOS) for low-level file I/O operations.
  • Protokoll-Manager für Write-Ahead-Protokollierung.Log manager for write-ahead logging.

Unterstützte FunktionenSupported Features

Der Puffer-Manager unterstützt die folgenden Funktionen:The buffer manager supports the following features:

  • Der Puffer-Manager ist NUMA-fähig (Non-Uniform Memory Access) .The buffer manager is non-uniform memory access (NUMA) aware. Außerdem werden Puffercacheseiten auf NUMA-Hardwareknoten verteilt, sodass ein Thread auf eine Pufferseite zugreifen kann, die dem lokalen NUMA-Knoten zugewiesen ist, statt den Zugriff über einen fremden Speicher vorzunehmen.Buffer cache pages are distributed across hardware NUMA nodes, which allows a thread to access a buffer page that is allocated on the local NUMA node rather than from foreign memory.

  • Der Puffer-Manager unterstützt das Hinzufügen von Arbeitsspeicher im laufenden Systembetrieb (Hot Add Memory), das dem Benutzer ermöglicht, physischen Arbeitsspeicher hinzuzufügen, ohne den Server neu starten zu müssen.The buffer manager supports Hot Add Memory, which allows users to add physical memory without restarting the server.

  • Es werden auch große Seiten auf 64-Bit-Plattformen vom Puffer-Manager unterstützt.The buffer manager supports large pages on 64-bit platforms. Die Seitengröße ist spezifisch für die Version von Windows.The page size is specific to the version of Windows.

    Hinweis

    Vor SQL Server 2012 (11.x)SQL Server 2012 (11.x) ist zum Aktivieren von großen Seiten in SQL ServerSQL Server das Ablaufverfolgungsflag 834 erforderlich.Prior to SQL Server 2012 (11.x)SQL Server 2012 (11.x), enabling large pages in SQL ServerSQL Server requires trace flag 834.

  • Es werden vom Puffer-Manager zusätzliche Diagnosen bereitgestellt, durch die dynamische Verwaltungssichten offengelegt werden.The buffer manager provides additional diagnostics that are exposed through dynamic management views. Mithilfe dieser Sichten können Sie verschiedene für SQL ServerSQL Serverspezifische Betriebssystemressourcen überwachen.You can use these views to monitor a variety of operating system resources that are specific to SQL ServerSQL Server. Beispielsweise können Sie mithilfe der Sicht sys.dm_os_buffer_descriptors die Seiten im Puffercache überwachen.For example, you can use the sys.dm_os_buffer_descriptors view to monitor the pages in the buffer cache.

Datenträger-E/ADisk I/O

Mit dem Puffer-Manager werden nur Lese- und Schreibvorgänge für die Datenbank ausgeführt.The buffer manager only performs reads and writes to the database. Sonstige Datei- und Datenbankvorgänge, z. B. öffnen, schließen, erweitern und verkleinern) werden von den Datei- und Datenbank-Manager-Komponenten ausgeführt.Other file and database operations such as open, close, extend, and shrink are performed by the database manager and file manager components.

Datenträger-E/A-Vorgänge des Puffer-Managers weisen die folgenden Merkmale auf:Disk I/O operations by the buffer manager have the following characteristics:

  • Alle E/A-Vorgänge werden asynchron ausgeführt, sodass der aufrufende Thread die Verarbeitung fortsetzen kann, während der E/A-Vorgang im Hintergrund ausgeführt wird.All I/Os are performed asynchronously, which allows the calling thread to continue processing while the I/O operation takes place in the background.
  • Alle E/A-Vorgänge werden an die aufrufenden Threads ausgegeben, sofern nicht die Option „affinity I/O“ verwendet wird.All I/Os are issued in the calling threads unless the affinity I/O option is in use. Durch die Option Affinity I/O Mask wird die SQL ServerSQL Server -Datenträger-E/A an eine bestimmte Teilmenge der CPUs gebunden.The affinity I/O mask option binds SQL ServerSQL Server disk I/O to a specified subset of CPUs. In High-End-OLTP-Umgebungen (Online Transactional Processing, Onlinetransaktionsverarbeitung) für SQL ServerSQL Server kann diese Erweiterung die Leistung von SQL ServerSQL Server -Threads, die E/A verursachen, verbessern.In high-end SQL ServerSQL Server online transactional processing (OLTP) environments, this extension can enhance the performance of SQL ServerSQL Server threads issuing I/Os.
  • Mehrfachseiten-E/A wird durch Scatter-Gather-E/A erreicht; dadurch wird ermöglicht, dass Daten in nicht zusammenhängende Bereiche des Arbeitsspeichers oder aus diesen übertragen werden können.Multiple page I/Os are accomplished with scatter-gather I/O, which allows data to be transferred into or out of noncontiguous areas of memory. Damit kann der Puffercache von SQL ServerSQL Server problemlos gefüllt oder gelöscht werden; zugleich werden mehrere physische E/A-Anforderungen verhindert.This means that SQL ServerSQL Server can quickly fill or flush the buffer cache while avoiding multiple physical I/O requests.

Lange E/A-AnforderungenLong I/O requests

Vom Puffer-Manager werden alle seit mindestens 15 Sekunden ausstehenden E/A-Anforderungen gemeldet.The buffer manager reports on any I/O request that has been outstanding for at least 15 seconds. Damit kann der Systemadministrator einfacher zwischen SQL ServerSQL Server -Problemen und Problemen im E/A-Subsystem unterscheiden.This helps the system administrator distinguish between SQL ServerSQL Server problems and I/O subsystem problems. Es wird die Fehlermeldung 833 angegeben. Im SQL ServerSQL Server -Fehlerprotokoll wird sie wie folgt angezeigt:Error message 833 is reported and appears in the SQL ServerSQL Server error log as follows:

SQL Server has encountered ## occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [##] in database [##] (#). The OS file handle is 0x00000. The offset of the latest long I/O is: 0x00000.

Eine lange E/A kann entweder ein Lese- oder ein Schreibvorgang sein; in der Meldung wird dies nicht angegeben.A long I/O may be either a read or a write; it is not currently indicated in the message. Bei Meldungen zu langen E/A-Vorgängen handelt es sich um Warnungen, nicht um Fehlermeldungen.Long-I/O messages are warnings, not errors. Sie weisen nicht auf Probleme bei SQL ServerSQL Server sondern beim zugrundeliegenden E/A-System hin.They do not indicate problems with SQL ServerSQL Server but with the underlying I/O system. Die Meldungen werden ausgegeben, damit der Systemadministrator die Ursache der langen Antwortzeiten von SQL ServerSQL Server leichter ermitteln kann und um Probleme, die nicht durch SQL ServerSQL Serververursacht werden, abgrenzen zu können.The messages are reported to help the system administrator find the cause of poor SQL ServerSQL Server response times more quickly, and to distinguish problems that are outside the control of SQL ServerSQL Server. Die Meldungen erfordern keine bestimmte Vorgehensweise; der Systemadministrator sollte jedoch untersuchen, weshalb die E/A-Anforderung so viel Zeit beansprucht, oder ob die benötigte Zeit gerechtfertigt ist.As such, they do not require any action, but the system administrator should investigate why the I/O request took so long, and whether the time is justifiable.

Ursachen für lange E/A-AnforderungenCauses of Long-I/O Requests

Eine Meldungen zu langen E/A-Vorgängen kann darauf hinweisen, dass ein E/A-Vorgang dauerhaft blockiert ist und nicht beendet werden kann (dies wird auch als „verlorener E/A-Vorgang“ bezeichnet) oder dass der E/A-Vorgang noch nicht beendet wurde.A long-I/O message may indicate that an I/O is permanently blocked and will never complete (known as lost I/O), or merely that it just has not completed yet. Es kann anhand der Meldung nicht ermittelt werden, welches Szenario hier zutrifft. Eine verlorene E/A führt jedoch häufig zu einem Latchtimeout.It is not possible to tell from the message which scenario is the case, although a lost I/O will often lead to a latch timeout.

Lange Wartezeiten bei der E/A sind häufig ein Hinweis auf eine zu hohe Arbeitsauslastung für das Datenträgersubsystem in SQL ServerSQL Server .Long I/Os often indicate a SQL ServerSQL Server workload that is too intense for the disk subsystem. Ein unzureichendes Datenträgersubsystem wird in folgenden Fällen angezeigt:An inadequate disk subsystem may be indicated when:

  • Es werden mehrere lange E/A-Meldungen im Fehlerprotokoll angezeigt bei starker SQL ServerSQL Server -Arbeitsauslastung.Multiple long I/O messages appear in the error log during a heavy SQL ServerSQL Server workload.
  • Leistungsindikatoren weisen auf eine lange Datenträgerwartezeit, lange Datenträgerwarteschlangen und eine fehlende Datenträger-Leerlaufzeit hin.Perfmon counters show long disk latencies, long disk queues, or no disk idle time.

Lange E/A-Vorgänge können auch durch eine Komponente im E/A-Pfad verursacht werden (z. B. durch einen Treiber, einen Controller oder durch Firmware), bei der das Bedienen einer alten E/A-Anforderung kontinuierlich verschoben wird, anstatt neuere Anforderungen zu bedienen, die näher an der aktuellen Position des Lesekopfs liegen.Long I/Os may also be caused by a component in the I/O path (for example, a driver, controller, or firmware) continually postponing servicing an old I/O request in favor of servicing newer requests that are closer to the current position of the disk head. Das häufig verwendete Verfahren, dass sich die Priorität in Bezug auf die Bearbeitung von Anforderungen danach richtet, welche Anforderungen näher an der aktuellen Position des Lese-/Schreibkopfes liegen, wird auch als "Fahrstuhlsuche" bezeichnet.The common technique of processing requests in priority based upon which ones are closest to the current position of the read/write head is known as "elevator seeking." Es ist möglicherweise schwierig, dies mithilfe des Systemmonitors von Windows (PERFMON.EXE) zu prüfen, da die meisten E/A-Vorgänge direkt bedient werden.This may be difficult to corroborate with the Windows System Monitor (PERFMON.EXE) tool because most I/Os are being serviced promptly. Lange E/A-Anforderungen werden durch Arbeitsauslastungen erschwert, bei denen viele sequenzielle E/A-Anforderungen (z. B. Sichern und Wiederherstellen, Prüfen von Tabellen, Sortieren, Erstellen von Indizes, Massenladen und Dateien auf Null setzen) ausgeführt werden.Long I/O requests can be aggravated by workloads that perform large amounts of sequential I/O, such as backup and restore, table scans, sorting, creating indexes, bulk loads, and zeroing out files.

Isolierte lange E/A-Anforderungen, die nicht mit einer der vorherigen Bedingungen verknüft sind, können durch einen Hardware- oder Treiberfehler verursacht werden.Isolated long I/Os that do not appear related to any of the previous conditions may be caused by a hardware or driver problem. Das Systemereignisprotokoll enthält möglicherweise ein ähnliches Ereignis, mit dem eine Problemdiagnose vorgenommen werden kann.The system event log may contain a related event that helps to diagnose the problem.

Ermittlung hoher ArbeitsspeicherauslastungMemory pressure detection

Die hohe Arbeitsspeicherauslastung ist ein Zustand, der sich aus einem Speicherengpass ergibt und zu Folgendem führen kann:Memory pressure is a condition resulting from memory shortage, and can result in:

  • Zusätzliche E/A-Vorgänge (z.B. sehr aktive LAZY WRITER-Hintergrundthreads)Extra I/Os (such as very active lazy writer background thread)
  • Höheres NeukompilierungsverhältnisHigher recompile ratio
  • Länger ausgeführte Abfragen (wenn Wartevorgänge für die Arbeitsspeicherzuweisung vorhanden sind)Longer running queries (if memory grant waits exist)
  • Zusätzliche CPU-ZyklenExtra CPU cycles

Diese Situation kann durch externe oder interne Ursachen ausgelöst werden.This situation can be triggered by external or internal causes. Folgende externe Ursachen sind möglich:External causes include:

  • Wenig physischer Speicher (RAM) ist verfügbar.Available physical memory (RAM) is low. Dadurch kürzt das System die Workingsets der derzeit ausgeführten Prozesse, wodurch das gesamte System verlangsamt werden kann.This causes the system to trim working sets of currently running processes, which may result in overall slowdown. SQL ServerSQL Server kann das Commit-Ziel des Pufferpools verringern und interne Caches häufiger kürzen.may reduce the commit target of the buffer pool and start trimming internal caches more often.
  • Es ist insgesamt wenig Systemspeicher (einschließlich der Auslagerungsdatei des Betriebssystems) verfügbar.Overall available system memory (which includes the system page file) is low. Dadurch schlagen Speicherbelegungen durch das System möglicherweise fehl, da der derzeit zugewiesene Arbeitsspeicher nicht ausgelagert werden kann.This may cause the system to fail memory allocations, as it is unable to page out currently allocated memory. Folgende interne Ursachen sind möglich:Internal causes include:
  • Eine Reaktion auf die externe hohe Arbeitsspeicherauslastung, wenn SQL Server-Datenbank-EngineSQL Server Database Engine niedrigere Obergrenzen für die Arbeitsspeicherauslastung festlegt.Responding to the external memory pressure, when the SQL Server-Datenbank-EngineSQL Server Database Engine sets lower memory usage caps.
  • Die Arbeitsspeichereinstellungen wurden manuell gesenkt, indem die Konfiguration Max. Serverarbeitsspeicher reduziert wurde.Memory settings were manually lowered by reducing the max server memory configuration.
  • Änderungen an der Arbeitsspeicherverteilung der internen Komponenten zwischen den verschiedenen Caches.Changes in memory distribution of internal components between the several caches.

SQL Server-Datenbank-EngineSQL Server Database Engine implementiert ein Framework, das als Teil seiner dynamischen Speicherverwaltung für die Ermittlung und das Behandeln von hoher Arbeitsspeicherauslastung vorgesehen ist.The SQL Server-Datenbank-EngineSQL Server Database Engine implements a framework dedicated to detecting and handling memory pressure, as part of its dynamic memory management. Dieses Framework umfasst den Hintergrundtask namens Ressourcenmonitor.This framework includes the backgroud task called Resource Monitor. Der Task „Ressourcenmonitor“ überwacht den Status von externen und internen Arbeitsspeicherindikatoren.The Resource Monitor task monitors the state of external and internal memory indicators. Sobald sich der Status einer dieser Indikatoren ändert, berechnet dieser die entsprechende Benachrichtigung und zeigt diese an.Once one of these indicators changes status, it calculates the corresponding notification and it broadcasts it. Bei diesen Benachrichtigungen handelt es sich um interne Meldungen für jede der Engine-Komponenten. Sie werden in Ringpuffern gespeichert.These notifications are internal messages from each of the engine components, and stored in ring buffers.

Zwei Ringpuffer enthalten Informationen, die für die dynamische Speicherverwaltung relevant sind:Two ring buffers hold information relevant to dynamic memory management:

  • Der Ringpuffer „Ressourcenmonitor“, der die Aktivitäten des Ressourcenmonitor nachverfolgt, z.B. ob eine hohe Arbeitsspeicherauslastung signalisiert wurde oder nicht.The Resource Monitor ring buffer, which tracks Resource Monitor activity like was memory pressure signaled or not. Dieser Ringpuffer enthält Statusinformationen, die vom aktuellen Zustand von RESOURCE_MEMPHYSICAL_HIGH, RESOURCE_MEMPHYSICAL_LOW, RESOURCE_MEMPHYSICAL_STEADY oder RESOURCE_MEMVIRTUAL_LOW abhängen.This ring buffer has status information depending on the current condition of RESOURCE_MEMPHYSICAL_HIGH, RESOURCE_MEMPHYSICAL_LOW, RESOURCE_MEMPHYSICAL_STEADY, or RESOURCE_MEMVIRTUAL_LOW.
  • Der Ringpuffer „Speicherbroker“, der Datensätze von Arbeitsspeicherbenachrichtigungen für jeden Resource Governor-Ressourcenpool enthält.The Memory Broker ring buffer, which contains records of memory notifications for each Resource Governor resource pool. Wenn eine interne hohe Arbeitsspeicherauslastung ermittelt wird, wird eine Benachrichtigung, dass wenig Arbeitsspeicher vorhanden ist, für Komponenten aktiviert, denen Arbeitsspeicher zugewiesen ist. Dadurch sollen Aktionen ausgelöst werden, die den Arbeitsspeicher zwischen Caches ausgleichen.As internal memory pressure is detected, low memory notification is turned on for components that allocate memory, to trigger actions meant to balance the memory between caches.

Speicherbroker überwachen den von jeder Komponente angeforderten Arbeitsspeicherverbrauch und berechnen dann auf Basis der gesammelten Informationen den optimalen Arbeitsspeicher für jede dieser Komponenten.Memory brokers monitor the demand consumption of memory by each component and then based on the information collected, it calculates and optimal value of memory for each of these components. Es gibt mehrere Broker für jeden Resource Governor-Ressourcenpool.There is a set of brokers for each Resource Governor resource pool. Diese Information wird dann an jede der Komponenten übermittelt, und die Arbeitsspeichernutzung wird entsprechend erhöht oder gesenkt.This information is then broadcast to each of the components, which grow or shrink their usage as required. Weitere Informationen zu Speicherbrokern finden Sie unter sys.dm_os_memory_brokers.For more information about memory brokers, see sys.dm_os_memory_brokers.

FehlererkennungError Detection

Von Datenbankseiten kann einer von zwei möglichen optionalen Mechanismen verwendet werden, mit dem die Integrität der Seite ab dem Zeitpunkt sichergestellt werden kann, an dem die Datei auf den Datenträger geschrieben wird, bis zu dem Zeitpunkt, wenn sie erneut gelesen wird: Schutz vor zerrissenen Seiten und Prüfsummenschutz.Database pages can use one of two optional mechanisms that help insure the integrity of the page from the time it is written to disk until it is read again: torn page protection and checksum protection. Anhand dieser Mechanismen kann die richtige Funktionsweise des Datenspeichers, der Hardwarekomponenten (Controller, Treiber, Kabel) und des Betriebssystems unabhängig geprüft werden.These mechanisms allow an independent method of verifying the correctness of not only the data storage, but hardware components such as controllers, drivers, cables, and even the operating system. Der Schutz wird der Seite hinzugefügt, bevor sie auf den Datenträger geschrieben wird, und überprüft, wenn die Seite vom Datenträger gelesen wird.The protection is added to the page just before writing it to disk, and verified after it is read from disk.

SQL ServerSQL Server wiederholt Lesevorgänge, die wegen eines Prüfsummenfehlers, einer zerrissenen Seite oder eines anderen E/A-Fehlers fehlschlagen, vier Mal.will retry any read that fails with a checksum, torn page, or other I/O error four times. Ist der Lesevorgang bei einem dieser Wiederholungsversuche erfolgreich, wird eine Meldung in das Fehlerprotokoll geschrieben, und der Befehl, der den Lesevorgang ausgelöst hat, wird fortgesetzt.If the read is successful in any one of the retry attempts, a message will be written to the error log and the command that triggered the read will continue. Schlagen alle Wiederholungsversuche fehl, schlägt der Befehl mit Fehlermeldung 824 fehl.If the retry attempts fail, the command will fail with error message 824.

Die Art des verwendeten Seitenschutzes stellt ein Attribut der Datenbank dar, in der die Seite enthalten ist.The kind of page protection used is an attribute of the database containing the page. Der Prüfsummenschutz stellt den Standardschutz für Datenbanken dar, die in SQL Server 2005 (9.x)SQL Server 2005 (9.x) und höheren Versionen erstellt wurden.Checksum protection is the default protection for databases created in SQL Server 2005 (9.x)SQL Server 2005 (9.x) and later. Der Seitenschutzmechanismus wird beim Erstellen der Datenbank angegeben; er kann mithilfe von ALTER DATABASE SET modifiziert werden.The page protection mechanism is specified at database creation time, and may be altered by using ALTER DATABASE SET. Sie können den aktuellen Seitenschutz bestimmen, indem Sie eine Abfrage an die Spalte page_verify_option in der Katalogsicht sys.databases oder die IsTornPageDetectionEnabled-Eigenschaft der DATABASEPROPERTYEX-Funktion senden.You can determine the current page protection setting by querying the page_verify_option column in the sys.databases catalog view or the IsTornPageDetectionEnabled property of the DATABASEPROPERTYEX function.

Hinweis

Bei einer Änderung der Seitenschutzeinstellungen haben die neuen Einstellungen nicht unmittelbar Auswirkungen auf die gesamte Datenbank.If the page protection setting is changed, the new setting does not immediately affect the entire database. Stattdessen wird von Seiten die aktuelle Schutzebene der Datenbank übernommen, wenn der nächste Schreibvorgang für die Seite erfolgt.Instead, pages adopt the current protection level of the database whenever they are written next. Dies bedeutet, dass in der Datenbank Seiten mit unterschiedlichem Schutz enthalten sein können.This means that the database may be composed of pages with different kinds of protection.

Schutz vor zerrissenen SeitenTorn Page Protection

Der Schutz vor zerrissenen Seiten, der in SQL ServerSQL Server 2000 eingeführt wurde, stellt in erster Linie eine Methode zum Erkennen von Seitenbeschädigungen dar, die auf Stromausfälle zurückzuführen sind.Torn page protection, introduced in SQL ServerSQL Server 2000, is primarily a way of detecting page corruptions due to power failures. Beispielsweise kann der Fall eintreten, dass durch einen unerwarteten Stromausfall nur ein Teil einer Seite auf den Datenträger geschrieben wird.For example, an unexpected power failure may leave only part of a page written to disk. Wenn Schutz vor zerrissenen Seiten festgelegt ist, wird beim Schreiben der Seite auf den Datenträger für jeden Sektor von 512 Byte auf einer Datenbankseite von 8 KB ein bestimmtes 2-Bit-Signaturmuster gespeichert und im Kopf der Datenbankseite gespeichert.When torn page protection is used, a specific 2-bit signature pattern for each 512-byte sector in the 8-kilobyte (KB) database page and stored in the database page header when the page is written to disk. Wenn die Seite vom Datenträger gelesen wird, werden die im Seitenkopf gespeicherten zerrissenen Bits mit den tatsächlichen Seitensektorinformationen verglichen.When the page is read from disk, the torn bits stored in the page header are compared to the actual page sector information. Das Signaturmuster wechselt bei jedem Schreibvorgang zwischen den Binärzuständen 01 und 10. Damit kann jederzeit ermittelt werden, ob nur ein Teil der Sektoren auf den Datenträger geschrieben wird: Wenn ein Bit beim späteren Lesen der Seite den falschen Zustand aufweist, wurde die Seite nicht richtig auf den Datenträger geschrieben, d.h., es wird eine zerrissene Seite ermittelt.The signature pattern alternates between binary 01 and 10 with every write, so it is always possible to tell when only a portion of the sectors made it to disk: if a bit is in the wrong state when the page is later read, the page was written incorrectly and a torn page is detected. Für die Erkennung von zerrissenen Seiten sind nur minimale Ressourcen erforderlich. Es werden jedoch keine Fehler erkannt, die durch Hardwarefehler des Datenträgers verursacht werden.Torn page detection uses minimal resources; however, it does not detect all errors caused by disk hardware failures. Weitere Informationen zum Festlegen der Erkennung von zerrissenen Seiten finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).For information on setting torn page detection, see ALTER DATABASE SET Options (Transact-SQL).

PrüfsummenschutzChecksum Protection

Der Prüfsummenschutz, der in SQL Server 2005 (9.x)SQL Server 2005 (9.x) eingeführt wird, ermöglicht eine verbesserte Datenintegritätsprüfung.Checksum protection, introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x), provides stronger data integrity checking. Eine Prüfsumme wird für die Daten berechnet, die in den einzelnen Seiten geschrieben werden, und im Seitenkopf gespeichert.A checksum is calculated for the data in each page that is written, and stored in the page header. Wenn eine Seite, deren Prüfsumme gespeichert wird, vom Datenträger gelesen wird, wird von der Datenbank-Engine die Prüfsumme für die Daten in der Seite neu berechnet. Wenn die neue Prüfsumme von der gespeicherten Prüfsumme abweicht, wird der Fehler 824 ausgegeben.Whenever a page with a stored checksum is read from disk, the database engine recalculates the checksum for the data in the page and raises error 824 if the new checksum is different from the stored checksum. Mithilfe des Prüfsummenschutzes können mehr Fehler ermittelt werden als mithilfe des Schutzes vor zerrissenen Seiten, da sich jedes in der Seite enthaltene Byte auf dieses Verfahren auswirkt. Der Prüfsummenschutz ist jedoch relativ ressourcenintensiv.Checksum protection can catch more errors than torn page protection because it is affected by every byte of the page, however, it is moderately resource intensive. Wenn die Prüfsumme aktiviert ist, werden durch Stromausfälle oder fehlerhafte Hard- oder Firmware verursachte Fehler erkannt, sobald die Seite vom Puffer-Manager vom Datenträger gelesen wird.When checksum is enabled, errors caused by power failures and flawed hardware or firmware can be detected any time the buffer manager reads a page from disk. Weitere Informationen zum Festlegen der Prüfsumme finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).For information on setting checksum, see ALTER DATABASE SET Options (Transact-SQL).

Wichtig

Wenn eine Benutzer- oder Systemdatenbank auf SQL Server 2005 (9.x)SQL Server 2005 (9.x) oder eine höhere Version aktualisiert wird, bleibt der PAGE_VERIFY-Wert (NONE oder TORN_PAGE_DETECTION) erhalten.When a user or system database is upgraded to SQL Server 2005 (9.x)SQL Server 2005 (9.x) or a later version, the PAGE_VERIFY value (NONE or TORN_PAGE_DETECTION) is retained. Sie sollten CHECKSUM verwenden.We recommend that you use CHECKSUM. TORN_PAGE_DETECTION verwendet zwar weniger Ressourcen, bietet jedoch einen minimalen Teil des Schutzes von CHECKSUM.TORN_PAGE_DETECTION may use fewer resources but provides a minimal subset of the CHECKSUM protection.

Grundlegendes zu NUMA (Non-Uniform Memory Access)Understanding Non-uniform Memory Access

SQL ServerSQL Server ist NUMA-fähig (Non-Uniform Memory Access) und liefert hervorragende Leistungen auf NUMA-Hardware, ohne dass eine besondere Konfiguration notwendig wäre.is non-uniform memory access (NUMA) aware, and performs well on NUMA hardware without special configuration. Mit immer schnelleren Prozessoren und einer wachsenden Anzahl von Prozessoren wird es zunehmend schwieriger, die Speicherlatenzzeit zu verringern, die für die Verwendung dieser zusätzlichen Verarbeitungsleistung erforderlich ist.As clock speed and the number of processors increase, it becomes increasingly difficult to reduce the memory latency required to use this additional processing power. Für die Umgehung dieser Schwierigkeit stellen Hardwarehersteller große L3-Caches bereit; dies ist jedoch nur eine eingeschränkte Lösung.To circumvent this, hardware vendors provide large L3 caches, but this is only a limited solution. Die NUMA-Architektur bietet eine skalierbare Lösung für dieses Problem.NUMA architecture provides a scalable solution to this problem. SQL ServerSQL Server kann die Vorteile NUMA-basierter Computer nutzen, ohne dass Anwendungsänderungen erforderlich sind.has been designed to take advantage of NUMA-based computers without requiring any application changes. Weitere Informationen finden Sie unter Vorgehensweise: Soft-NUMA (SQL Server).For more information, see How to: Configure SQL Server to Use Soft-NUMA.

Weitere InformationenSee Also

Serverkonfigurationsoptionen für den Serverarbeitsspeicher Server Memory Server Configuration Options
Lesen von Seiten Reading Pages
Schreiben von Seiten Writing Pages
Vorgehensweise: Soft-NUMA (SQL Server) How to: Configure SQL Server to Use Soft-NUMA
Anforderungen für die Verwendung von speicheroptimierten Tabellen Requirements for Using Memory-Optimized Tables
Beheben von OOM-Problemen (nicht genügend Arbeitsspeicher) mithilfe von arbeitsspeicheroptimierten TabellenResolve Out Of Memory Issues Using Memory-Optimized Tables