Долгий обмен в базе РИБ

05.08.25

Интеграция - Перенос данных 1C

В своей практике я несколько раз сталкивался с базами РИБ на SQL, которые начинали тормозить при обмене — даже при передаче пустых пакетов. Все предложенные коллегами способы решения проблемы были испробованы, но не дали результата. Пару раз удавалось решить вопрос, создавая базу заново через копирование из центрального узла. Однако затем я столкнулся с ситуацией, когда начал тормозить уже сам центр. В итоге пришлось искать корень проблемы.

Для чистоты эксперимента я дождался нерабочего времени, когда сервер был полностью разгружен — никакие регламентные операции не выполнялись, — и запустил замер с помощью MS Profiler, отслеживая обмен пустыми пакетами.

К своему удивлению, обнаружил, что в проблемной базе обращения к таблице Config выполняются крайне медленно. Я начал сравнивать эту таблицу в нормальной и проблемной базе — оказалось, они различаются по размеру. Проблемная таблица была в 2 раза больше и содержала дубли. Дубли удалил, однако ситуация улучшилась лишь незначительно: значение Reads в Profiler сократилось вдвое, но оставалось аномально высоким, а обмен по-прежнему тормозил.

На втором этапе решил проверить индексы таблицы Config. Оказалось, что в проблемной базе вообще отсутствовал нужный индекс — вероятно, он «слетел» при появлении дублей, и механизмы 1С не смогли его автоматически восстановить. После создания индекса средствами SQL случилось долгожданное чудо: обмен стал занимать 3 секунды вместо 1 минуты!

А теперь — список запросов MS SQL, которые мне помогли:

1.  Поиск дублей в таблице Config

-- Универсальный запрос для двух вариантов таблицы Config
-- 1. Для простых конфигураций, без поля PartNo
-- 2. Для больших конфигураций, где поле PartNo присутствует

DECLARE @sql NVARCHAR(MAX);
DECLARE @hasPartNo BIT;

-- Проверяем наличие столбца PartNo
SELECT @hasPartNo = CASE 
    WHEN EXISTS (
        SELECT 1 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'Config' AND COLUMN_NAME = 'PartNo'
    ) THEN 1 ELSE 0 END;

-- Собираем SQL с учётом наличия PartNo
SET @sql = '
SELECT 
    Creation, 
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END + ',
    COUNT(*) AS Duplicates
FROM dbo.Config
GROUP BY 
    Creation, 
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END + '
HAVING COUNT(*) > 1
ORDER BY Duplicates DESC;
';

-- Выполняем собранный SQL
EXEC sp_executesql @sql;

 

2. Проверка наличия индексов

SELECT 
    i.name AS IndexName,
    i.type_desc AS IndexType,
    c.name AS ColumnName,
    ic.key_ordinal

FROM sys.indexes AS i
JOIN sys.index_columns AS ic 
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id
JOIN sys.columns AS c 
    ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE i.object_id = OBJECT_ID('Config')
ORDER BY i.name, ic.key_ordinal;


3. Удаление дублей

DECLARE @sql NVARCHAR(MAX);
DECLARE @hasPartNo BIT;

-- Проверяем, есть ли поле PartNo в таблице Config
SELECT @hasPartNo = CASE 
    WHEN EXISTS (
        SELECT 1 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'Config' AND COLUMN_NAME = 'PartNo'
    ) THEN 1 ELSE 0
END;

-- Собираем список полей для PARTITION BY
DECLARE @partitionBy NVARCHAR(MAX) = '
    Creation,
    FileName,
    Modified,
    Attributes,
    DataSize' + 
    CASE WHEN @hasPartNo = 1 THEN ', PartNo' ELSE '' END;

-- Собираем финальный запрос
SET @sql = '
WITH DuplicatesCTE AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY ' + @partitionBy + '
            ORDER BY (SELECT NULL)
        ) AS RowNum
    FROM dbo.Config
)
DELETE FROM DuplicatesCTE
WHERE RowNum > 1;
';

-- Выполняем
EXEC sp_executesql @sql;

 

4. Создаем индекс вручную

CREATE NONCLUSTERED INDEX IX_Config_FileName
ON Config(FileName);


p.s. Если кто знает, как можно проверить таблицу Config на дубли, удалить их и создать индекс средствами 1С, то буду очень признателен за информацию. 

Вступайте в нашу телеграмм-группу Инфостарт

РИБ таблица Config

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    152702    893    302    

463

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.255.x) и БП 3.0 (3.0.183.x). Правила подходят для версии ПРОФ и КОРП.

