none
Base de datos tempdb muy grande que no disminuye al reinciar el servicio SQL RRS feed

  • Pregunta

  • Hola,

    Tenemos un servidor con Sharepoint Foundation 2013 contra un servidor SQL Server 2014 SP1.

    La base de datos del Sharepoint ocupa 17 GB. Además del Sharepoint en ese SQL se está ejecutando la base de datos de Mcafee ePolicy Orchestrator con unos 12 GB de espacio y por otra parte un par de aplicaciones de fabricación propia cuyas base de datos no ocupan más de 25 MB.

    El caso es que la base de datos tempdb del SQL Server está creciendo a tamaño que ya no nos parece normal. Ahora mismo tiene 80 GB. 

    Otras veces, cuando esto ocurre reiniciamos el servidor y por lo que tenía entendido la base de datos disminuía y liberaba el espacio, volviendo a crecer según sus necesidades.

    El caso, es que esto ya no pasa, y directamente tras reiniciar el servidor la base de datos tempdb sigue ocupando 80 GB directamente y su tamaño no varía.

    Sin embargo en el SQL Management veo que el 99% del espacio está libre.

    ¿Cómo puedo hacer para recuperar todo ese espacio y que vuelva a un tamaño que sea normal?

    Gracias

    Un saludo

    Jorge

    miércoles, 8 de noviembre de 2017 8:37

Respuestas

  • Hola.

    Complementando lo que dice Marianok, es importante hacer una planeación adecuada de dicha base de datos.

    A mi, particularmente, me gusta mucho lo que expone Brent Ozar en este artículo:

    Cheat Sheet: How to Configure TempDB for Microsoft SQL Server

    Leelo por favor y, si es un ambiente en producción, por favor valida lo que dice éste en un ambiente de pruebas o de calidad antes de implementarlo en Productivo.

    Adicionalmente, y en mi experiencia, he visto como crecimientos desmesurados, además de temas como mala indexación por mencionar uno, combinados con creación de objetos en la TEMPDB sin destrucción, ayudan a dicho crecimiento. Sugiero revisar este tema también.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    miércoles, 8 de noviembre de 2017 13:42
  • Jorge1975, como hemos expuesto en un thread anterior la TempDB una vez que aumentó su capacidad asignada en el disco esta no se libera en forma automática, excepto que esta tenga la opción de AUTO-SHRINK. 

    La cual no es una práctica recomendada en ninguna base de datos, porque produce fragmentación de disco y overhead de desempeño al momento de aumentar y reducir el tamaño.

    Si por algún proceso excepcional, la TempDB creció mas de lo esperado, entonces podrías ejecutar un Shrink manual:

    DBCC SHRINKFILE (TEMPDEV, 20480);   --- New file size in MB
    GO

    Saludos.


    Mariano K.

    miércoles, 8 de noviembre de 2017 13:28
  • Hola.

    Por favor ejectuar este query y compartir los resultados para tener una mejor idea de como está configurada la TEMPDB:

    SELECT name, physical_name AS CurrentLocation, size, max_size, growth, state  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Marcado como respuesta Jorge1975 jueves, 9 de noviembre de 2017 8:13
    miércoles, 8 de noviembre de 2017 12:28

Todas las respuestas

  • Hola.

    Por favor ejectuar este query y compartir los resultados para tener una mejor idea de como está configurada la TEMPDB:

    SELECT name, physical_name AS CurrentLocation, size, max_size, growth, state  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'tempdb');

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Marcado como respuesta Jorge1975 jueves, 9 de noviembre de 2017 8:13
    miércoles, 8 de noviembre de 2017 12:28
  • Hola,

    Aquí está el resultado de esa query:

    Name CurrentLocation size max_size growth state

    tempdev D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\tempdb.mdf 9936344 -1 10 0

    templog D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\templog.ldf 96 -1 10 0

    Muchas gracias.

    Un saludo

    Jorge

    miércoles, 8 de noviembre de 2017 13:06
  • Jorge1975, como hemos expuesto en un thread anterior la TempDB una vez que aumentó su capacidad asignada en el disco esta no se libera en forma automática, excepto que esta tenga la opción de AUTO-SHRINK. 

    La cual no es una práctica recomendada en ninguna base de datos, porque produce fragmentación de disco y overhead de desempeño al momento de aumentar y reducir el tamaño.

    Si por algún proceso excepcional, la TempDB creció mas de lo esperado, entonces podrías ejecutar un Shrink manual:

    DBCC SHRINKFILE (TEMPDEV, 20480);   --- New file size in MB
    GO

    Saludos.


    Mariano K.

    miércoles, 8 de noviembre de 2017 13:28
  • Hola.

    Complementando lo que dice Marianok, es importante hacer una planeación adecuada de dicha base de datos.

    A mi, particularmente, me gusta mucho lo que expone Brent Ozar en este artículo:

    Cheat Sheet: How to Configure TempDB for Microsoft SQL Server

    Leelo por favor y, si es un ambiente en producción, por favor valida lo que dice éste en un ambiente de pruebas o de calidad antes de implementarlo en Productivo.

    Adicionalmente, y en mi experiencia, he visto como crecimientos desmesurados, además de temas como mala indexación por mencionar uno, combinados con creación de objetos en la TEMPDB sin destrucción, ayudan a dicho crecimiento. Sugiero revisar este tema también.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    miércoles, 8 de noviembre de 2017 13:42
  • Hola,

    El comando que me ha pasado ha funcionado.

    He disminuido finalmente la base de datos a 2 GB, ahora mismo.

    Ahora me queda vigilar su crecimiento e intentar descubrir por qué ha llegado a ocupar 80 GB cuando no parece normal.

    Muchas gracias

    Un saludo

    jueves, 9 de noviembre de 2017 8:15
  • Hola,

    Usando el comando de Marianok he conseguido reducir el tamaño. Ahora vigilaré el comportamiento para ver si vuelve a crecer tanto y descontroladamente y consigo detectar de donde viene ese crecimiento anómalo.

    Revisaré también todo lo que aconseja Brent Ozar para optimizar el funcionamiento.

    Muchas gracias

    Un saludo

    jueves, 9 de noviembre de 2017 8:16
  • 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, 10); -- shrink tempdb

    dbcc shrinkfile ('tempdev') -- shrink db file

    dbcc shrinkfile ('templog') -- shrink log file

    GO

     

    -- report the new file sizes

    SELECT name, size

    FROM sys.master_files

    WHERE database_id = DB_ID(N'tempdb');

    GO

    viernes, 10 de noviembre de 2017 23:26