2016-04-17 10:13 GMT+02:00 Rob Willett <rob.sqlite at robertwillett.com>:

> I do not have the whole thread for what you reported but I did read
> somebody ask if you have put your inserts between a BEGIN/END transaction.
> That will make a massive difference to your speed.  Also I?m unclear as to
> how Java fits in all of this. Perhaps you gave a better indication further
> up the thread I do not have.
>

?Oops, the I did not read good enough. :-(

I start with a:
    ?

?conn.setAutoCommit(false);
but that is not the same? It does make a big difference. Without it 1E4
records take 25 minutest, with it it takes less as a second. I did not even
try 1E5 without it, but with it, it takes 2-3 seconds.

It is at least partly to do with SQLite. When I had the load of 15 I was
using the table definition:
CREATE TABLE testUniqueUUID (
    UUID    text,

    PRIMARY KEY(UUID)
);

I am running it again with the table definition:
CREATE TABLE testUniqueUUID (
    UUID    blob,

    PRIMARY KEY(UUID)
    CHECK(TYPEOF(UUID) = 'blob'           AND
          LENGTH(UUID) = 16               AND
          SUBSTR(HEX(UUID), 13, 1) == '4' AND
          SUBSTR(HEX(UUID), 17, 1) IN ('8', '9', 'A', 'B')
    )
);

and the load is now around ten. Still high, but it does not cripple my
system.?



> There are a lot of very, very talented people on the list, I am an not one
> of them :), I would strongly urge you to provide more information rather
> than less, e.g. you provide summary information for Java by RSS. It would
> be a lot more useful to have the full raw data so people can look for
> quirks and anomalies rather than simply you interpreting it for us. I am
> NOT the best person to talk about SQLite performance, however I am more
> familiar with Unix/Linux performance and administration.
>

?Which information would be useful? Ihis is the /proc/PID/status
information:
Name:    java
State:    S (sleeping)
Tgid:    26455
Ngid:    0
Pid:    26455
PPid:    28670
TracerPid:    0
Uid:    1000    1000    1000    1000
Gid:    100    100    100    100
FDSize:    256
Groups:    7 33 100 486 498 1000
NStgid:    26455
NSpid:    26455
NSpgid:    26455
NSsid:    28670
VmPeak:     6935564 kB
VmSize:     6873208 kB
VmLck:           0 kB
VmPin:           0 kB
VmHWM:      111664 kB
VmRSS:      104784 kB
VmData:     6828392 kB
VmStk:         140 kB
VmExe:           4 kB
VmLib:       17148 kB
VmPTE:         492 kB
VmPMD:          32 kB
VmSwap:           0 kB
Threads:    20
SigQ:    1/63646
SigPnd:    0000000000000000
ShdPnd:    0000000000000000
SigBlk:    0000000000000000
SigIgn:    0000000000000000
SigCgt:    0000000181005ccf
CapInh:    0000000000000000
CapPrm:    0000000000000000
CapEff:    0000000000000000
CapBnd:    0000003fffffffff
Seccomp:    0
Cpus_allowed:    ff
Cpus_allowed_list:    0-7
Mems_allowed:
00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:    0
voluntary_ctxt_switches:    6
nonvoluntary_ctxt_switches:    1

To my untrained eye VmPeak and VmSize look high.
?



> Since most people here do not have the same issues as you and I have no
> doubt they are hitting Sqlite far harder than I or you can, I would look at
> what you are doing that is different and Java keeps jumping out at me.


?That was also my idea. I only wanted to confirm it was not a SQLite
problem. But looking at changing the UUID from text to blob makes such a
big difference, I suspect it is partly a SQLite problem.

?


> I have run (though not programmed as I?m not a Java developer) a number of
> programs running Java as the backend onto large DB2 databases and the first
> thing the developers would do would be to increase the amount of memory
> that Java is allowed to allocate and use. They would tend to throw 4GB at
> each JVM or more if the sysadmins would let them.
>

?Seeing that ?the program does not use swap, I do not think that the amount
of memory the program has is a problem.

-- 
Cecil Westerhof

Reply via email to