Шринк (Shrink) базы данных SQL Server в контексте 1С:Предприятие — это процесс сжатия файлов базы данных (MDF и LDF) путем удаления неиспользуемого пространства. Это может быть полезно для освобождения дискового пространства, особенно после удаления больших объемов данных, реиндексации или других операций, которые приводят к образованию “дыр” в файлах базы данных.
Важно!
Шринк базы данных может быть ресурсоемкой операцией и оказывать влияние на производительность 1С во время выполнения. Поэтому рекомендуется выполнять шринк в нерабочее время или в периоды минимальной нагрузки на систему.
Перед выполнением шринка обязательно сделайте резервную копию базы данных! Это позволит восстановить базу данных в случае возникновения проблем.
Не рекомендуется выполнять шринк базы данных слишком часто. Это может привести к фрагментации индексов и снижению производительности.
Способы выполнения шринка базы данных SQL Server для 1С:
Через SQL Server Management Studio (SSMS):
Это самый распространенный и рекомендуемый способ выполнения шринка.
Запустите SQL Server Management Studio (SSMS) и подключитесь к экземпляру SQL Server, где находится база данных 1С.
В Object Explorer разверните узел “Databases” (Базы данных).
Кликните правой кнопкой мыши на нужной базе данных 1С и выберите “Tasks” (Задачи) -> “Shrink” (Сжать) -> “Database” (База данных).
В открывшемся окне “Shrink Database” (Сжатие базы данных) вы увидите информацию о текущем размере базы данных и доступном свободном месте.
В разделе “Shrink action” (Действие сжатия) можно выбрать один из вариантов:
“Release unused space” (Освободить неиспользуемое место): Этот вариант удаляет неиспользуемое пространство в файлах базы данных, не перемещая данные.
“Reorganize files before releasing unused space” (Реорганизовать файлы перед освобождением неиспользуемого места): Этот вариант перемещает данные в начало файлов базы данных, чтобы освободить больше места в конце файлов, а затем удаляет неиспользуемое пространство. Этот вариант может быть более эффективным, но и более ресурсоемким.
“Shrink file to” (Сжать файл до): Этот вариант позволяет указать целевой размер файла базы данных.
В разделе “Options” (Параметры) можно установить флажок “Truncate the database transaction log when shrinking files” (Усекать журнал транзакций базы данных при сжатии файлов). Это может быть полезно для уменьшения размера файла журнала транзакций (LDF).
Нажмите кнопку “OK” для запуска процесса шринка.
Дождитесь завершения процесса шринка.
Через T-SQL (Transact-SQL):
Вы можете выполнить шринк базы данных с помощью команд T-SQL. Это позволяет автоматизировать процесс шринка или выполнить его из скрипта.
Запустите SQL Server Management Studio (SSMS) и подключитесь к экземпляру SQL Server, где находится база данных 1С.
Откройте новое окно запроса (New Query).
Выполните следующие команды T-SQL:
— Переключитесь на нужную базу данных 1С
USE [Your_1C_Database_Name]
GO
— 1. Освободить неиспользуемое место (рекомендуется для начала)
DBCC SHRINKDATABASE (Your_1C_Database_Name)
GO
— 2. (Опционально) Реорганизовать файлы перед освобождением места (более ресурсоемко)
DBCC SHRINKDATABASE (Your_1C_Database_Name, 0)
GO
— 3. (Опционально) Усечь Журнал Транзакций
DBCC SHRINKFILE (Your_1C_Database_Name_Log, 0) — Замените Your_1C_Database_Name_Log На Логическое Имя Файла Журнала
GO
Your_1C_Database_Name: Замените на имя вашей базы данных 1С.
Your_1C_Database_Name_Log: Замените на логическое имя файла журнала транзакций. Чтобы узнать логическое имя файла журнала, выполните запрос: SELECT name FROM sys. database_files WHERE type = 1;
DBCC SHRINKDATABASE (Your_1C_Database_Name): Выполняет шринк базы данных, освобождая неиспользуемое место.
DBCC SHRINKDATABASE (Your_1C_Database_Name, 0): Выполняет шринк базы данных, реорганизуя файлы перед освобождением места. Параметр 0 указывает, что нужно освободить все неиспользуемое место.
DBCC SHRINKFILE (Your_1C_Database_Name_Log, 0): Выполняет шринк файла журнала транзакций.
GO: Разделитель пакетов команд T-SQL.
После выполнения каждой команды проверьте сообщения в окне “Messages” (Сообщения), чтобы убедиться, что операция выполнена успешно.
Через План Обслуживания SQL Server (Maintenance Plan):
Вы можете настроить план обслуживания SQL Server для автоматического выполнения шринка базы данных по расписанию. Это позволяет регулярно освобождать дисковое пространство без ручного вмешательства.
Запустите SQL Server Management Studio (SSMS) и подключитесь к экземпляру SQL Server, где находится база данных 1С.
В Object Explorer разверните узел “Management” (Управление) -> “Maintenance Plans” (Планы обслуживания).
Создайте новый план обслуживания (New Maintenance Plan).
Добавьте задачу “Shrink Database Task” (Задача сжатия базы данных) в план обслуживания.
Настройте Задачу “Shrink Database Task”:
Database(s): Выберите базу данных 1С, для которой нужно выполнять шринк.
Shrink action: Выберите нужный вариант сжатия (например, “Release unused space”).
Schedule: Настройте расписание выполнения плана обслуживания (например, ежедневно в нерабочее время).
Сохраните план обслуживания.
Рекомендации:
Выполните анализ заполненности базы данных перед шринком: Используйте SQL запросы для анализа использования дискового пространства и выявления таблиц, занимающих больше всего места. Это поможет определить, действительно ли необходим шринк.
Выполняйте дефрагментацию индексов после шринка: Шринк базы данных может привести к фрагментации индексов, что негативно сказывается на производительности. После шринка выполните дефрагментацию индексов с помощью команды ALTER INDEX ALL ON Your_1C_Database_Name REBUILD;
Настройте мониторинг использования дискового пространства: Настройте мониторинг использования дискового пространства, чтобы своевременно выявлять необходимость выполнения шринка.
Протестируйте выполнение шринка на тестовой базе: Перед выполнением шринка на рабочей базе данных протестируйте процесс на тестовой базе, чтобы убедиться, что он выполняется успешно и не приводит к проблемам.
Не устанавливайте слишком агрессивные параметры шринка: Не пытайтесь сжать базу данных до минимально возможного размера, так как это может привести к ухудшению производительности.
Помните о журнале транзакций: Регулярно выполняйте резервное копирование журнала транзакций, чтобы предотвратить его переполнение. Шринк журнала транзакций следует выполнять только в случае необходимости и после создания резервной копии.
Пример SQL запроса для анализа заполненности базы данных:
USE Your_1C_Database_Name;
GO
SELECT
t. NAME AS TableName,
s. Name AS SchemaName,
p. rows AS RowCounts,
SUM(a. total_pages) * 8 AS TotalSpaceKB,
SUM(a. used_pages) * 8 AS UsedSpaceKB,
(SUM(a. total_pages) — SUM(a. used_pages)) * 8 AS UnusedSpaceKB
FROM
sys. tables t
INNER JOIN
sys. indexes i ON t. OBJECT_ID = i. object_id
INNER JOIN
sys. partitions p ON t. OBJECT_ID = p. object_id AND i. index_id = p. index_id
INNER JOIN
sys. allocation_units a ON p. partition_id = a. container_id
LEFT OUTER JOIN
sys. schemas s ON t. schema_id = s. schema_id
WHERE
t. NAME NOT LIKE ‘dt%’
AND t. is_ms_shipped = 0
AND i. OBJECT_ID > 255
GROUP BY
t. Name, s. Name, p. Rows
ORDER BY
t. Name
Выполнение шринка базы данных SQL Server для 1С — это полезный инструмент для освобождения дискового пространства и поддержания производительности системы. Однако, перед выполнением шринка необходимо тщательно спланировать процесс, сделать резервную копию базы данных и следовать рекомендациям, чтобы избежать негативных последствий. В сложных случаях рекомендуется обратиться к специалистам по SQL Server и 1С.