[Haskell-cafe] Takusen sqlite3 insert is very slow
Vasyl Pasternak
vasyl.pasternak at gmail.com
Sat Mar 20 06:32:44 EDT 2010
Hi Cafe,
I have another problem, please look at code:
storeInDb = withSession (connect "test.db")
(do
execDDL (sql "create table x (y int)")
forM_ ([1..10000] :: [Int])
(\x -> do
execDML (cmdbind ("insert into x (y) values (?);")
[bindP x])
return ()))
This code runs 16 seconds which is very slow for this simple task. RTS
output is below. After profiling this program I found that 85% of its
time it spends in 'Database.Sqlite.SqliteFunctions.stmtFetch'.
Currently I don't know how to make it faster, maybe anyone had this
problem later?
HDBC inserts very fast, so this is not sqlite error.
RTS output:
156,195,264 bytes allocated in the heap
591,280 bytes copied during GC
3,952 bytes maximum residency (1 sample(s))
10,968 bytes maximum slop
1 MB total memory in use (0 MB lost due to fragmentation)
Generation 0: 295 collections, 0 parallel, 0.00s, 0.01s elapsed
Generation 1: 1 collections, 0 parallel, 0.00s, 0.02s elapsed
INIT time 0.00s ( 0.03s elapsed)
MUT time 0.87s ( 16.09s elapsed)
GC time 0.00s ( 0.02s elapsed)
RP time 0.00s ( 0.00s elapsed)
PROF time 0.00s ( 0.00s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 0.88s ( 16.14s elapsed)
%GC time 0.5% (0.1% elapsed)
Alloc rate 179,111,917 bytes per MUT second
Productivity 99.5% of total user, 5.4% of total elapsed
Regards,
Vasyl
More information about the Haskell-Cafe
mailing list