Как периодически перестраивать таблицу отчетов, к которой очень часто обращаются?

Для обновления подготовленной таблицы отчетов требуется около 5-10 минут. Мы хотим постоянно обновлять эту таблицу (возможно, раз в 15 минут или непрерывно).

Мы запрашиваем эту отчетную таблицу очень часто (много раз в минуту), и я не могу удержать ее на какое-то время. Это нормально, если данные составят 15 минут.

Я не могу отказаться от таблицы и воссоздать ее. Я не могу удалить содержимое таблицы и воссоздать ее.

Есть ли метод, который я должен использовать, например, обмен между двумя таблицами (считая один из них, пока мы строим другой), или я делаю этот 5-10-минутный процесс в большой транзакции?

Ответ 1

Использовать синонимы?. При создании это указывает на таблицу A.

CREATE SYNONYM ReportingTable FOR dbo.tableA;

Через 15 минут вы создадите tableB и переопределите синоним

DROP SYNONYM ReportingTable;
CREATE SYNONYM ReportingTable FOR dbo.tableB;

Синоним - это просто указатель на фактическую таблицу: таким образом обработка фактических переименований таблиц и т.д. упрощается и абстрагируется, и все коды/клиенты будут использовать ReportingTable

Изменить, 24.11.2011

Синонимы доступны во всех изданиях: переключение разделов - только Enterprise/Developer.

Изменить, февраль 2012

Вы можете переключать целые таблицы в стандартной версии (возможно, Express, untested)

ALTER TABLE .. SWITCH ..

Это было бы более элегантно, чем синонимы, если целевая таблица пуста.

Изменить, февраль 2012 (2)

Кроме того, вы можете повернуть по схемам в соответствии с Кэшировать объединенные таблицы в SQL Server

Ответ 2

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

Рекомендуемый подход для отчетов в режиме реального времени - это разгружать чтения из операционной системы и отдельные операции записи из активности чтения в системе отчетности.

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

Для получения дополнительной информации о выборе дизайна в режиме реального времени я рекомендую хорошо написанную статью Уэйн Экерсон, "Лучшие практики в операционном BI" .

Ответ 3

Наличие двух таблиц звучит как простейшее решение.

Ответ 4

В нашем проекте мы использовали две таблицы и Create/Alter View для переключения.