Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Зеркальная БД только для чтений  [new]
expl0rer
Member

Откуда:
Сообщений: 12
Добрый день,

Есть большая OLTP база данных, куда пользователи вносят оперативные данные. Очень много изменений и вставок.
Нужно по этой базу строить отчеты в самых разных разрезах. Для того, чтобы быстро строились отчеты - нужно создать много дополнительных индексов, а если их создать на основной базе данных, это замедлит изменение данных.

Хотелось бы иметь сбоку еще одну базу данных (только для чтения), по структуре и составу аналогичную оригинальной, но с набором дополнительных индексов. Дополнительное требование заказчика: данные вносимые в основную базу данных должны появляться в отчетах с задержкой не более 1 мин.

Какие-то механизмы MS SQL Server (transaction log replication, log mirroring или что-то еще) позволяют получить желаемое ?
24 июн 16, 08:24    [19329192]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
expl0rer
Хотелось бы иметь сбоку еще одну базу данных (только для чтения), по структуре и составу аналогичную оригинальной, но с набором дополнительных индексов.
Если так, то придётся ограничится репликацией транзакций.
Впрочем, они удовлетворит ваши потребности.
24 июн 16, 08:33    [19329220]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
Можно создать пакет SSIS с задачей копирования из источника CDC а таблицы. Зависит от бизнес-требований.
24 июн 16, 11:14    [19330242]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Владислав Колосов
Можно создать пакет SSIS с задачей копирования из источника CDC а таблицы. Зависит от бизнес-требований.
Не уверен, что можно SSIS пакетом реализовать уже озвученное бизнес требование: "должны появляться в отчетах с задержкой не более 1 мин."
Разве что с извращениями и нестабильно.
24 июн 16, 11:20    [19330280]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
alexeyvg,

а в чем может быть проблема? Никогда не пользовался SISS+CDC.
24 июн 16, 11:44    [19330515]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Владислав Колосов
alexeyvg,

а в чем может быть проблема? Никогда не пользовался SISS+CDC.
Ну, просто 1 минута задержки - это мало.
Что, нужно будет запускать пакет раз в секунду? Они на немного другое применение рассчитаны, там всякие валидации, преэкзекют, открытия коннектов, потоков логирования занимают некоторое время.
Или это будет непрерывно исполняемый пакет, который кодом на C# будет что то там делать? Тогда это из "извращений".
В общем, не очень хорошо.

А транзакционная репликация прямо создана для такого. Она вычитывает из лога транзакций изменения данных, и делает вставки/изменения данных на подписчиках, всё это работает с более менее приемлемыми задержками. Таблицы на подписчиках при этом остаются полностью доступны, и могут даже иметь отличающуюся структуру (например, доругие индексы, или, например, отличающийся набор полей)
Там, конечно, минута - это на пределе, но в целом будет работать, при наличии быстрых каналов и адекватного такой задаче железа.
24 июн 16, 11:52    [19330597]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
expl0rer
Дополнительное требование заказчика: данные вносимые в основную базу данных должны появляться в отчетах с задержкой не более 1 мин.
Транзакционная репликация, даже в идеальных условиях, таких гарантий не даст.
А других приемлемых вариантов под заявленные требования нет.

ЗЫ: А требование заказчика, скорее всего, высосано из пальца.
24 июн 16, 12:19    [19330833]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
expl0rer
Хотелось бы иметь сбоку еще одну базу данных (только для чтения), по структуре и составу аналогичную оригинальной, но с набором дополнительных индексов. Дополнительное требование заказчика: данные вносимые в основную базу данных должны появляться в отчетах с задержкой не более 1 мин.

Какие-то механизмы MS SQL Server (transaction log replication, log mirroring или что-то еще) позволяют получить желаемое ?


Обычно данная функциональность обеспечивается с помощью КХД.
Но требование в 1 мин - это из разряда фантастики.
Тут даже зеркалирование будет всё тормозить, с учётом перестройки индексов.
24 июн 16, 12:20    [19330845]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
а может будет достаточно сделать снэпшот базы?
24 июн 16, 12:23    [19330865]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
o-o
Guest
каждую минуту по снэпшоту?
24 июн 16, 12:27    [19330896]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
o-o
Guest
если не хотят свое OLTP обвешивать индексами,
а данныe нужны в реальном времени,
можно секционировать.
индексы только на секции, в которые OLTP уже не пишет
24 июн 16, 12:29    [19330916]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
o-o
Guest
и в дополнение к снэпшоту: он же readonly.
какие же дополнительные индексы на снэпшоте?
24 июн 16, 12:32    [19330950]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
Не припомню коммерческой отчетности с требованием задержки < 1 минут. Или Вы там биржевыми сводками занимаетесь?
24 июн 16, 12:41    [19331008]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
expl0rer
Member

Откуда:
Сообщений: 12
1 мин - изначальное требование заказчика, но, думаю, можно обосновать и 5 мин. Спасибо. Будем пробовать репликацию транзакциями.
24 июн 16, 13:17    [19331243]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
Для начала стоит понять "об чём спор"...
expl0rer
Очень много изменений и вставок.
много это сколько?
expl0rer
Нужно по этой базу строить отчеты в самых разных разрезах
как часто будут строится отчёты?
expl0rer
Для того, чтобы быстро строились отчеты - нужно создать много дополнительных индексов
есть разумное время ожидания построения отчёта (или как всегда "чтоб мгновенно")?
expl0rer
нужно создать много дополнительных индексов, а если их создать на основной базе данных, это замедлит изменение данных.
а вы пробовали тестировать, уверены, что замедление будет заметно?

как вам уже отвечали если заказчик "хочет" и "готов вкладывать деньги в железо" можно рассматривать различные варианты от транзакционной реплики до балансировочников вроде cisco или f5
24 июн 16, 13:37    [19331380]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
expl0rer
можно обосновать и 5 мин.
Обосновать можно. Гарантировать нельзя.
Например, если на издателе изменить одной инструкцией update пару миллионов строк, то на подписчик такое изменение уйдет как пара миллионов инструкций update, изменяющих одну строку.
И применяться такой паровоз может гораздо дольше 5 мин.
24 июн 16, 13:40    [19331413]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
o-o
...
можно секционировать.
индексы только на секции, в которые OLTP уже не пишет

А SQL Server умеет создавать индексы на отдельно взятой секции?
24 июн 16, 17:32    [19332910]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
o-o
Guest
Богдан Гоцкий
o-o
...
можно секционировать.
индексы только на секции, в которые OLTP уже не пишет

А SQL Server умеет создавать индексы на отдельно взятой секции?

нет, но можно разложить данные по таблицам (например, за год)
и собрать их во вью.
а на каждой таблице развести свой огород индексов.
"partitioned view"
24 июн 16, 18:01    [19333030]     Ответить | Цитировать Сообщить модератору
 Re: Зеркальная БД только для чтений  [new]
komrad
Member

Откуда:
Сообщений: 5760
кстати, может filtered indexes пригодятся

http://sqlmag.com/blog/how-about-filtered-indexes-instead-partitioning
25 июн 16, 02:34    [19334429]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить