On 2015-08-28 01:17 PM, Yahoo! Mail wrote:
> Obviously you did not get my issue; something is wrong and your timer
> suggestion indicates this. During the execution of each command, I
> would monitor it with *watch "du test.db*"*. The journal size would go
> mad even surpassing the database's actual size at some moments.
>
> *sqlite> .timer on
> sqlite> drop table if exists t1; create table t1(a datetime); vacuum
> t1; begin; with recursive c(x) as (values(1) union all select x + 1
> from c where x < 100) insert into t1(a) select datetime('now') from c;
> commit;
> Run Time: real 0.207 user 0.000000 sys 0.004000
>
> sqlite> drop table if exists t1; create table t1(a datetime); vacuum
> t1; begin; with recursive c(x) as (values(1) union all select x + 1
> from c where x < 100000000) insert into t1(a) select datetime('now')
> from c; commit;
> Run Time: real 94.226 user 73.096000 sys 4.788000
>
> sqlite> drop table if exists t1; create table t1(a datetime); vacuum
> t1; begin; with recursive c(x) as (values(1) union all select x + 1
> from c where x < 100) insert into t1(a) select datetime('now') from c;
> commit;
> Run Time: real 209.612 user 4.724000 sys 21.588000*
Firstly, that's a 100-million inserts, not a billion as in the previous
post. The billion inserts should have taken around 1000s or 20-ish minutes.
It might be the vacuum that takes the time for you... the drop table is
quick.
If I run the same through SQLitespeed hooking SQLite 3.8.11.1 with full
diagnostics (and probably worse hardware than you have), I get about
120sec (2 minutes) on the insert into an empty table, and 3.6s on the
drop+insert 10 items.
I am not vacuuming inside the following script since vacuums cannot
happen inside transactions, but I vacuum directly after it and the
vacuum takes less than 2 seconds, so I doubt that is the problem either.
--
================================================================================================
drop table if exists t1;
create table t1(a datetime);
with recursive c(x) as (values(1) union all select x + 1 from c where x
< 100000000) insert into t1(a) select datetime('now') from c;
-- Script Stats: Total Script Execution Time: 0d 00h 02m and
00.082s
-- Total Script Query Time: 0d 00h 02m and
00.064s
-- Total Database Rows Changed: 100000000
-- Total Virtual-Machine Steps: -2094967211
-- Last executed Item Index: 3
-- Last Script Error:
--
------------------------------------------------------------------------------------------------
-- 2015-08-28 14:25:16.109 | [Success] Script Success.
-- 2015-08-28 14:25:45.088 | [Success] Transaction Committed.
--
================================================================================================
drop table if exists t1;
create table t1(a datetime);
with recursive c(x) as (values(1) union all select x + 1 from c where x
< 10) insert into t1(a) select datetime('now') from c;
-- Script Stats: Total Script Execution Time: 0d 00h 00m and
03.605s
-- Total Script Query Time: 0d 00h 00m and
03.582s
-- Total Database Rows Changed: 10
-- Total Virtual-Machine Steps: 305
-- Last executed Item Index: 3
-- Last Script Error:
--
------------------------------------------------------------------------------------------------
-- 2015-08-28 14:26:29.095 | [Success] Script Success.
-- 2015-08-28 14:26:29.239 | [Success] Transaction Committed.
--
================================================================================================
Maybe some more information about your specific use case and environment
is needed.
Cheers,
Ryan