Un amigo mío me dijo hoy que en lugar de rebotar SQL Server, simplemente podría desconectar y luego volver a adjuntar una base de datos y esta acción eliminaría las páginas y los planes de la base de datos de la caché. No estoy de acuerdo y proporciono mi evidencia a continuación. Si no está de acuerdo conmigo o tiene una mejor refutación, que por todos los medios de suministro.
Estoy usando AdventureWorks2012 en esta versión de SQL Server:
SELECCIONE @@ VERSIÓN; Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Developer Edition (64 bits) en Windows NT 6.1 (compilación 7601: Service Pack 1)
Después de cargar la base de datos, ejecuto la siguiente consulta:
En primer lugar, ejecute el script de engorde AW de Jonathan K que se encuentra aquí:
---------------------------
- Paso 1: ¿Cosas de Bpool?
---------------------------
USE [AdventureWorks2012];
VAMOS
SELECCIONE
OBJECT_NAME (p.object_id) AS [ObjectName]
, p.object_id
, p.index_id
, COUNT (*) / 128 AS [tamaño del búfer (MB)]
, COUNT (*) AS [buffer_count]
DESDE
sys.allocation_units AS a
UNIÓN INTERNA sys.dm_os_buffer_descriptors AS b
ON a.allocation_unit_id = b.allocation_unit_id
UNIÓN INTERNA sys.partitions AS p
ON a.container_id = p.hobt_id
DÓNDE
b.database_id = DB_ID ()
Y p.object_id> 100
AGRUPAR POR
p.object_id
, p.index_id
ORDENAR POR
buffer_count DESC;
El resultado se muestra aquí:

Separe y vuelva a adjuntar la base de datos y luego vuelva a ejecutar la consulta.
---------------------------
- Paso 2: Separar / Adjuntar
---------------------------
- Separar
USE [maestro]
VAMOS
EXEC master.dbo.sp_detach_db @dbname = N'AdventureWorks2012 '
VAMOS
- Adjuntar
USE [maestro];
VAMOS
CREAR BASE DE DATOS [AdventureWorks2012] ACTIVADO
(
FILENAME = N'C: \ sql server \ files \ AdventureWorks2012_Data.mdf '
)
,
(
FILENAME = N'C: \ sql server \ files \ AdventureWorks2012_Log.ldf '
)
PARA ADJUNTAR;
VAMOS
¿Qué hay en la piscina ahora?
---------------------------
- Paso 3: ¿Cosas de Bpool?
---------------------------
USE [AdventureWorks2012];
VAMOS
SELECCIONE
OBJECT_NAME (p.object_id) AS [ObjectName]
, p.object_id
, p.index_id
, COUNT (*) / 128 AS [tamaño del búfer (MB)]
, COUNT (*) AS [buffer_count]
DESDE
sys.allocation_units AS a
UNIÓN INTERNA sys.dm_os_buffer_descriptors AS b
ON a.allocation_unit_id = b.allocation_unit_id
UNIÓN INTERNA sys.partitions AS p
ON a.container_id = p.hobt_id
DÓNDE
b.database_id = DB_ID ()
Y p.object_id> 100
AGRUPAR POR
p.object_id
, p.index_id
ORDENAR POR
buffer_count DESC;
Y el resultado:

¿Todas las lecturas son lógicas en este momento?
--------------------------------
- Paso 4: ¿Solo lecturas lógicas?
--------------------------------
USE [AdventureWorks2012];
VAMOS
CONFIGURAR ESTADÍSTICAS IO;
SELECT * FROM DatabaseLog;
VAMOS
ESTABLECER ESTADÍSTICAS IO OFF;
/ *
(1597 filas afectadas)
Tabla 'DatabaseLog'. Recuento de escaneo 1, lecturas lógicas 782, lecturas físicas 0, lecturas anticipadas 768, lecturas lógicas lob 94, lecturas físicas lob 4, lecturas lob anticipadas 24.
* /
Y podemos ver que la agrupación de búferes no fue totalmente eliminada por la separación / conexión. Parece que mi amigo estaba equivocado. ¿Alguien está en desacuerdo o tiene una mejor discusión?
Otra opción es desconectarse y luego conectarse a la base de datos. Probemos eso.
--------------------------------
- Paso 5: fuera de línea / en línea?
--------------------------------
ALTERAR BASE DE DATOS [AdventureWorks2012] SET OFFLINE;
VAMOS
ALTERAR BASE DE DATOS [AdventureWorks2012] SET ONLINE;
VAMOS
---------------------------
- Paso 6: ¿Cosas de Bpool?
---------------------------
USE [AdventureWorks2012];
VAMOS
SELECCIONE
OBJECT_NAME (p.object_id) AS [ObjectName]
, p.object_id
, p.index_id
, COUNT (*) / 128 AS [tamaño del búfer (MB)]
, COUNT (*) AS [buffer_count]
DESDE
sys.allocation_units AS a
UNIÓN INTERNA sys.dm_os_buffer_descriptors AS b
ON a.allocation_unit_id = b.allocation_unit_id
UNIÓN INTERNA sys.partitions AS p
ON a.container_id = p.hobt_id
DÓNDE
b.database_id = DB_ID ()
Y p.object_id> 100
AGRUPAR POR
p.object_id
, p.index_id
ORDENAR POR
buffer_count DESC;
Parece que la operación fuera de línea / en línea funcionó mucho mejor.

fuente
