我有两个表如下(没有索引):
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次插入,并在日志中使用输出时间,这里是:
dag有1573505条记录 comp有2375074条记录
db_dag有5条记录 db_comp有11条记录
插入dags,Mon Nov 6 15:42:11 2017
0行完成,Mon Nov 6 15:42:11 2017
完成50000行,Mon Nov 6 16:45:57 2017 完成10万行,Mon Nov 6 18:25:22 2017
完成150000行,Mon Nov 6 20:29:01 2017 完成20万行,Mon Nov 6 22:36:13 2017 完成250000行,Tue Nov 7 03:52:03 2017 已完成300000行,Tue Nov 7 10:01:38 2017
完成350000行,Tue Nov 7 17:33:52 2017
完成400000行,Tue Nov 7 22:49:14 完成450000行,Wed Nov 8 06:06:28 2017
完成500000行,11月8日星期三11:33:49 2017 完成550000行,11月8日星期三16:53:04 完成600000行,2017年11月8日星期三17:08:46
完成650000行,11月8日星期三17:10:16 完成700000行,11月8日星期三17:11:19 完成750000行,11月8日星期三17:12:17 完成800000行,11月8日星期三17:13:03 完成850000行,11月8日星期三17:13:49 完成900000行,11月8日星期三17:14:48 完成950000行,11月8日星期三17:15:30 2017 完成1000000行,11月8日星期三17:16:11 完成1050000行,11月8日星期三17:16:51 完成了1100000行,11月8日星期三17:17:43 完成1150000行,11月8日星期三17:18:26 完成1200000行,11月8日星期三17:19:13 完成1250000行,11月8日星期三17:20:14 完成1300000行,11月8日星期三17:20:59 完成1350000行,11月8日星期三17:21:43 完成1400000行,11月8日星期三17:22:21 完成1450000行,11月8日星期三17:22:57 完成1500000行,11月8日星期三17:23:33 完成1550000行,11月8日星期三17:24:03 .....做
insert comps,Wed Nov 8 17:24:13 2017
完成1600000行,11月8日星期三17:24:21 完成1650000行,11月8日星期三17:24:22 完成1700000行,11月8日星期三17:24:23 完成1750000行,11月8日星期三17:24:23 完成1800000行,11月8日星期三17:24:23 完成1850000行,11月8日星期三17:24:24 完成1900000行,11月8日星期三17:24:24 完成1950000行,11月8日星期三17:24:24 完成2000000行,2017年11月8日星期三17:24:25
请注意,它开始时非常慢(每50000次插入几个小时)(粗体部分),但突然加速(每50000次插入几分钟)。然后对于comp表,速度非常稳定。
同一程序的另一个实例在另一个核心上运行(插入数据库的不同副本),机器上没有运行其他“大”程序。同样的慢速>快速模式也同时发生(但不完全相同)。这让我觉得在11月8日17:08之前发生了一件让整个机器变慢的事情。
但该机器有16个核心(如上所述,只有2个在使用中)和300GB RAM(约2%在使用中)。问题是,可能发生了什么样的事情让sqlite这么慢?或者,如果它不是机器,我是否在使用sqlite做错了什么?任何建议/想法都表示赞赏。