powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить иморт данных?
17 сообщений из 17, страница 1 из 1
Как ускорить иморт данных?
    #39568312
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть SSIS-Пакет, который тянет данные с Оракла. Самая большая таблица имеет около 80 млн. записей и занимает порядка 50 ГБ на диске. Только ее импорт занимает 12 часов. Насколько это (в среднем) медленно или быстро?
Можно ли этот процесс как-то ускорить, изменив настройки БД, таблиц или файлов дб?
Я проверил, индексов в таблицах нет.
Настройки БД - стандартно правильные: RECOVERY model FULL; Auto close FALSE; Auto shrink FALSE и т.д.

Перед импортом все данные удаляются TRUNCATE. Log-file ограничен 2GB (не мало?), автоинкремент 1024Мб.

SELECT @@VERSION
Microsoft SQL Server 2014 (SP2-CU4) (KB4010394) - 12.0.5540.0 (X64) Jan 27 2017 03:40:25 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

Спасибо!
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568348
Xe-Xe)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Брать дельту. Только то, что изменилось за определенное время + перейти на линкованый сервер
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568359
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sennНастройки БД - стандартно правильные: RECOVERY model FULL
Зачем рековери для базы, которая тупо вся заливается с другого сервера?
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568363
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А "тянуть" изменения, а не всю базу?
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568371
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы. Про инкремент понятно думали, но нет явного признака для инкремента.
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568372
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

заливается не вся база, а отдельные таблицы (10 штук всего, правда, жирные))).
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568381
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте в BULK LOGGED перевести на время заливки (если требования позволяют).
сейчас у вас весь балк полностью логируется
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568469
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sennLog-file ограничен 2GB (не мало?), автоинкремент 1024Мб.Не хватит. Странно, что в процессе импорта в БД с фулл рекавери не вылетели по нехватке места в журнале транзакций.

Кстати, не очень понятно, зачем делать инкремент 1 Гб при максимальном размере 2 Гб. У вас там точно в гигабайтах ограничение?
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568493
iii2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sennСпасибо за ответы. Про инкремент понятно думали, но нет явного признака для инкремента.
Считайте контрольную сумму полей таблицы. Конечно, желательно что-то типа MD5, но это очень уж ресурсоёмко, по моему опыту достаточно что-то типа BINARY_CHECKSUM.
Табличку "предыдущий слепок" (id, CHECKSUM) храните на том же сервере, с которого производилась выборка.
Она обычно получается небольшая, в смысле общего объема.
Соответственно, изменившиеся данные ищутся по сочетанию id + контрольная сумма, и на сервер передаются строки с теми id, которые не найдены при поиске по сочетанию (id + контрольная сумма) [это либо новые, либо изменившиеся] + отдельно перечень не найденных id при сопоставлении "предыдущего слепок" и копируемых данных [это удаленные id]. Второе, впрочем, не обязательно, если в хранилище хранятся все данные, с накоплением.
Если вы опасаетесь, что BINARY_CHECKSUM выдаст вам коллизию, а более ресурсоёмкий MD5 использовать не хотите, то совет - храните 2 BINARY_CHECKSUM, рассчитанные по двум, частично пересекающимся подмножествам полей одной записи. Вероятность коллизии снизится на величину, пропорциональную произведению длин контрольных сумм. Ну, точнее, снизится вплоть до, и т.д. Не будем впадать в маразм в этом вопросе :-)
Прелесть всего этого дела, что контрольную сумму можно (и нужно) либо хранить на источнике, как вычисляемое поле таблицы, либо же рассчитывать прямо перед импортом, в табличку "текущий слепок", т.е. не гонять всё это дело туда-сюда.

Всё это работает очень быстро, даже на выборках 100+ млн., т.к. сами по себе таблички с ключами и контрольными суммами - получаются компактными. Относительно.
Гм... надеюсь, что ключи у вас - что-то типа bigint, конечно...

Как вариант - завести поле timestamp во всех импортированных таблицах, и, соответственно, передавать все записи, timestamp которых больше, чем текущий timestamp базы на момент прошлого импорта.
Правда тут проблема с удаленными записями, их id тоже нужно как то определять (например - складывать триггером в соотв. табличку), и передавать на приемник для удаления соотв. записей. Если, конечно, вы не используете хранилище с накоплением [всякого мусора].

Впрочем, это всё для MSSQL, для Оракула могут еще способы найтись.
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568512
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iii2,

спасибо, но это все не про нас((... Способов реализаций инкрементального импорта много, но все они подразумевают (в нашем случае) вмешательство в БД-исходник (как я это поимаю). К сожалению, на сегодняшний день такой возможности не представляется (имеется лишь ограниченный доступ на чтение нескольких таблиц).

Вероятнее всего буду пробовать выносить импорт в отдельную бд и отключать там фул рекавери на время импорта (илинавсегда).
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568513
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо за советы!
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568559
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
senn,

Наивный вопрос - в SSIS пакете вы используете OLE DB Destination для MS SQL. А какой режим вставки - insert или fast insert? Настоятельно рекомендую последний.
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568610
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если SSIS, то вот это реально ускоряет обмен. Измеряли в попугаях - попугаи остались довольны.
https://docs.microsoft.com/en-us/sql/integration-services/attunity-connectors
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568653
iii2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
senniii2,

спасибо, но это все не про нас((... Способов реализаций инкрементального импорта много, но все они подразумевают (в нашем случае) вмешательство в БД-исходник (как я это поимаю).

Не обязательно. Непосредственно сами данные трогать не обязательно. Информацию можно хранить в отдельной схеме (если речь об Оракуле)
К сожалению, на сегодняшний день такой возможности не представляется (имеется лишь ограниченный доступ на чтение нескольких таблиц).

Вероятнее всего буду пробовать выносить импорт в отдельную бд и отключать там фул рекавери на время импорта (илинавсегда).
А это не ускорит вставки.
И при простой модели восстановления, и при полной модели восстановления - протоколирование происходит абсолютно одинаково.
Просто при простой модели место в логе, после фиксации транзакции используется повторно. А объем дисковых операций - совершенно одинаков.

Нужно не менять модель восстановления, а сокращать количество протоколируемых данных.
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568656
iii2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568668
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iii2А это не ускорит вставки.
И при простой модели восстановления, и при полной модели восстановления - протоколирование происходит абсолютно одинаково.
Очень даже отличается, bulk операции в simple и bulk-logged логируются минимально а в фулл- постранично



senn,

Вообще 12 часов на 80 млн записей (50 ГБ) это очень много.

Для начала надо понять, что тормозит получение данных или сохранение. (Тут надо не забыть про сеть между 3-мя точками Oracle-SSIS-MsSql)

1. Запустите пакет получения данных с Оракл-а без сохранения в SqlServer (простой count-аггрегат в качестве получателя)
2. Посмотрите нагрузку на сеть в "лайт" и "фулл" режимах
3. Убедитесь, что вставляется bulk-ом. Даже в фулл моделе bulk быстрее простых инсертов, т.к. в лог пишет постранично а не по одной записи (при наличии синхронного AO все ухудшается коммитем каждой записи на вторичных репликах)

Если первые три пункта исключены, начинайте анализировать проблемы при вставке в SqlServer:
блокировки, очереди на дисках данных/лога и т.д.
...
Рейтинг: 0 / 0
Как ускорить иморт данных?
    #39568683
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senn,

курим руководство, ибо все придумано до нас:

https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить иморт данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]