none
Автоматическое уменьшение размера БД tempdb RRS feed

  • Вопрос

  • Добрый день!

    столкнулся с проблемой: БД tempdb в определенные моменты времени значительно увеличивается в объеме и занимает все доступное дисковое пространство (около 20 ГБ). соответственно все перестает работать. После перезагрузки сервиса ее размер уменьшается до 8 мб.
    Модель восстановления БД - Simple
    возможно ли контролировать размер БД? возможные варианты?
    • Перемещено I.Vorontsov 1 декабря 2009 г. 8:29 (От:Сообщество SQLClub.ru)
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:16 MSDN Forums consolidation (От:SQL Server для разработчиков)
    6 ноября 2009 г. 7:15

Ответы

  • Вы можете использовать счетчик Data File(s) Size (KB) ( Размер файла данных) Монитора производительности (Performance Monitor ), связанный с экземпляром tempdb для объекта производительности базы данных. Использование этого счетчика - хороший способ узнать, когда файл tempdb начинает расти. Вы можете также получить доступ к этим данным непосредственно из SQL Server , выполнив запрос к таблице master .. sysperfinfo , которая материализует все счетчики монитора производительности, экспортируемые SQL Server . Во-вторых, Вы можете периодически проверять вывод sp_spaceused на tempdb . И, наконец, Вы можете использовать функцию fn_virtualfilestats () , чтобы отследить ввод/вывод, который SQL Server записывает в файлы базы данных, которые использует tempdb . Если tempdb растет, вероятной причиной является физический ввод/вывод, связанный с определенными запросами. В этом случае контроль данных fn_virtualfilestats поможет уменьшить список «подозрительных» запросов, вызывающих рост tempdb . Любой из этих методов позволяет отслеживать рост tempdb в течение конкретного периода времени.

    Чтобы найти связь роста tempdb с запросами его вызывающими, Вы можете запустить трассу SQL Server Profiler в процессе слежения за ростом tempdb . Нет никакого непосредственного способа узнать, какой именно запрос вызывает тот или иной прирост tempdb , но Вы можете сделать некоторые предположения, которые помогут Вам отыскать запросы, потенциально являющиеся виновниками этого роста. Основное предположение состоит в том, что любой запрос, который может заставить tempdb расти большими объемами, например, такими, о которых сообщал выше администратор баз данных, будет выполняться значительно дольше по сравнению с типичными запросами к данной базе. Эти запросы, вероятно, покажут также относительно высокое значение в столбце данных WRITES трассы в Profiler . Обнаружение операторов SPOOL в плане выполнения запроса является еще одним признаком того, что SQL Server выполняет большое количество операций записи в tempdb . Оператор SPOOL означает, что SQL Server записывает промежуточный результирующий набор во вторичную память (tempdb) , чтобы впоследствии воспользоваться этими данными для реализации плана.

    Если Вы получили данные, которые помогли выяснить, когда файлы tempdb росли или наблюдался интенсивный ввод/вывод, а также Вы получили список запросов, выполняемых в тот же самый период времени, Вам следует проанализировать запросы из этого списка. Ищите запросы, время начала или окончания которых согласуется с периодом высокого роста, ограничиваясь далее теми запросами, которые потребляли много времени при исполнении (по крайней мере, несколько сотен миллисекунд) и демонстрировали относительно высокое количество операций ввода/вывода (по сравнению с другими запросами, выполнявшимися в то же время). Этот анализ даст Вам короткий список запросов, которые могли вызывать чрезмерный рост tempdb .

    Источник

     

    ps если сообщения являются ответом на ваш вопрос, отмечайте его как ответ(это касается не только этого треда)

    • Предложено в качестве ответа I.Vorontsov 6 ноября 2009 г. 11:05
    • Помечено в качестве ответа Moiseev Stanislav 12 ноября 2009 г. 14:23
    6 ноября 2009 г. 11:03

