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

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

См. также

SALE! 20%

Перенос данных 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    149676    875    302    

456

SALE! 10%

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

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    175371    381    289    

407

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    175923    322    270    

391

SALE! 10%

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    76837    208    160    

145

Перенос данных 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    192810    628    540    

547

SALE! 10%

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.

55778 50200 руб.

24.04.2015    200827    166    247    

291

SALE! 10%

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    40120    115    73    

109

SALE! 10%

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

Правила переноса данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных) Воспользовались более 122 предприятий! |

55778 50200 руб.

31.10.2014    241228    108    348    

314
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 402 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) Теперь всё ясно, благодарю за комментарий, очень познавательно. Сейчас всё исправим.
Оставьте свое сообщение