Производительность MSSQL 2005
От: maxodus  
Дата: 18.10.10 21:40
Оценка:
Всем, привет.
В базах данных не силен, так что извините за морось, если будет. Хочу спросить совета перед началом экспериментов.
Возникла необходимость написать очень грузную процедуру расчета данных на сервере.
Требования:
— создать периодическую процедуру расчета статистических данных по результатам работы учетной системы.
— рассчитать за возможно короткое время и результаты предоставить в виде отдельной таблицы.
— вынос всего функционала и данных на отдельный сервер не подходит, т.к. результата расчета должен быть использован существующей учетной системой и должен храниться в той же базе данных, что и исходные данные.
— не использовать технологии OLAP (учетная система не умеет полноценно работать с кубами)

Заведомо известно, что запуск процедуры с использованием штатных средств (существующей учетной системы) не уложится в максимально допустимый период (1 ночь) т.к. сервер находится под нагрузкой круглосуточно. Нагрузка на сервер связана не с исчерпыванием ресурсов, а с большим количеством блокировок данных. Данные непрерывно модифицирует вышеуказанная учетная система не умеющая работать с версионностью записей. (READ_COMMITTED_SNAPSHOT OFF). Саму процедуру буду писать на SQL (пока еще не совсем понятно как но по крайней мере появится возможность использовать MSSQL на полную).

Суть вопроса: выиграю ли я что-то по времени если перед расчетом перенесу необходимые исходные данные с рабочего сервера на какой либо другой сервер (или просто в другую базу данных там же), там рассчитаю и верну результаты в таблицу обратно в базу. Это идея или "анекдот", собственно? Если это идея, то можно ли перенос данных настроить с помощью механизма репликаций и как? (В общем куда рыть надо?)

P.S. может просто написать в той же базе, но с использованием версионности так чтобы не мешать работе системы? Тогда как? ... Вопросов много — ответов нет.

Хелп, плз!
Re: Производительность MSSQL 2005
От: Didi  
Дата: 19.10.10 05:50
Оценка: +1
M>Суть вопроса: выиграю ли я что-то по времени если перед расчетом перенесу необходимые исходные данные с рабочего сервера на какой либо другой сервер (или просто в другую базу данных там же), там рассчитаю и верну результаты в таблицу обратно в базу. Это идея или "анекдот", собственно? Если это идея, то можно ли перенос данных настроить с помощью механизма репликаций и как? (В общем куда рыть надо?)

M>P.S. может просто написать в той же базе, но с использованием версионности так чтобы не мешать работе системы? Тогда как? ... Вопросов много — ответов нет.


M>Хелп, плз!


Перенос в др. базу тебе ничего не даст, на др. сервер, если только твой расчет слишком прожорлив до процессорного времени и это самое узкое место. Обычно данные выгружают во временные таблицы с необходимой группировкой и объединением и работают уже непосредственно с ними. При расчете статистики по объемным данным особая точность не нужна (в большом строительстве метр не кривизна), т.е. за копейками гнаться не стоит, поэтому если мешают блокировки можно использовать грязное чтение — процент ошибки будет крошечный. Если у тебя используется серьезный мат. аппарат посмотри в сторону создание процедуры на .NET — потому как TSQL ужасно тормозная вещь, по возможности избегай создание курсоров, делай все вычисления запросами и в один проход.
Собственно все.
Re[2]: Производительность MSSQL 2005
От: Аноним  
Дата: 20.10.10 09:49
Оценка:
Здравствуйте, Didi, Вы писали:

D>Перенос в др. базу тебе ничего не даст, на др. сервер, если только твой расчет слишком прожорлив до процессорного времени и это самое узкое место. Обычно данные выгружают во временные таблицы с необходимой группировкой и объединением и работают уже непосредственно с ними. При расчете статистики по объемным данным особая точность не нужна (в большом строительстве метр не кривизна), т.е. за копейками гнаться не стоит, поэтому если мешают блокировки можно использовать грязное чтение — процент ошибки будет крошечный. Если у тебя используется серьезный мат. аппарат посмотри в сторону создание процедуры на .NET — потому как TSQL ужасно тормозная вещь, по возможности избегай создание курсоров, делай все вычисления запросами и в один проход.

D>Собственно все.

Спасибо большое.
К сожалению, использовать дотНет не могу, т.к. встретил сопротивление руководства (поддерживать будет некому потом). Остается TSQL.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.