SQLite3奇怪的插入速度问题

时间:2017-11-09 04:16:15

标签: performance sqlite insertion slowdown

我有两个表如下(没有索引):

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做错了什么?任何建议/想法都表示赞赏。

0 个答案:

没有答案