Инструменты очистки дискового пространства

Продукты
Все продукты

При работе с большими объемами информации важной частью обслуживания базы данных является своевременное удаление устаревших и неактуальных записей. Это позволяет сохранять дисковое пространство на сервере базы данных, увеличивая ее быстродействие.

Возможные причины быстрого роста базы данных 

К стремительному росту базы данных могут приводить:

  • Некорректно настроенные или избыточные права доступа на записи. Например, когда права доступа на запись настроены индивидуально для большого количества пользователей, не объединенных в группы. В этом случае рекомендуем изменить настройки и актуализировать права доступа в приложении. Подробнее: Управление доступом.
  • Отсутствие ограничений на загрузку файлов в приложение. Файлы могут быть добавлены в приложение сотрудниками, загружены при синхронизации почты или прикреплены к сообщениям на портале самообслуживания. Рекомендуем ограничить размер загружаемых в приложение файлов до 10 Мб. Управлять этим ограничением можно в системной настройке “Максимальный размер загружаемого файла” (код “MaxFileSize”). Также рекомендуем регулярно проверять актуальность загруженных файлов и удалять устаревшие. Для этого в приложении можно настроить бизнес-процесс.
  • Синхронизация всех писем из почтовых ящиков пользователей. Рекомендуем выбрать для загрузки в приложение только те папки почтового ящика, письма из которых необходимо обработать в приложении. Например, папки “Важные” или “Отмеченные”. Подробнее: Настроить загрузку почты в систему.
  • Включение трассировки процессов на длительный период. Отладка процессов обычно выполняется на среде разработки или тестовом сайте. В случае, когда необходимо собрать отладочную информацию на продуктовом сайте, рекомендуем отключать трассировку сразу по завершении анализа проблем с выполнением процесса. Выполнить трассировку параметров процесса.
  • Некорректная настройка логики выполнения бизнес-процессов, из-за которой процесс находится в состоянии “Выполняется” гораздо дольше необходимого. В этом случае в приложении сохраняются все временные файлы, которые имеют отношение к выполнению процесса. Рекомендуем моделировать бизнес-процессы таким образом, чтобы они имели однозначные условия завершения и не оставались в состоянии “Выполняется” дольше нескольких часов. Подробнее: Просмотреть информацию о выполнении процессов.
  • Некорректная настройка чтения данных в бизнес-процессах. Значения, получаемые в бизнес-процессе при выполнении элемента Читать данные хранятся в таблицах с временными данными до завершения выполнения процесса. В случаях, когда для выполнения бизнес-процесса нет необходимости получать значения всех колонок объекта, рекомендуем настраивать точный список значений, которые необходимо вычитать. Это позволит существенно сократить количество временных данных, хранящихся в приложении. Подробнее: Элемент процесса Читать данные.
  • Избыточное логирование изменений. Рекомендуем включать логирование записей только в тех разделах, где необходимо отслеживать динамику смены данных, например, в продуктовом каталоге. Если вы хотите сохранять информацию об изменениях записей, то необходимо регулярно выполнять чистку журнала изменений от неактуальных данных. Подробнее: Очистить логи журнала изменений.
  • Некорректная настройка интеграции внешних сервисов с приложением Creatio. При отправке запроса к Creatio без заголовка ForceUseSession внешние сервисы вынуждены повторно выполнять аутентификацию. Подробнее: Аутентификация (документация по разработке).
  • Подключение избыточных культур. При активации культуры в приложение загружаются файлы перевода, которые обновляются в каждой новой версии Creatio. Рекомендуем подключать только те культуры, которые используются среди сотрудников вашей компании, и удалять из приложения неактуальные.

Инструменты очистки базы данных Creatio 

В Creatio для очистки дискового пространства предусмотрены следующие возможности:

  • архивация и автоматическая очистка журнала процессов,
  • очистка журнала изменений,
  • удаление записей в разделах,
  • удаление данных в ходе бизнес-процесса.

Автоматическая очистка журнала процессов 

В Creatio предусмотрено логирование всех запускаемых процессов. Это позволяет отслеживать узкие места спроектированных схем и оптимизировать их, а также анализировать эффективность работы сотрудников. Чтобы сократить объем используемого пространства, Creatio автоматически архивирует данные о процессах, которым больше 30 дней. Архивные записи сохраняются в системе и доступны для обработки еще 360 дней, после чего они автоматически удаляются. Вы можете управлять сроками архивации данных журнала и хранения архивных записей.

Подробнее: Архивирование записей журнала процессов.

Очистка журнала изменений 

Вы можете очищать историю журнала изменений, чтобы избежать хранения устаревших записей в системе. Рекомендуем регулярно очищать записи логов, чтобы в разделе Журнал изменений содержалась только актуальная на данный момент информация.

Подробнее: Очистить логи журнала изменений.

Удаление записей в разделах 

В разделах приложения могут храниться неактуальные записи. Вы можете удалять такие записи выборочно или массово в любом разделе Creatio. Если у выбранной для удаления записи есть связи в других разделах системы, то Creatio предложит вам просмотреть их и принять решение о необходимости удаления. Вы можете удалить всю информацию или только выбранную запись и оставить все связанные данные.

Подробнее: Удалить запись.

Удаление данных в ходе бизнес-процесса 

Вы можете автоматизировать очистку дискового пространства при помощи бизнес-процессов. Элемент процесса Удалить данные позволяет удалить из любого объекта системы как одну запись, так и несколько записей, соответствующих определенным условиям. Например, вы можете создать бизнес-процесс, который будет удалять все запланированные активности, которые были отменены. Такой процесс может запускаться:

  • По таймеру, в определенное время. Такое решение удобно тем, что процесс можно запускать с заданной периодичностью, например, раз в месяц, и во время наименьшей загруженности приложения, например, ночью.
  • При наступлении определенного события. Такое решение удобно тем, что процесс запускается автоматически и только в том случае, когда в приложении есть данные для удаления.
  • Вручную. Такое решение удобно тем, что пользователь сможет запустить процесс в любой момент, когда в этом возникнет необходимость.

Подробнее: Элемент процесса Удалить данные.

Удаление неиспользуемых культур  

Вы можете удалять культуры, которые не планируете больше использовать, чтобы очистить дополнительное дисковое пространство. Для удаления воспользуйтесь скриптом:

IF OBJECT_ID('tempdb..#UsedCultures') IS NOT NULL
       DROP Table #UsedCultures
-- Получение списка используемых культур
SELECT DISTINCT cult.Id
INTO #UsedCultures
FROM SysCulture cult
INNER JOIN SysAdminUnit au
       ON au.SysCultureId = cult.Id
INSERT INTO #UsedCultures
	(Id)
SELECT
	SysSettingsValue.GuidValue
FROM
	SysSettingsValue
INNER JOIN SysSettings
	ON SysSettings.Id = SysSettingsValue.SysSettingsId
WHERE
	SysSettings.Code = 'PrimaryCulture'

-- Получение списка таблиц, из которых нужно удалять данные
DECLARE TableNamesCursor CURSOR FOR
SELECT
        t3.TABLE_NAME AS ChildTableName  
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS t1 
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS t2 ON t1.UNIQUE_CONSTRAINT_NAME = t2.CONSTRAINT_NAME
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS t3 ON t1.CONSTRAINT_NAME = t3.CONSTRAINT_NAME
WHERE
       t2.TABLE_NAME = 'SysCulture'
       and t2.COLUMN_NAME = 'Id'
       and t3.COLUMN_NAME = 'SysCultureId'
DECLARE @TableName SYSNAME
OPEN TableNamesCursor
FETCH NEXT FROM TableNamesCursor INTO @TableName
WHILE @@FETCH_STATUS = 0  
BEGIN  
       PRINT @TableName
       DECLARE @Sql NVARCHAR(MAX);
       SET @Sql = 'DELETE FROM ' + @TableName + '
            WHERE SysCultureId NOT IN (SELECT Id FROM #UsedCultures)';
       PRINT @Sql
       EXECUTE sp_executesql @Sql

       FETCH NEXT FROM TableNamesCursor INTO @TableName
END
CLOSE TableNamesCursor
DEALLOCATE TableNamesCursor
DELETE FROM SysCulture
WHERE Id NOT IN (SELECT Id FROM #UsedCultures)
IF OBJECT_ID('tempdb..#UsedCultures') IS NOT NULL
       DROP Table #UsedCultures
BEGIN;
-- Получение списка используемых культур
CREATE TEMP TABLE "UsedCultures" ON COMMIT DROP AS
SELECT DISTINCT cult."Id"
FROM "SysCulture" cult
INNER JOIN "SysAdminUnit" au
ON au."SysCultureId" = cult."Id";
INSERT INTO "UsedCultures" ("Id")
SELECT "SysSettingsValue"."GuidValue"
FROM "SysSettingsValue"
INNER JOIN "SysSettings"
ON "SysSettings"."Id" = "SysSettingsValue"."SysSettingsId"
WHERE "SysSettings"."Code" = 'PrimaryCulture';	
-- Получение списка таблиц, из которых нужно удалять данные
DO $$
DECLARE
TableNamesCursor REFCURSOR;
TableName varchar;
BEGIN
OPEN TableNamesCursor FOR
SELECT kcu.TABLE_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
    ON ccu.CONSTRAINT_CATALOG = rc.UNIQUE_CONSTRAINT_CATALOG
    AND ccu.CONSTRAINT_SCHEMA = rc.UNIQUE_CONSTRAINT_SCHEMA
    AND ccu.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
    ON kcu.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG
    AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
    AND kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
WHERE ccu.COLUMN_NAME = 'Id'
  AND ccu.TABLE_SCHEMA = 'public'
  AND ccu.TABLE_NAME = 'SysCulture';

--Удаление локализаций
LOOP
FETCH TableNamesCursor INTO TableName;
EXIT WHEN TableName IS NULL;
RAISE NOTICE 'Deleting from table %', TableName;
EXECUTE format('DELETE FROM %I WHERE "SysCultureId" NOT IN (SELECT "Id" FROM "UsedCultures")', TableName);
END LOOP;
CLOSE TableNamesCursor;
END $$;
DELETE FROM "SysCulture"
WHERE "Id" NOT IN (SELECT "Id" FROM "UsedCultures");
COMMIT