lunes, 6 de febrero de 2017

Cuidado con la base de datos tempDB de SQL Server 2016 para un granja de SharePoint 2016

Oh! sorpresa la base de datos temporal que utiliza para realizar sus operaciones de creación, modificación y eliminación  puede creecer hasta llenar por completo el disco donde esta ubicada.   

El disco donde estaba almacenada esta base de datos tempDb tenia 2 TB y fueron consumidos en su totalidad, así que mucho cuidado.

La base de datos TempDb en Sql Server 2016 se crean archivos separados por nucleos lógicos en el caso nuestro teniamos 4 núcleos entonces creó 4 archivos separados uno por cada núcleo;un arhivo .MDF y 3 archivos .NDF.  Y estos mostraban el tamaño de 500 GB cada uno, como se muestra abajo:


Este servidor es el BackEnd de una Granja de SharePoint 2016.  Y el reporte del usuario fue que no podía agregar una bilioteca de imágenes.  Al revisar el log de SharePoint se encotró el siguiente error:

02/02/2017 16:49:30.93               w3wp.exe (0x21AC0)                                    0x2424C               SharePoint Foundation                         Database                           880j        High      SqlError: 'Could not allocate space for object 'dbo.EventCache'.'EventCache_ListId' in database 'WSS_Content_xxx' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.'    Source: '.Net SqlClient Data Provider' Number: 1105 State: 2 Class: 17 Procedure: 'proc_LogChangeEx' LineNumber: 28 Server: 'SHAREPOINTDB'                1833d19d-e9f5-b035-1066-9145bf5ded4f

Su configuración inicial fue la siguiente:

Crecimiento Inicial Tenia 1024 Mb
AutoCrecimiento
Crecimiento en 64 MB
Limite de Crecimiento No Restringido

Solución

La solución pues tendría que ser reducir el tamaño de la base de datos por medio de un Shrink, pero para ambientes de producción no es recomendado hacerlo en caliente y en horarios laborales.  Por ello se tomaron las siguientes medidas:

Procedimiento Efectuado:

1) Solicitar Ventana de Mantenimiento de Emergencía
2) Dentro de la ventana de mantenimiento se efectuó el siguiente procedimiento:
2.1.) Se ejecutaron las siguientes líneas en t-sql con el Management Studio:

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 99); -- shrink tempdb

Esto liberó 450 Gb el disco que estaba lleno y no permitio reiniciar con seguridad

2.2) Reinicio del Servidor de SQL Server
2.3) Ejecución de los siguientes comandos de t-SQL:

go

USE tempdb;
GO
DBCC SHRINKFILE (tempdev, 64); --libere el espacio del archivo de base de datos y dele un tamaño de 64MB
GO
--2 1 8192 8192 472 472
DBCC SHRINKFILE (temp2, 64); --libere el espacio del archivo de base de datos y dele un tamaño de 64MB
GO
--2 3 8192 8192 184 184
DBCC SHRINKFILE (temp3, 64); --libere el espacio del archivo de base de datos y dele un tamaño de 64MB
GO
--2 4 8192 8192 120 120
DBCC SHRINKFILE (temp4, 64); --libere el espacio del archivo de base de datos y dele un tamaño de 64MB
GO
--2 5 8192 8192 32 32

2.4) Se modificó las propiedades de cada data file para que creciera un máximo de 10 Gb o 10240 Mb.

Con ello se liberó el espacio y se garantizó que no puede llegar a ser mayor a 10 Gb cada archivo de base de datos o ndf file dando un total de 40 GB que estamos es más que suficiente para las operaciones de la granja de SharePoint 2016.



Luego se probó crear la biblioteca y se efectuó la operacíon con éxito sin problemas.



En resumen tenga cuidado cuando se configura SQL Server 2016 de limitar el tamaño de la base de datos tempdb un tamaño que según estime las operaciones que realizará la base de datos pueda manejar, defina un limite máximo para los archivos MDF y LDFs de la base de datos TempDB.

Microsoft también recomienda que tenga un tamaño igual inicial y un incremento igual es decir todas esten configuradas con el mismo tamaño de crecimiento que en este caso es de bloques de 64 MB.

Datos interesantes sobre la tempdb en SQL Server 2016 puede revisar este enlace:

https://blogs.msdn.microsoft.com/psssql/2016/03/17/sql-2016-it-just-runs-faster-automatic-tempdb-configuration/


Hasta la próxima y cuidado con la tempDB.


Juan Manuel Herrera Ocheita



No hay comentarios.: