Ускорение построения интерактивных отчётов
1 Рекомендации по обслуживанию БД SQL
Выбирать время для проведения профилактик необходимо таким образом, чтобы не создавать дополнительной нагрузки на сервер во время работы с R-Keeper. Т.е. в ночное время, либо в моменты минимальной загрузки сервера или в нерабочее время. Проделывать профилактику рекомендуется хотя бы раз в месяц, т.к. частое использование этих рекомендаций, как и редкое, ведет к замедлению работы с базой.
Все скрипты запускаются из-под базы, на которой производится обслуживание.
1.1 Порядок работ
1. Отключить автоматическое сжатие (если не отключено):
ALTER DATABASE [Имя_базы] SET AUTO_SHRINK OFF
2. Запустить реиндексацию таблиц базы (раз в месяц):
------------------реиндексация таблиц
DECLARE reindex_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U'
OPEN reindex_cursor
DECLARE tablename sysname
FETCH NEXT FROM reindex_cursor INTO @tablename
WHILE (@FETCH_STATUS <> -1)
BEGIN
EXECUTE ('DBCC DBREINDEX(['+@tablename+'])')
FETCH NEXT FROM reindex_cursor INTO @tablename
END
CLOSE reindex_cursor
DEALLOCATE reindex_cursor
--либо
exec sp_msforeachtable N'DBCC DBREINDEX (''?'')'
3. Дефрагментация базы раз в месяц:
-------------дефрагментация базы
exec sp_msforeachtable N'DBCC INDEXDEFRAG ([Имя_базы], ''?'')'
4. Очистка кэша
-------------очистка кэша
DBCC FREEPROCCACHE
5. Обновить статистику
-------------обновление статистик
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
Все эти шаги можно автоматизировать, если воспользоваться агентом MS SQL https://docs.microsoft.com/ru-ru/sql/ssms/agent/create-a-job и поместить скрипты друг за другом.
6. Отдельно следует проводить проверку базы на ошибки. В случае, если база находится в многопользовательском режиме, то перед выполнением профилактики необходимо перевести ее в однопользовательский режим:
ALTER DATABASE "Имя_базы" SET SINGLE_USER
7. Проверить базу на ошибки:
DBCC CHECKDB ("Имя базы", REPAIR_REBUILD) WITH NO_INFOMSGS
После выполнения - вернуть обратно в многопользовательский режим:
ALTER DATABASE "Имя_базы" SET MULTI_USER
2 Рекомендации по настройке службы агрегатов
Правильная настройка службы агрегатов может значительно сократить время пересчета агрегатов, а также ускорить построение отчетов.
2.1 Корректная настройка пакета смен для пересчета ("Count_shifts" доступен с 1.29.х)
Для оптимального использования службы агрегатов необходимо понимать, сколько смен содержится в базе, объем базы, количество данных по смене.
Для небольших баз (не более 5000 смен) или баз с большим количеством смен, но с малым количеством чеков (менее 100) и их наполненности, рекомендуется устанавливать параметр «Count_shifts» от 10 до 100.
Для баз, с количеством смен от 5000 до 10000, рекомендуется устанавливать 100-500 смен для пересчета.
Для баз, с количеством смен более 10000, параметр «Count_shifts» можно устанавливать от 500 и выше.
2.2 Корректная настройка «глубины» пересчета агрегатов («Month_Recalc_Limit» доступен с 1.29.х)
Чем больше смен указано для пересчета, тем больше времени будет занимать разовый пересчет. Если есть необходимость оперативно получать данные в отчетах, можно указывать меньший объем смен (например, база может содержать данные за прошлые года, а информация по ним не критична).
За настройку «глубины» пересчета агрегатов отвечает новый параметр «Month_Recalc_Limit» (секция [FS_AGREGATE]), который ограничивает агрегирование данных в месяцах.
Пример
При указании параметра "Month_Recalc_Limit=24", агрегаты будут пересчитаны за период "Текущая дата" минус 24 месяца по настоящий момент. При контроле смен для агрегирования смены ранее 24 месяцев назад не будут учитываться.
Параметр можно менять онлайн, т.е. он применяется с момента изменения в ini-файле без перезапуска FS. Таким образом, если база огромная и пересчет всех смен может занять несколько дней, то целесообразно на момент пересчета смен после обновления ограничить выборку годом ("Month_Recalc_Limit=12") для построения отчетов, а далее увеличить этот показатель или присвоить ему значение "0" (все смены).
2.3 Время между пересчетом пакетов смен и время между проверками наличия пакетов смен для пересчета
Параметры «Time_between_recalc» (время между пересчетом пакетов смен, мин) и «Time_between_checking» (время между проверкой наличия пакетов смен для пересчета) рекомендуется оставить равными 0 и 1, соответственно. Это ускорит завершение пересчета.
2.4 Настройка параметров неиспользуемого функционала
Для уменьшения нагрузки на сервер рекомендуется не использовать параметры, которые не нужны для ресторана, например, для SH4, PDS/CRM, внешней службы, рассылки.
2.5 Обновление GUID в таблицах R-Keeper для версий RK7 7.5.2.x – 7.5.4 («UpdateStatGUID» доступен с 1.29.х)
На версиях RK7 7.5.2.x – 7.5.4 основные таблицы RK7 не имели GUID. GUID необходимы для более быстрой связи RK7-FS.
Заведен параметр, управляющий обновлением GUID в основных таблицах R-Keeper – «UpdateStatGUID».
Если производится обновление со старой версии RK7, например, 7.5.2.х-7.5.4.х, то необходимо прописать его в ini-файле FS и установить равным 1, а после пересчета агрегатов - 0. Этот параметр обновляет GUID основных таблиц. При большом объеме данных в базе - заметно увеличивает время при пересчете агрегатов.
2.6 Временная регулировка работы службы контроля смен (параметры «FastControlDays», «NoControlFull» доступны с 1.29.х)
Параметр «FastControlDays» позволяет контролировать указанное количество дней, а не все имеющиеся смены. Служба контролирует смены от сегодняшней даты минус n дней.
«NoControlFull» - параметр, позволяющий отключить полный контроль всех смен. Смены будут контролироваться только службой «FastControl», описанной выше.
2.7 Ускорение отчетов, использующих данные из SH4 («UpdTimeClose», «UpdTimeOpen» доступны с 1.29.х)
Глубину пересчета агрегатов для SH4 можно настроить индивидуально.
По-умолчанию, расписание пересчета агрегатов для открытого периода - 12 часов, для закрытого 7 дней. При большом объеме данных во избежание зацикливания пересчета рекомендуется увеличить промежутки времени для пересчетов.
За частоту пересчета закрытого периода отвечает параметр "UpdTimeClose".
Если нет необходимости постоянно изменять данные закрытого периода, рекомендуется установить "UpdTimeClose=30".
Это означает, что информация об изменении в закрытом периоде будет обновляться 1 раз в 30 дней.
За частоту пересчета открытого периода отвечает параметр "UpdTimeOpen".
Если база SH4 очень большая и обновленные значения из нее для ИО требуются не ежечасно, то рекомендуется выставить параметр "UpdTimeOpen=24".
3 Просмотр отчетов с большим количеством данных (от нескольких сотен тысяч) при помощи внешней службы FRVCLGenerate
3.1 Зачем необходима внешняя служба построения отчетов FRVCLGenerate?
Формирование отчетов с большим количеством данных (от нескольких сотен тысяч) реализовано посредством внешнего приложения FRVCLGenerate (оно является 64- разрядным). Для корректной работы приложения необходима 64-разрядная ОС Windows. Приложение устанавливается инсталлятором RK7. Внешняя служба позволяет обработать большой объем данных, который не может обработать 32-битная архитектура. Feature Server, как и R-Keeper, реализованы на 32х-разрядоной архитектуре. При построении отчета с большим количеством данных, превышающих объем 2Гб, с учетом метаданных, отобразить такой отчет не представляется возможным. Для этого и разработано приложение, написанное на 64-битной архитектуре, позволяющее обрабатывать объемы данных, превышающие 2 Гб. Просмотр отчетов с большим количеством данных посредством FRVCLGenerate реализован в версии плагина 1.22.5 и выше.
Просмотр отчетов с большим количеством данных возможен для Desktop (включая FastCube) - отчетов (в формате .csv) и для FR4 - отчетов (в формате .pdf).
3.2 Каким образом работает внешняя служба?
Внешняя служба и Feature Server работают независимо друг от друга, поэтому отчет будет продолжать строиться после закрытия Feature Server и R-Keeper.
Сформированный отчет помещается в папку «tmp» рядом с исполняемым файлом службы и запаковывается в архив. Feature Server проверяет наличие файла отчета и его статус, через минуту «забирает» файл. Файл не предназначен для использования пользователем. Получить его можно только через соответствующее меню плагина. Проверить готовность файла можно через отчет в ИО «Статус отчета (внешняя служба)» (меню «Расширения» / «Интерактивные отчеты (ИО)» / «Отчеты по безопасности» / «Системные операции»).
Если с момента окончания построения отчета в течение 24 часов Feature Server «не заберет» сформированный файл отчета, то файл будет удален из внешней службы и при запуске Feature Server будет дано повторное задание внешней службе на формирование отчета. Рекомендуется оставлять Feature Server включенным.
При выборке больших объемов данных внешнюю службу можно использовать независимо от выполняемых действий в R-Keeper или плагине, т.е. запустить несколько отчетов, а после завершения их формирования получить отчеты.
3.3 Просмотр отчетов при помощи FRVCLGenerate
Для просмотра отчетов с большим количеством данных необходимо:
1. Установить FRVCLGenerate при помощи инсталлятора RK7.
2. В меню «Расширения»-«Интерактивные отчеты»
2.1 Для Desktop (включая FastCube) - отчетов (в формате .csv ):
- зайти в нужную группу отчетов;
2.2 Для FR4 - отчетов (в формате .pdf):
- зайти в нужную группу отчетов;
- открыть группу «Печатные формы».
3. Выбрать необходимый отчет, правой кнопкой мыши вызвать контекстное меню, выбрать пункт «Выполнить отчет во внешнем приложении» (см. Рис. 1). В открывшемся окне выбрать параметры отчета, нажать «ОК» (см. Рис. 2). Отобразится сообщение о формировании отчета, нажать «ОК» (см. Рис. 3).
(рис.1)
(рис.2)
(рис.3)
4. В меню «Расширения»-«Интерактивные отчеты»-«Отчеты по безопасности»-«Системные операции»-«Статус отчета (внешняя служба)» отследить статусы выполнения отчетов (см. Рис. 4, Рис. 5).
(рис.4)
(рис.5)
5. Если статус выполнения отчета «ОК», в меню «Расширения»-«Интерактивные отчеты» выбрать необходимый отчет, правой кнопкой мыши вызвать контекстное меню, выбрать пункт «Получить отчет из внешнего приложения» (см. Рис. 6). В появившемся окне указать путь к папке, в которой необходимо сохранить отчет (см. Рис. 7, Рис. 8).
(рис.6)
(рис.7)
(рис.8)
В том случае, если отчет еще не сформировался, отобразится ошибка (см. Рис. 9).
(рис.9)
После этого отчет сохранится в файл в указанной папке.
6. Для просмотра отчета необходимо зайти в указанную в п. 5.папку, открыть нужный файл.