38000 34200 руб.

15.12.2021    29635    213    58    

158

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.24.x).

38000 34200 руб.

23.07.2020    61597    289    81    

229

Перенос данных 1C Программист Бухгалтер 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    86491    376    257    

312

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    195130    634    542    

549

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.255.x), ERP 2.5 (2.5.24.x), КА 2.5 (2.5.24.x).

38000 34200 руб.

24.06.2020    67660    90    28    

100

SALE! 10%

Перенос данных 1C Системный администратор Программист 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Бухгалтерия предприятия 3.0 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила разработаны в конвертации данных 2. Правила проверены на конфигурациях БП 3.0 (3.0.183.x) и УТ 11.5 (11.5.24.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

12.05.2023    7693    14    0    

22

Перенос данных 1C Зарплата Бюджетный учет Программист Бухгалтер 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет зарплаты для бюджетных учреждений 3.5» и «КАМИН:Зарплата для бюджетных учреждений 5.5» на конфигурацию «Зарплата и кадры государственного учреждения».

12000 руб.

28.07.2016    64816    174    145    

142
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 18.07.25 15:46 Сейчас в теме
1. Поиск дублей в таблице Config


Хм, ищите дубли одним запросом, а удаляете дубли полученные совсем другим запросом. Это так задумано?

3. Удаление дублей

ORDER BY (SELECT NULL)


А это зачем, какую цель преследовали :) ??
khakasia; +1 Ответить
2. khakasia 150 18.07.25 15:55 Сейчас в теме
Спасибо за замечания, исправил.
3. user2024331 22.07.25 11:59 Сейчас в теме
Один файл может быть разбит на несколько строк с разными PartNo, вы их удаляете получается?
Это не приведёт к нарушению целостности конфигурации?
khakasia; +1 Ответить
6. khakasia 150 04.08.25 16:08 Сейчас в теме
(3) Нет, файл не может быть разбит на несколько строк :) Таблица уникальная по данному полю.
Но на всякий случай перед удалением я сравнил проблемную таблицу с нормальной.
Третья неделя.. полёт нормальный. Всё работает замечательно. Все обновления конфигурации на узлах проходят нормально. И динамические в том числе.
Прикрепленные файлы:
11. khakasia 150 05.08.25 03:49 Сейчас в теме
(3) спасибо за комментарий, вы правы. Ошибку исправил.
4. roman72 403 25.07.25 10:27 Сейчас в теме
8. khakasia 150 04.08.25 16:15 Сейчас в теме
(4) :)))) неплохой вариант прочтения. Хакасия.ру -- наша компания, франч по Республике Хакасия.
5. zotovkv 01.08.25 15:07 Сейчас в теме
В 3м посте верно заметили, на больших конфигурациях есть достаточно много объектов, которые хранятся разбитыми на части - конфигурация поставщика, драйверы для различного оборудования, в запросе поиска дублей НАДО УЧИТЫВАТЬ PartNo.

Если взять запрос проверки/удаления дублей - вы сломаете базу(большие конфигурации).
7. khakasia 150 04.08.25 16:13 Сейчас в теме
(5) не совсем понимаю о каком PartNo идёт речь? Буду рад, если поясните :) В таблице Config нет такой колонки и таблица уникальна по полю FileName. Все дубли были полностью идентичны, включая время создания.
9. zotovkv 04.08.25 17:01 Сейчас в теме
(7) Вероятно у вас слишком маленькая конфигурация, не типовая или даже не знаю что ещё предположить.
На скрине первые 13 строк это вероятно конфигурация поставщика, разбитая на 13 частей, в поле ДатаСайз хранится размер ВСЕГО файла в байтах(Есть предположение, что имеется проверка на целостность, если после сборки в файл из частей размер файла не будет равен ДатаСайз - то что-нибудь сработает).
Недавно занимались анализом - у нас какой-то драйвер оборудования размером около 40Мбайт хранился в конфиге 4мя частями - по 10МБайт.
Вчера натыкался на статью, как из таблицы [Params] доставали описание метаданных, подменяли данные и возвращали обратно - имеется какая-то обработка для 1с сборки файлов из таблиц конфигурации и параметров.
Прикрепленные файлы:
khakasia; +1 Ответить
10. khakasia 150 05.08.25 03:37 Сейчас в теме
(9) Теперь всё ясно, благодарю за комментарий, очень познавательно. Сейчас всё исправим.
Для отправки сообщения требуется регистрация/авторизация