Все ответы

  • Вы можете использовать счетчик Data File(s) Size (KB) ( Размер файла данных) Монитора производительности (Performance Monitor ), связанный с экземпляром tempdb для объекта производительности базы данных. Использование этого счетчика - хороший способ узнать, когда файл tempdb начинает расти. Вы можете также получить доступ к этим данным непосредственно из SQL Server , выполнив запрос к таблице master .. sysperfinfo , которая материализует все счетчики монитора производительности, экспортируемые SQL Server . Во-вторых, Вы можете периодически проверять вывод sp_spaceused на tempdb . И, наконец, Вы можете использовать функцию fn_virtualfilestats () , чтобы отследить ввод/вывод, который SQL Server записывает в файлы базы данных, которые использует tempdb . Если tempdb растет, вероятной причиной является физический ввод/вывод, связанный с определенными запросами. В этом случае контроль данных fn_virtualfilestats поможет уменьшить список «подозрительных» запросов, вызывающих рост tempdb . Любой из этих методов позволяет отслеживать рост tempdb в течение конкретного периода времени.

    Чтобы найти связь роста tempdb с запросами его вызывающими, Вы можете запустить трассу SQL Server Profiler в процессе слежения за ростом tempdb . Нет никакого непосредственного способа узнать, какой именно запрос вызывает тот или иной прирост tempdb , но Вы можете сделать некоторые предположения, которые помогут Вам отыскать запросы, потенциально являющиеся виновниками этого роста. Основное предположение состоит в том, что любой запрос, который может заставить tempdb расти большими объемами, например, такими, о которых сообщал выше администратор баз данных, будет выполняться значительно дольше по сравнению с типичными запросами к данной базе. Эти запросы, вероятно, покажут также относительно высокое значение в столбце данных WRITES трассы в Profiler . Обнаружение операторов SPOOL в плане выполнения запроса является еще одним признаком того, что SQL Server выполняет большое количество операций записи в tempdb . Оператор SPOOL означает, что SQL Server записывает промежуточный результирующий набор во вторичную память (tempdb) , чтобы впоследствии воспользоваться этими данными для реализации плана.

    Если Вы получили данные, которые помогли выяснить, когда файлы tempdb росли или наблюдался интенсивный ввод/вывод, а также Вы получили список запросов, выполняемых в тот же самый период времени, Вам следует проанализировать запросы из этого списка. Ищите запросы, время начала или окончания которых согласуется с периодом высокого роста, ограничиваясь далее теми запросами, которые потребляли много времени при исполнении (по крайней мере, несколько сотен миллисекунд) и демонстрировали относительно высокое количество операций ввода/вывода (по сравнению с другими запросами, выполнявшимися в то же время). Этот анализ даст Вам короткий список запросов, которые могли вызывать чрезмерный рост tempdb .

    Источник

     

    ps если сообщения являются ответом на ваш вопрос, отмечайте его как ответ(это касается не только этого треда)

    • Предложено в качестве ответа I.Vorontsov 6 ноября 2009 г. 11:05
    • Помечено в качестве ответа Moiseev Stanislav 12 ноября 2009 г. 14:23
    6 ноября 2009 г. 11:03
  • возможно ли установить ограничения на размер бд?
    перенести на другой диск (большего размера)?

    попытка установить свойство AutoShrank в true успехов не принесла.
    6 ноября 2009 г. 14:38
  • Можно, есть параметр MAXSIZE, но это не рекомендуется. Ограничение размера может вызвать нехватку дискового пространства для базы данных. Что может вызвать значительные нарушения в рабочей среде и препятствовать завершению операций выполняющихся приложений. Если для базы данных  был задан параметр MAXSIZE и нужно увеличить размер базы данных , выполните одно из следующих действий:

    -Увеличьте размер файлов в файловой группе по умолчанию, которую в данный момент использует база данных .

    - Добавьте новый файл в файловую группу по умолчанию.

    - Разрешите файлам, используемым базой данных, расти автоматически.




    База данных tempdb
    Уменьшение размера базы данных tempdb
    Оптимизация производительности базы данных tempdb
    Планирование размера базы данных tempdb

    6 ноября 2009 г. 15:00
  • Большое спасибо за помощь!
    10 ноября 2009 г. 8:09
  • Большое спасибо за помощь!

    Отмечайте пожалуйста сообщения как ответы(если они таковыми являются), в своих тредах.
    10 ноября 2009 г. 9:00