Что могут сделать сифты (SIFT), если за ними не следить.
Добрый день!
На статью про репликацию из прошлого выпуска рассылки начали приходить отклики. Вот что пишет Дмитрий Катсон:
Добрый день. Хотелось бы добавить по пункту 2 - когда репликация идет по заполнению буфферной таблицы.
Для версии навижена SQL есть специальная утилитка, которая позволяет настраивать таблицы, которые нужно реплицировать,
а затем позволяет заполнять буфферную таблицу уже подготовленными командами при вставке, удалении,
переименовании или модифицировании таблицы.
Затем запускается "учет" буфферной таблицы и все данные перетекают в соответствующую таблицу на SQl в другой базе.
Утилитку бесплатно можно скачать с сайта http://mibuso.com/dlinfo.asp?FileID=883
Также есть возможность настроить репликацию в SQL Management studio.
Спасибо Дмитрию за ценное дополнение, ждем от него комментариев и дальше :)
А тема сегодняшнего выпуска - что могут сделать сифты, если за ними не следить :)
Navision: Sum Index Fields Technology
Сифты (SIFT) - это столь любимые всеми и рекламируемые заказчикам флоуфилды. На сервере они хранятся в виде отдельных таблиц с названиями вида Фирма$10019100.
В них рассчитаны все результаты группировок суммируемых полей таблицы по полям связанного с ними ключа.
Заполнение и пересчет данных в этих таблицах висят на SQL-триггерах. Это важно - контроль сифтов выведен на уровень SQL Server'а.
В противном случае любые манипуляции с данными НЕ ЧЕРЕЗ ИНТЕРФЕЙC навижн привели бы к нарушению целостности базы и летальному исходу.
(На этом этапе чтения выпуска полезно открыть Enterprise manager и лично посмотреть тексты нескольких триггеров :-)
Текст триггера формируется системой автоматически.
А теперь о главном. Каждый добавляемый вами в навижн ключ с привязанным полем для пересчета - увеличивает базу и замедляет процедуры вставки/измененения/удаления записей.
Ведь агрегатные показатели пересчитываются для всех комбинаций полей, входящих в ключ. Я видел таблицы с 20 ключами, на 8 из которых висели сифты... Простая вставка занимала около 10 секунд :-(
Разумеется, это крайний случай.
Как же этого избежать? Как сочетать мощь (!) использования сифтов и не допустить при этом распухания базы и замедления операций по вставке и удалению записей?
Работать надо в нескольких направлениях:
1. Самое важное :-) В свойствах ключа навижн есть замечательное свойство - SIFTLevelsToMaintain. В нем вы можете самостоятельно выбрать комбинации полей,
для которых должны быть рассчитаны агрегаты. Простановка нужных галок позволяет сильно уменьшить размеры базы и ускорить работу. Иногда ускорение достигает нескольких десятков процентов.
2. Провести ревизию ключей и удалить неиспользуемую часть. Очень часто разработчики хотят побыстрее доделать задачу и лепят новые ключи как пирожки.
А это надо делать с осторожностью (см. выше). Как определить, какие ключи взаимозаменяемы, от каких отказаться, какие откровенно атавизмы? Для этого есть очень хорошая вещь -
Microsoft Business Solutions Developers' Toolkit. Он позволяет отследить ВСЕ вхождения ключей в код. Ну а выводы делайте сами.
Да, кстати, если Вам пригодились наши советы из предыдущих выпусков, и Вы даже применили их на практике - пишите на likeart@mail.ru! Рассылке не хватает вашей обратной связи :-)
P.S. Хотите поделиться своими знаниями? Всегда Welcome! Любые статьи, Q & A, FAQ, советы - все опубликуем, обязательно укажем автора и дадим линк на сайт :-)
С наилучшими пожеланиями,
Андрей Стрельников.
Группа «Technologies like Art».
Разработки в сфере Navision. Скоростные оптимизации, системная интеграция. Технологические решения.
e-mail: likeart@mail.ru.