SQLite3 странная проблема скорости вставки

У меня есть две таблицы следующим образом (без индексов):

CREATE TABLE dag(
id integer primary key,
v integer,
e integer,
cc integer,
h integer,
w integer,
ls integer,
le blob, 
am blob);

CREATE TABLE additional_comp(
id integer primary key,
did integer,
t integer,
ubd integer,
lbd integer,
tlbd integer);

Моя программа (в C) генерирует несколько миллионов записей (хранящихся в двух сбалансированных бинарных деревьях поиска в RAM) и пытается вставить их в эти две таблицы. У меня есть 50000 вставок на транзакцию и время вывода, использованное в журнале, вот оно:

Даг имеет 1573505 записей
Комп имеет 2375074 записей
db_dag имеет 5 записи
db_comp имеет 11 записей
вставить дагс, понедельник, 6 ноября 15:42:11 2017
0 строк сделано, пн 6 ноя 15:42:11 2017
50000 строк сделано, понедельник, 6 ноября 16:45:57 2017
100000 строк сделано, понедельник, 6 ноября 18:25:22 2017
150000 строк, понедельник, 6 ноября 20:29:01 2017
200000 строк сделано, понедельник, 6 ноября 22:36:13 2017
250000 строк сделано, вторник, 7 ноября, 03:52:03 2017
300000 строк сделано, вторник, 7 ноября 10:01:38 2017
350000 строк сделано, вторник, 7 ноября 17:33:52 2017
400000 строк сделано, вторник, 7 ноября 22:49:14 2017
Сделано 450000 строк, ср. 8 ноября 06:06:28 2017
500000 строк сделано, среда, 8 ноября 11:33:49 2017
550000 строк сделано, ср 8 ноя 16:53:04 2017
600000 строк сделано, среда, 8 ноября 17:08:46 2017
650000 строк сделано, ср 8 ноя 17:10:16 2017
700000 строк сделано, ср 8 ноя 17:11:19 2017
750000 строк сделано, ср 8 ноя 17:12:17 2017
800000 строк сделано, ср 8 ноя 17:13:03 2017
850000 строк сделано, ср 8 ноя 17:13:49 2017
900000 готовых строк, ср 8 ноя 17:14:48 2017
950000 строк сделано, ср 8 ноя 17:15:30 2017
1000000 строк сделано, ср 8 ноя 17:16:11 2017
1050000 строк сделано, ср 8 ноя 17:16:51 2017
1100000 строк сделано, ср 8 ноя 17:17:43 2017
1150000 строк сделано, ср 8 ноя 17:18:26 2017
1200000 строк сделано, ср 8 ноя 17:19:13 2017
Сделано 1250000 строк, ср. 8 ноября, 17:20:14 2017
1300000 строк сделано, ср 8 ноя 17:20:59 2017
1350000 строк сделано, ср 8 ноя 17:21:43 2017
1400000 строк сделано, ср 8 ноя 17:22:21 2017
1450000 строк сделано, ср 8 ноя 17:22:57 2017
1500000 строк сделано, ср 8 ноя 17:23:33 2017
1550000 строк сделано, ср 8 ноя 17:24:03 2017
.....сделанный
вставьте компы, ср 8 ноя 17:24:13 2017
1600000 рядов сделано, ср 8 ноя 17:24:21 2017
1650000 строк готово, ср 8 ноя 17:24:22 2017
1700000 строк сделано, ср 8 ноя 17:24:23 2017
1750000 строк сделано, ср 8 ноя 17:24:23 2017
1800000 строк сделано, ср 8 ноя 17:24:23 2017
1850000 строк сделано, ср 8 ноя 17:24:24 2017
1900000 строк сделано, ср 8 ноя 17:24:24 2017
1950000 строк сделано, ср 8 ноя 17:24:24 2017
2000000 строк сделано, ср 8 ноя 17:24:25 2017

Обратите внимание, что это было очень медленно (несколько часов на 50000 вставок) в начале (жирная часть), но внезапно ускорилось (пара минут на 50000 вставок). Тогда для сравнительной таблицы скорость была довольно стабильной.

Другой экземпляр той же программы работал на другом ядре (вставляя в другую копию базы данных), на машине не работали другие "большие" программы. Та же самая медленная -> быстрая модель произошла с ним примерно в одно и то же время. Это заставляет меня чувствовать, что что-то произошло до 8 ноября 17:08, что замедляет работу всей машины.

Но машина имеет 16 ядер (как уже упоминалось, использовалось только 2) и 300 ГБ ОЗУ (около 2% использовалось). Вопрос в том, что могло случиться, что так сильно замедляет работу sqlite? Или, если это была не машина, я делал что-то не так с sqlite? Любое предложение / идея приветствуется.

0 ответов

Другие вопросы по тегам