У меня есть некоторый объемный вложенный код vb.net (рабочий), который я написал. Он вызывает ExecuteNonQuery() для каждой вставки, а затем в конце делает commit().
Мой вопрос в том, где находятся эти вставки, ожидая команды commit()? Я пока не внес никаких изменений в поддержку пакетной обработки. Таким образом, с моим существующим кодом миллион строк будет вставлен перед вызовом commit(). Я задаю этот вопрос, очевидно, знать, буду ли я сталкиваться с проблемами памяти, а потому заставляю меня вносить изменения в свой код.
В обычном режиме журнала отката изменения просто записываются в базу данных. Однако, чтобы разрешить атомные коммиты, предыдущее содержимое всех измененных страниц базы данных записывается в журнал отката, чтобы откат мог восстановить предыдущее состояние. (Когда вы делаете так много вставок, что нужно выделять новые страницы, для этих страниц нет старого состояния.)
В режиме WAL все изменения записываются в журнал записи вперед.
В любом случае на самом деле ничего не записывается до тех пор, пока объем данных не переполнит кеш страницы (размер по умолчанию составляет около 2 МБ).
Таким образом, размер транзакции не ограничен памятью, а только дисковым пространством.
в запросе массовой вставки, command.ExecuteNonQuery() возвращает количество строк, выполняемых оператором вставки, обновления или удаления.
В вашем случае после каждой успешной вставки он будет возвращать 1 как целое. если вы не используете запрос транзакции, Commit не имеет никакого смысла. Если вы явно не используете транзакцию, изменения совершаются автоматически.
ExecuteNonQuery()
возвращает количество затронутых строк. Можно ли включить образцы фрагментов, которые вы используете в настоящее время, тогда вы получите гораздо лучший ответ?