From: | Dan Birken <birken(at)gmail(dot)com> |
---|---|
To: | Ezequiel Lovelle <elovelle(at)dialdata(dot)com(dot)ar> |
Cc: | pgsql-performance(at)postgresql(dot)org |
Subject: | Re: slow loop inserts? |
Date: | 2011-05-15 22:27:31 |
Message-ID: | BANLkTi=qfbZj4h+jAjKNyTvwQWjx7E+0TA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Try wrapping all your inserts in a transaction:
pg_query('BEGIN');
// your inserts
pg_query('COMMIT');
That way you won't have to sync each of those inserts to disk, should
provide a huge speedup. Of course this means your 10,000 inserts will be
all or nothing, but it seems like in this case that should be fine.
-Dan
On Sun, May 15, 2011 at 3:02 PM, Ezequiel Lovelle
<elovelle(at)dialdata(dot)com(dot)ar>wrote:
> Hi, I'm new to postgres and I have the next question.
>
> I have a php program that makes 100000 inserts in my database.
> autoincrement numbers inserted into a table with 5 columns.
> The script takes about 4 minutes from a webserver
> Is it a normal time?
>
> How could reduce this time by a bulce of inserts?
>
> When I turn off fsync get much more performance, but it is not ideal in
> power failure
>
>
>
> *Hardware*: 2 disks 1TB 7200 rpm with software raid 1 (gmirror raid)
>
> 8 Gb RAM
>
> CPU Intel Quad Core 2.4 Ghz
>
> *OS*: Freebsd 8.2
>
> *Postgres version*: 9.0.4
>
>
>
> *My postgres config*:
>
>
> listen_addresses = '*'
> wal_level = archive
> fsync = on
> archive_mode = on
> archive_command = 'exit 0'
> maintenance_work_mem = 480MB
> checkpoint_completion_target = 0.5
> effective_cache_size = 5632MB
> work_mem = 40MB
> wal_buffers = 16MB
> checkpoint_segments = 30
> shared_buffers = 1920MB
> max_connections = 40
>
>
>
> *My execution time of my script*:
>
> [root(at)webserver ~]# time php script.php
>
> real 4m54.846s
> user 0m2.695s
> sys 0m1.775s
>
>
>
> *My scipt*:
>
> <?php
>
> pg_connect("host=host port=port dbname=db user=user password=pass") or die
> ("No me conecto...");
> for ( $var = 1; $var <= 100000 ; $var++ )
> {
> $sql = "INSERT INTO server (aa, bb, cc, dd, ee) VALUES
> ('$var','$var','$var','$var','$var')";
> pg_query($sql);
> }
> ?>
>
> *my dd test is*:
>
> #time sh -c "dd if=/dev/zero of=/tmp/test count=500000 && fsync"
> 500000+0 records in
> 500000+0 records out
> 256000000 bytes transferred in 2.147917 secs (119185237 bytes/sec)
> usage: fsync file ...
>
> real 0m2.177s
> user 0m0.188s
> sys 0m0.876s
>
>
>
> Thanks, any help will be well recived,
>
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2011-05-16 00:25:23 | Re: KVP table vs. hstore - hstore performance (Was: Postgres NoSQL emulation) |
Previous Message | Ezequiel Lovelle | 2011-05-15 22:02:39 | slow loop inserts? |