powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Сертификация и обучение [игнор отключен] [закрыт для гостей] / Вопрос на собеседовании (реальный)
5 сообщений из 5, страница 1 из 1
Вопрос на собеседовании (реальный)
    #38472240
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давным давно меня спросили: Как лучше (быстрее) вставить в таблицу миллион записей (тогда это было много).

Я ответил так что все были счастливы и довольны и мне даже предложили работу:автор1. Удалить все индексы с таблицы
2. Заливать данные в транзакциях по маленьким кускам в цикле (скажем по 10К)
3. Пересоздать индексы.

Сейчас понимаю что ответ был неверный.
Думаю что нужно делать совсем по другому:
автор1. Вылить вставляемые данные из таблицы в файл
2. Вылить все данные из конечной таблицы в другой файл
3. Создать новую таблицу по типу старой.
4. Залить булк инсертом оба файла в новую таблицу.
5. Воссоздать индексы на новой таблице как на старой (конечной).
6. Залочить старую (конечную) таблицу от любых изменений
7. Применить к новой таблице все изменения что произошли в старой с момента №2.
8. Полностью залочить старую таблицу.
9. Переименовать старую таблицу.
10. Переименовать новую таблицу в имя конечной таблицы.

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

Покритикуйте пожалуйста если я что-то упустил.
...
Рейтинг: 0 / 0
Вопрос на собеседовании (реальный)
    #38472267
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1. Вылить вставляемые данные из таблицы в файл
2. Вылить все данные из конечной таблицы в другой файл
3. Создать новую таблицу по типу старой.
4. Залить булк инсертом оба файла в новую таблицу.А для чего нужны внешние файлы? Почему бы не использовать сразу SELECT ... INTO, INSERT ... INTO?
Еще вы забыли упомянуть про recovery model и прочие условия минимального логирования, ради чего, как я понимаю, всё и затевалось.

ЗЫ: ну и протестировать не долго, если так интересно.
...
Рейтинг: 0 / 0
Вопрос на собеседовании (реальный)
    #38472271
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ruuuавтор1. Вылить вставляемые данные из таблицы в файл
2. Вылить все данные из конечной таблицы в другой файл
3. Создать новую таблицу по типу старой.
4. Залить булк инсертом оба файла в новую таблицу.А для чего нужны внешние файлы? Почему бы не использовать сразу SELECT ... INTO, INSERT ... INTO?
Еще вы забыли упомянуть про recovery model и прочие условия минимального логирования, ради чего, как я понимаю, всё и затевалось.

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

В очень загруженой OLTP, делая всё через BCP мы тем самым снимаем какую-бы то ни было нагрузку на лог файл.
...
Рейтинг: 0 / 0
Вопрос на собеседовании (реальный)
    #38472272
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeВ нашем случае мы предполагаем что у нас фулл.
В очень загруженой OLTP, делая всё через BCP мы тем самым снимаем какую-бы то ни было нагрузку на лог файл.Prerequisites for Minimal Logging in Bulk ImportFor a database under the full recovery model, all row-insert operations that are performed by bulk import are fully logged in the transaction log. Large data imports can cause the transaction log to fill rapidly if the full recovery model is used.
...
Рейтинг: 0 / 0
Вопрос на собеседовании (реальный)
    #38472306
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuuuSandalTreeВ нашем случае мы предполагаем что у нас фулл.
В очень загруженой OLTP, делая всё через BCP мы тем самым снимаем какую-бы то ни было нагрузку на лог файл.Prerequisites for Minimal Logging in Bulk ImportFor a database under the full recovery model, all row-insert operations that are performed by bulk import are fully logged in the transaction log. Large data imports can cause the transaction log to fill rapidly if the full recovery model is used. Значит я где-то просчитался. Буду править.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Сертификация и обучение [игнор отключен] [закрыт для гостей] / Вопрос на собеседовании (реальный)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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