Trying again/
Specifically, preparation of the constant "trigger part" of the statement is
the overhead? Correct?

On Tue, Jun 12, 2018 at 9:47 AM, David Burgess <dburges...@gmail.com> wrote:
> Specifically, preparation of the "trigger part" of the statement is
> the overhead? Correct?
>
>
> On Mon, Jun 11, 2018 at 5:16 PM, Keith Medcalf <kmedc...@dessus.com> wrote:
>>
>> Okay, the difference is the "lots of inserts" -vs- the "one insert".
>>
>> When I do the same thing (dump the contents of the table to a file and then 
>> reload the dump), the overhead of the trigger is about 33% (same as you).
>>
>> There is not only the time to "insert the data" but also the overhead of 
>> preparing the statements.  In the case where the statement is not prepared 
>> each time but only the single prepare with multiple insertions, the time to 
>> run the VDBE code which includes the trigger is only 5-10% more than to run 
>> the insertions without the trigger.
>>
>> However, the overhead of preparing the statement for execution is what is 
>> taking up the rest of the observed difference.
>>
>> ---
>> The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
>> lot about anticipated traffic volume.
>>
>>
>>>-----Original Message-----
>>>From: sqlite-users [mailto:sqlite-users-
>>>boun...@mailinglists.sqlite.org] On Behalf Of David Burgess
>>>Sent: Monday, 11 June, 2018 00:40
>>>To: SQLite mailing list
>>>Subject: Re: [sqlite] Trigger Performance
>>>
>>>> The trigger is adding a mere 10% overhead on a million rows ...
>>>3.24 on a real data DB (16 columns), the inserts were generated from
>>>.dump in the shell, about 45MB of  input data
>>>so
>>>
>>>BEGIN;
>>>lots of inserts
>>>COMMIT;
>>>
>>>Run on a laptop i7 with SSD (not that should make any difference to
>>>the relative performance)
>>>If I could get your relative performance, I would be happy.
>>>
>>>On Mon, Jun 11, 2018 at 3:30 PM, Keith Medcalf <kmedc...@dessus.com>
>>>wrote:
>>>>
>>>> Interesting.  That is adding 30% or so to process the trigger.
>>>When I do (this is to a "memory" database):
>>>>
>>>> SQLite version 3.25.0 2018-06-11 01:30:03
>>>> Enter ".help" for usage hints.
>>>> Connected to a transient in-memory database.
>>>> Use ".open FILENAME" to reopen on a persistent database.
>>>> sqlite> create table crap(uuid text not null collate nocase
>>>unique);
>>>> sqlite> .timer on
>>>> sqlite> insert into crap select uuidStringCreateV4() from
>>>generate_series where start=1 and stop=1000000;
>>>> Run Time: real 1.625 user 1.625000 sys 0.000000
>>>> sqlite> create trigger crap_trigger before insert on crap when 0 ==
>>>1
>>>>    ...> begin
>>>>    ...>  select raise(ABORT, 'abort');
>>>>    ...> end;
>>>> Run Time: real 0.000 user 0.000000 sys 0.000000
>>>> sqlite> .schema
>>>> CREATE TABLE crap(uuid text not null collate nocase unique);
>>>> CREATE TRIGGER crap_trigger before insert on crap when 0 == 1
>>>> begin
>>>>  select raise(ABORT, 'abort');
>>>> end;
>>>> sqlite> delete from crap;
>>>> Run Time: real 0.031 user 0.031250 sys 0.000000
>>>> sqlite> insert into crap select uuidStringCreateV4() from
>>>generate_series where start=1 and stop=1000000;
>>>> Run Time: real 1.796 user 1.781250 sys 0.015625
>>>> sqlite> select (1.796-1.625)/1.625;
>>>> 0.105230769230769
>>>>
>>>> The trigger is adding a mere 10% overhead on a million rows ...
>>>>
>>>> I also got a result where the overhead added by the trigger was
>>>half that (when using an actual disk db rather than a memory db).
>>>>
>>>>>sqlite test.db
>>>> SQLite version 3.25.0 2018-06-11 01:30:03
>>>> Enter ".help" for usage hints.
>>>> sqlite> create table crap(uuid text not null collate nocase
>>>unique);
>>>> sqlite> .timer on
>>>> sqlite> insert into crap select uuidStringCreateV4() from
>>>generate_series where start=1 and stop=1000000;
>>>> Run Time: real 1.891 user 1.609375 sys 0.171875
>>>> sqlite> delete from crap;
>>>> Run Time: real 0.062 user 0.015625 sys 0.015625
>>>> sqlite> create trigger crap_trigger before insert on crap when 0 ==
>>>1
>>>>    ...> begin
>>>>    ...>  select raise(ABORT, 'abort');
>>>>    ...> end;
>>>> Run Time: real 0.031 user 0.000000 sys 0.000000
>>>> sqlite> insert into crap select uuidStringCreateV4() from
>>>generate_series where start=1 and stop=1000000;
>>>> Run Time: real 1.984 user 1.812500 sys 0.109375
>>>> sqlite> select (1.984-1.891)/1.891;
>>>> 0.0491803278688524
>>>> Run Time: real 0.000 user 0.000000 sys 0.000000
>>>> sqlite> .exit
>>>>
>>>>
>>>> What version of SQLite are you using?
>>>>
>>>> ---
>>>> The fact that there's a Highway to Hell but only a Stairway to
>>>Heaven says a lot about anticipated traffic volume.
>>>>
>>>>
>>>>>-----Original Message-----
>>>>>From: sqlite-users [mailto:sqlite-users-
>>>>>boun...@mailinglists.sqlite.org] On Behalf Of David Burgess
>>>>>Sent: Sunday, 10 June, 2018 22:25
>>>>>To: sqlite-users@mailinglists.sqlite.org
>>>>>Subject: [sqlite] Trigger Performance
>>>>>
>>>>>I have a table where I drop, create and insert 284,000 rows
>>>>>
>>>>>time taken 3.39 seconds.
>>>>>
>>>>>I add the following trigger
>>>>>
>>>>>
>>>>>CREATE TRIGGER x_trigger BEFORE INSERT ON x
>>>>>WHEN
>>>>>        0 = 1
>>>>>           BEGIN SELECT RAISE ( ABORT, 'raise' );
>>>>>END;
>>>>>
>>>>>time taken 4.49 seconds.
>>>>>_______________________________________________
>>>>>sqlite-users mailing list
>>>>>sqlite-users@mailinglists.sqlite.org
>>>>>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>>>users
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> sqlite-users mailing list
>>>> sqlite-users@mailinglists.sqlite.org
>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>>>users
>>>_______________________________________________
>>>sqlite-users mailing list
>>>sqlite-users@mailinglists.sqlite.org
>>>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to