Как периодически перестраивать таблицу отчетов, к которой очень часто обращаются? - PullRequest
10 голосов
/ 07 июня 2011

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

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

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

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

Ответы [ 4 ]

13 голосов
/ 07 июня 2011

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

CREATE SYNONYM ReportingTable FOR dbo.tableA;

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

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

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

Edit, 24 ноября 2011

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

Редактирование, февраль 2012 г.

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

ALTER TABLE .. SWITCH ..

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

Редактировать, февраль 2012 г. (2)

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

1 голос
/ 07 июня 2011

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

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

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

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

0 голосов
/ 07 июня 2011

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

0 голосов
/ 07 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...