Статистика SQL Server хранится в базе данных или пуле буферов?

10

Просто интересно, статистика хранится в базе данных, а не в памяти? Если я выполню резервное копирование / восстановление базы данных с сервера prod на сервер разработки, сохранит ли она ту же статистику, чтобы планы выполнения не сильно изменились, если я сделаю это на сервере разработки?

Джой Уокер
источник

Ответы:

15

Буферный пул является кешем базы данных. Никогда не существует 'или', вещи, которые находятся в пуле буферов, также всегда находятся в базе данных. И все, что считывается из базы данных, должно даже временно присутствовать в пуле буферов.

Что касается вопроса: статистика находится в базе данных, поэтому резервное копирование / восстановление сохранит статистику.

Обратите внимание, что сохранение статистики не является гарантией планирования воспроизводимости. Другие факторы влияют на генерацию плана, например, количество процессоров и объем оперативной памяти.

Ремус Русану
источник
хорошо, имеет смысл. Спасибо за разъяснения!
Джой Уокер,
3

Как сказал Ремус , статистика таблиц хранится в базе данных подобно другим объектам, таким как таблицы и индексы. Они играют большую роль в выборе плана выполнения, но есть и другие факторы.

При этом SQL Server знает другой тип статистики, статистику, которая дает нам информацию о недавнем поведении.

Например, DMV ys.dm_db_index_usage_statsи sys.dm_db_index_operational_statsвозвращают статистику о том, как используется индекс.

Эти статистические данные хранятся только в памяти. Заблудиться при перезапуске сервера и не путешествовать с резервной копией.

Однако оптимизатор также не использует их для создания плана.

Себастьян Майн
источник
Да, вот почему у меня был вопрос / путаница в первую очередь. Я думал, что статистика похожа на DMV. Они могут отсутствовать при перезапуске сервера или восстановлении базы данных на другом сервере. Спасибо за высказывание.
Джой Уокер