Das Speichern von SQL Server-Datentabellen im Speicher ist eine von SQL Server bereitgestellte Funktion, die selten am Entwicklungsprozess allgemeiner kleiner Systeme beteiligt ist. Verwandte Dokumente werden hier zusammengestellt, um zu veranschaulichen, wie alle Daten einer Tabelle in SQL Server in den Speicher gestellt werden, um eine In-Memory-Datenbank zu implementieren und die Echtzeitleistung zu verbessern.
1, DBCC PINTABLE
Markiert eineTabelle
zum Anheften, was bedeutet, dass Microsoft SQL Server die Seiten für die Tabelle nicht aus dem Speicher löscht
DBCC PINTABLE (Datenbank-ID, Tabellen-ID)
Um die Datenbank-ID zu ermitteln, verwenden Sie die Funktion DB_ID.
Um die Tabellen-ID zu ermitteln, verwenden Sie die Funktion OBJECT_ID.
Das Kommentieren von
DBCC PINTABLE führt nicht dazu, dass die Tabelle in den Speicher eingelesen wird. Wenn Seiten in einer Tabelle durch normale Transact-SQL-Anweisungen in den Cache eingelesen werden, werden sie als speicherresidente Seiten markiert. Speicherresidente Seiten werden nicht gelöscht, wenn SQL Server Speicherplatz zum Einlesen neuer Seiten benötigt. SQL Server zeichnet weiterhin Aktualisierungen der Seite auf und schreibt die aktualisierte Seite bei Bedarf zurück auf die Festplatte. Allerdings behält SQL Server eine Kopie der verfügbaren Seiten im Cache, bis die Tabelle mithilfe der DBCC UNPINTABLE-Anweisung nicht resident gemacht wird.
DBCC PINTABLE eignet sich am besten zum Speichern kleiner, häufig referenzierter Tabellen im Speicher. Lesen Sie die Seiten der kleinen Tabelle sofort in den Speicher, und alle zukünftigen Verweise auf ihre Daten müssen nicht von der Festplatte gelesen werden.
HINWEIS DBCC PINTABLE kann Leistungsverbesserungen bewirken, muss jedoch mit Vorsicht verwendet werden. Wenn eine große Tabelle vorhanden ist, verwendet die Tabelle zunächst einen großen Teil des Caches, ohne dass genügend Cache für andere Tabellen im System übrig bleibt. Wenn die gehostete Tabelle größer als der Cache ist, füllt die Tabelle den gesamten Cache. Ein Mitglied der festen Serverrolle „Sysadmin“ muss SQL Server herunterfahren und neu starten und dann die Tabelle nicht resident machen. Das Hosten zu vieler Tabellen verursacht das gleiche Problem wie das Hosten von Tabellen, die größer als der Cache sind.
Beispiel:
Deklarieren Sie @db_id int, @tbl_id int.
Verwenden Sie DATABASE_NAME.
Setzen Sie @db_id = DB_ID('DATABASE_NAME').
Setzen Sie @tbl_id = Object_ID('Department').
DBCC pintable (@db_id, @tbl_id)
kann die Tabelle Department als speicherdefiniert festlegen. Bewohner.
Deklarieren Sie @db_id int, @tbl_id int.
Verwenden Sie DATABASE_NAME.
Setzen Sie @db_id = DB_ID('DATABASE_NAME').
Setzen Sie @tbl_id = Object_ID('Department').
DBCC UNpintable (@db_id, @tbl_id)
kann die Tabelle Department als speicherresident deaktivieren.
Sie können den folgenden SQL-Befehl verwenden, um die Ausführung zu erkennen:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Wenn das Rückgabeergebnis 1 ist: bedeutet dies, dass die Tabelle so festgelegt wurde, dass sie sich im Speicher befindet. 0: Dies bedeutet dass es nicht so eingestellt ist, dass es sich im Speicher befindet.
2, SP_TableOption
Legt
Optionswerte für benutzerdefinierte Tabellen fest. Mit sp_tableoption kann die Text-in-Zeilen-Funktion für Tabellen mit Text-, Ntext- oder Bildspalten aktiviert werden
sp_tableoption [ @TableNamePattern = ] 'table'
, [ @OptionName = ] 'Optionsname'
, [ @OptionValue = ] 'value'
wobei 'option_name' die folgende Verwendung hat:
pintable – Wenn deaktiviert (Standardeinstellung), markiert es die Tabelle als nicht mehr RAM-resident. Wenn aktiviert, markiert es die Tabelle als RAM-resident. (Die angegebene Tabelle kann im Speicher resident sein.)
Darüber hinaus betreffen die Tabellensperre beim Massenladen, die Zeilensperre, der Text in der Zeile und andere optionale Werte keine residente Tabelle im Speicher. Für eine bestimmte Verwendung können Sie SQL Server-Bücher abfragen Online.
Wert Es hat die folgende Verwendung:
Der Optionsname ist aktiviert (true, on oder 1) oder deaktiviert (false, off oder 0).
Beispiel:
EXEC sp_tableoption 'Department','pintable', 'true'
sorgt dafür, dass die Datentabelle Department im Speicher verbleibt.
EXEC sp_tableoption 'Department','pintable', 'false'
löscht die Speicherung der Datentabelle Department .
Sie können den folgenden SQL-Befehl verwenden, um die Ausführung zu erkennen:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Wenn das Rückgabeergebnis 1 ist: bedeutet dies, dass die Tabelle so festgelegt wurde, dass sie sich im Speicher befindet. 0: Dies bedeutet dass es nicht so eingestellt ist, dass es sich im Speicher befindet.
3. SchlussfolgerungenWenn
Sie eine Datentabelle als speicherresident festlegen, wird die Tabelle erst dann tatsächlich in den Speicher eingelesen, wenn sie abgerufen wird. Daher können Sie die folgenden SQL-Anweisungen verwenden, um die Datentabelle „Department“ weiter im Speicher zu speichern:
Wählen Sie * From Department
Darüber hinaus können Sie die folgenden SQL-Anweisungen verwenden, um alle Tabellen, die im Speicher der Datenbank gespeichert sind, einfach anzuzeigen/zu erkennen:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0