Ein Freund von mir sagte mir heute, anstatt SQL Server zu bouncen, könnte ich einfach eine Datenbank trennen und dann wieder anhängen, und diese Aktion würde die Seiten und Pläne der angegebenen Datenbank aus dem Cache löschen. Ich war anderer Meinung und legte meine Beweise unten vor. Wenn Sie mit mir nicht einverstanden sind oder eine bessere Widerlegung haben, als auf jeden Fall liefern.
Ich verwende AdventureWorks2012 für diese Version von SQL Server:
VERSION AUSWÄHLEN; Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Developer Edition (64-Bit) unter Windows NT 6.1 (Build 7601: Service Pack 1)
Nachdem ich die Datenbank geladen habe, führe ich die folgende Abfrage aus:
Führen Sie zunächst Jonathan Ks AW-Mast-Skript aus, das Sie hier finden:
--------------------------- - Schritt 1: Bpool Stuff? --------------------------- USE [AdventureWorks2012]; GEHEN WÄHLEN OBJECT_NAME (p.object_id) AS [ObjectName] , p.object_id , p.index_id , COUNT (*) / 128 AS [Puffergröße (MB)] , COUNT (*) AS [buffer_count] VON sys.allocation_units AS a INNER JOIN sys.dm_os_buffer_descriptors AS b ON a.allocation_unit_id = b.allocation_unit_id INNER JOIN sys.partitions AS p ON a.container_id = p.hobt_id WO b.database_id = DB_ID () AND p.object_id> 100 GRUPPIERE NACH p.object_id , p.index_id SORTIEREN NACH buffer_count DESC;
Das Ergebnis wird hier gezeigt:
Trennen Sie die Datenbank, hängen Sie sie erneut an und führen Sie die Abfrage erneut aus.
--------------------------- - Schritt 2: Abnehmen / Anbringen --------------------------- -- Ablösen USE [master] GEHEN EXEC master.dbo.sp_detach_db @dbname = N'AdventureWorks2012 ' GEHEN -- Anfügen USE [master]; GEHEN CREATE DATABASE [AdventureWorks2012] ON ( FILENAME = N'C: \ SQL Server \ Dateien \ AdventureWorks2012_Data.mdf ' ) , ( FILENAME = N'C: \ SQL Server \ Dateien \ AdventureWorks2012_Log.ldf ' ) FÜR BEFESTIGEN; GEHEN
Was ist jetzt im Pool?
--------------------------- - Schritt 3: Bpool Stuff? --------------------------- USE [AdventureWorks2012]; GEHEN WÄHLEN OBJECT_NAME (p.object_id) AS [ObjectName] , p.object_id , p.index_id , COUNT (*) / 128 AS [Puffergröße (MB)] , COUNT (*) AS [buffer_count] VON sys.allocation_units AS a INNER JOIN sys.dm_os_buffer_descriptors AS b ON a.allocation_unit_id = b.allocation_unit_id INNER JOIN sys.partitions AS p ON a.container_id = p.hobt_id WO b.database_id = DB_ID () AND p.object_id> 100 GRUPPIERE NACH p.object_id , p.index_id SORTIEREN NACH buffer_count DESC;
Und das Ergebnis:
Sind alle Lesevorgänge zu diesem Zeitpunkt logisch?
-------------------------------- - Schritt 4: Nur logische Lesevorgänge? -------------------------------- USE [AdventureWorks2012]; GEHEN SET STATISTICS IO ON; SELECT * FROM DatabaseLog; GEHEN SET STATISTICS IO OFF; / * (1597 betroffene Zeile (n)) Tabelle 'DatabaseLog'. Scananzahl 1, logische Lesevorgänge 782, physische Lesevorgänge 0, Vorauslesevorgänge 768, logische Vorlesevorgänge 94, physikalische Vorlesevorgänge 4, Vorlesevorgänge 24. * /
Und wir können sehen, dass der Pufferpool durch das Trennen / Anhängen nicht vollständig weggeblasen wurde. Scheint, als hätte sich mein Kumpel geirrt. Ist jemand anderer Meinung oder hat er ein besseres Argument?
Eine andere Möglichkeit besteht darin, die Datenbank offline und dann online zu schalten. Lassen Sie uns das versuchen.
-------------------------------- - Schritt 5: Offline / Online? -------------------------------- ALTER DATABASE [AdventureWorks2012] SET OFFLINE; GEHEN ALTER DATABASE [AdventureWorks2012] ONLINE SETZEN; GEHEN --------------------------- - Schritt 6: Bpool Stuff? --------------------------- USE [AdventureWorks2012]; GEHEN WÄHLEN OBJECT_NAME (p.object_id) AS [ObjectName] , p.object_id , p.index_id , COUNT (*) / 128 AS [Puffergröße (MB)] , COUNT (*) AS [buffer_count] VON sys.allocation_units AS a INNER JOIN sys.dm_os_buffer_descriptors AS b ON a.allocation_unit_id = b.allocation_unit_id INNER JOIN sys.partitions AS p ON a.container_id = p.hobt_id WO b.database_id = DB_ID () AND p.object_id> 100 GRUPPIERE NACH p.object_id , p.index_id SORTIEREN NACH buffer_count DESC;
Es scheint, dass der Offline- / Online-Betrieb viel besser funktioniert hat.