Страница 1 из 3

MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 10:50
aissp
Есть проблема не знаю как ее решить. Пробема вышлядит следуюшим образом.
Есть база данных в которую пишется телеметрия. Пишется быстро и помногу. По сути внутри одна таблица без индексов и ключей, в которую десяток сереверов пишет данные. Никто ее он лайн не читает. Есть пара опез (изв ) сотрудников которые хотят ету информацию обрабатывать, ето не совсем он лайн потому как они генерят репорты делают сложные свои queries и прочий бред. База телеметрии очень быстро растет. Хочется следующего: Периодически снимать с базы снапшоты и убивать в ней все записи, снапшоты я потом могу передавать на обработку двум опез(изв)сотрудникам. И при етом никак не задевать (замедлять лочить) процесс добавления новых записей в ету базу данных (таблицу)

Есть идеи? В МайСиквеле мы ето рещали с помощью black hole replication когда новые записи копились только в бинарном логе, который затем реплецировался. Ничего подобного найти в сиквел серевере не могу.

(Пиво легко)

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 11:14
Stanislav
А OLAP попробовать? Там интегрированный Микрософтовский анализис сервис - обещают эффективное обновление данных...

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 11:44
aissp
я наверное неправильно изложил что надо :) (Как обычно). Нужнотипа такого
1. From Base1.Table1 select all records (without locking last using page all almost all)
2. Bulk insert all records from request 1 to Base2.Table1
3. Delete all records from request 1.

ну и все ето в джоб какой-то.

Вопроса собственно два (1) Я не полный бред говорю? (2) ак при организации такой задачи не завалить производительности базы данных 1 (ето я про лок таблицы) Ну и собственно (3)-й бонусный вопрос как ето реализовать аккуратно?

я естественно не dba а так программер который знает как использовать group by и отличает кластерные индексы от обычных=)

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:08
Stanislav
aissp писал(а):я наверное неправильно изложил что надо :) (Как обычно). Нужно типа такого
1. From Base1.Table1 select all records (without locking last using page all almost all)
2. Bulk insert all records from request 1 to Base2.Table1
3. Delete all records from request 1.
ну и все ето в джоб какой-то.
Вопроса собственно два (1) Я не полный бред говорю? (2) ак при организации такой задачи не завалить производительности базы данных 1 (ето я про лок таблицы) Ну и собственно (3)-й бонусный вопрос как ето реализовать аккуратно?
я естественно не dba а так программер который знает как использовать group by и отличает кластерные индексы от обычных=)
Почему же, я все понял, что надо и предложил другой путь решения. :D

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:25
Stanislav
aissp писал(а): Вопроса собственно два (1) Я не полный бред говорю? (2) ак при организации такой задачи не завалить производительности базы данных 1 (ето я про лок таблицы) Ну и собственно (3)-й бонусный вопрос как ето реализовать аккуратно?
1. Нет, не полный. :D 2. А селект будет лочить таблицу? ИМХО производительность снизится - из-за дополнительной задачи, но не из-за локов. 3. Маленькими порциями?

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:26
aissp
Ну значит я не понял ответа :) В силу дремучести

3. Что есть маленькие порции? Делать селект по таймстампу? Мне кажется не выгодно. Хотелось типа взять все страницы кроме последней текущей рабочей, и только их откопировать а затем и прибить.

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:27
Stanislav
aissp писал(а):Ну значит я не понял ответа :) В силу дремучести
Наверное я его неправильно изложил... (с) aissp :D

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:32
white_raven
сделать триггер ON INSERT и енейбл его когда надо
копирнуть тейбл
стереть тейбл
дисейбл триггер

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 12:35
Stanislav
aissp писал(а): 3. Что есть маленькие порции? Делать селект по таймстампу? Мне кажется не выгодно. Хотелось типа взять все страницы кроме последней текущей рабочей, и только их откопировать а затем и прибить.
У вас специфическая ситуация - таблица только пишется, можно просто тупо ставить ЛИМИТ столько то записей от начала.
Если лог пишется - миллион записей в час, то маленькими порциами будет по 20 тыс. в мин, или по 100 тыс. в 5 минут - зависит от того насколько просадит производительность селект 100 тыс. записей.
По моим наблюдениям, селект около 50000 не очень хитро сделанных записей в MySQL - занимает несколько секунд на не самом новом сервере.

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 13:47
Stanislav
Наверное, можно совсем просто - забабахать транзакцию, переименовать таблицу, создать новую таблицу, закончить транзакцию.

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 13:52
aissp
помрут сервера. bcp видимо буду использовать.... (пока не найду лучшего рещения)

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 17:23
meser
я что-то не врубился, а репликэйшн не спасет отца русской демократии? Ну обычная такая паблишер-сабскрайбер (мастер-слэйв)?
10 лет назад вполне работала на 6.5 - дык с тех лет сколько воды утекло. Должна работать еще лучше! Наверное уже куча всяких режимов. Ведь репликация идет отдельным тредом и не лочит таблицы. По-моему.

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 17:33
meser
вот тут как раз о разделении олтп и дата уорхауз с помощью репликации:

http://msdn.microsoft.com/en-us/library ... .100).aspx

или тебе что-то другое надо?

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 17:39
aissp
Не подходит к сож аж два раза. В таблице телеметри нету ключевых полей, без них реплицировать отказывается. (ну ето бог с ним не сташно можно добавить) а вот второе мастер таблица то растет... И растет она сейчас примерно на 200 мегов в сутки, мне она в таком объеме нафиг не нужна. Поетому хочеться не copy&paste делать а cut&paste/

Тьфу на меня неужели опять плохо объяснил.

С благодарностью восприму идеи.

Re: MS SQL server требуется помощь зала.

Добавлено: 05 апр 2010, 18:02
meser
aissp писал(а):Не подходит к сож аж два раза. В таблице телеметри нету ключевых полей, без них реплицировать отказывается. (ну ето бог с ним не сташно можно добавить) а вот второе мастер таблица то растет... И растет она сейчас примерно на 200 мегов в сутки, мне она в таком объеме нафиг не нужна. Поетому хочеться не copy&paste делать а cut&paste/

Тьфу на меня неужели опять плохо объяснил.

С благодарностью восприму идеи.
все нормально объяснил. можно было-бы удалять суточный прирост, но надо как-то защитить сабскрайбера. фильтр на операции можно ставить на репликацию (типа insert, update реплицируем, а delete ни-ни)? Еще лучше переводить таблицу у сабскрайбера в рид-онли если это возможно у мелкомягких, и просто транкейтить оригинал, периодически, по самое ля-ля. О, кстати, а почему-бы не сделать две таблицы у слэйва? Одна прямая реплика, другая уже хранилище. периодически сливать с реплики в основную и транкейтить на мастере?