Вы не говорите, какая у вас встроенная платформа.Если это Linux, то есть причина, по которой это происходит.
Чтобы выполнить фиксацию, SQLite должен подождать, пока связанные данные не будут абсолютно положительно окончательно сохранены на диске.Это часто приходится делать три раза для транзакции - для базы данных, журнала и самого каталога, содержащего оба файла.Даже для WAL требуется одна синхронизация.
Для этого используется системный вызов fsync, который блокирует, пока данные для соответствующего дескриптора файла / каталога не окажутся на диске.Однако общее семейство файловых систем Linux ext3 / 4 превращает это в синхронизирующий вызов.Синхронизируйте блоки, пока все ожидающие данные для всей файловой системы не окажутся на диске.(Такое же поведение реализации может присутствовать в других встроенных операционных системах.)
Вы можете использовать strace или аналогичный инструмент для отслеживания системных вызовов и их времени, что поможет вам определить или устранить это как причину.
Если это (весьма вероятно), то у вас есть два решения.Один из них многократно вызывает синхронизацию в фоновом режиме или настраивает синхронизацию ядра (bdflush / kflushd и т. Д.) С короткими временными интервалами, чтобы объем незафиксированных данных записи был низким.Значения по умолчанию в Linux составляют около 30 секунд, если вы не находитесь в режиме ноутбука, и в этом случае это может быть несколько минут.
Другой вариант - поместить базу данных в свою файловую систему, чтобы незафиксированные записи в других файловых системах не влияливаша файловая система базы данных.
В Linux системный вызов / инструмент ionice может использоваться для изменения приоритета ввода / вывода.(Для повышения приоритета требуется root.) Однако, если приведенное выше поведение синхронизации является причиной проблемы, которая на самом деле не поможет, поскольку все равно будет тот же объем незафиксированных данных, и изменение порядка записи не будетhelp.
Если ваша базовая файловая система использует какую-то дрянную флэш-память, вы также можете настроить размер страницы SQLite (по умолчанию 1 КБ) в соответствии с размером вашей файловой системы.Это, вероятно, поможет немного.