Физические таблицы в TempDB удаляются автоматически - PullRequest
2 голосов
/ 12 июня 2019

В нашем решении мы создаем несколько физических таблиц в "tempDB" для действия. Но недавно мы столкнулись с проблемой, когда эти физические таблицы удаляются автоматически. Мы хотели бы знать возможные причины / сценарий этой проблемы.

редактирование: Да, я понимаю, что создание физических таблиц в 'tempdb' не рекомендуется, но здесь я ищу только возможные причины, по которым он удаляется.

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

В MS SQL существует два типа временных таблиц - локальная и глобальная .

Политика удаления является следующей:

  • локальные временные таблицы (с префиксом #) : эти таблицы удаляются после того, как пользователь отключается от экземпляра SQL Server
  • глобальные временные таблицы (с префиксом ##) : они удаляются, когда все пользователи, ссылающиеся на таблицу, отключаются от экземпляра SQL Server

Таблицы базы данных tempDB также очищаются при запуске.

Существуют и другие типы таблиц, которые хранятся в tempDB. Одна из них называется табличными переменными (с префиксом @), а другая - persisted временных таблиц (созданных без использования префикса).

Сохраненные временные таблицы удаляются только при перезапуске службы SQL.

0 голосов
/ 12 июня 2019

Из документов :

tempdb создается заново при каждом запуске SQL Server, чтобы Система всегда начинается с чистой копии базы данных. временный таблицы и хранимые процедуры удаляются автоматически при отключении, и никакие соединения не активны, когда система выключена. Следовательно, в tempdb никогда ничего не будет сохранено из одного сеанса SQL Сервер другой. Операции резервного копирования и восстановления запрещены Tempdb.

Это означает, что не только физические таблицы, но и другие объекты, такие как триггеры, разрешения, представления и т. Д., Также будут удалены после перезапуска службы. Вот почему вы не должны использовать tempdb для пользовательских объектов.

Вы можете создать схему в своей собственной базе данных и сохранить задание агента SQL, которое время от времени удаляет все его таблицы, так что вы можете имитировать «временное» физическое табличное пространство для обхода.

0 голосов
/ 12 июня 2019

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

Я так понимаю, что изначально эта стратегия работала для вас, а теперь нет? SQL-сервер увеличит tempDB до оптимального размера, а затем удалит с него данные, но не уменьшит его. В любой момент времени база данных tempDB может быть в основном пустой.

Возможно, ваша база данных tempDB сейчас работает на полную мощность и что-то должно дать. Возможно, некоторые изменения в типе загружаемых запросов и т. Д. Означают, что ваши таблицы стираются. Попробуйте просто увеличить его или создать вторую базу данных tempDB на другом диске.

...