Re: When did we get to be so fast?
От | Bruce Momjian |
---|---|
Тема | Re: When did we get to be so fast? |
Дата | |
Msg-id | 200308072342.h77Ng0711047@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Re: When did we get to be so fast? (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: When did we get to be so fast?
|
Список | pgsql-hackers |
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > I was just testing the threaded ecpg, and ran some performance tests. > > Without using threads, I am seeing 100,000 inserts of a single word into > > a simple table take 12 seconds: > > CREATE TABLE test_thread(message TEXT); > > giving me 8333 inserts per second. That seems very high. > > Single transaction, or one transaction per INSERT? This is ecpg, and I didn't have AUTOCOMMIT on, so it was a single transaction. I had forgotten that. Also, I was wrong in my computations. It is 4166 inserts per second, not 8333. Sorry. I am now seeing more reasonable numbers: one INSERT per transaction, fsync true 934 one INSERT per transaction, fsync false 1818 one INSERT per transaction, fsync true 4166 > With the present WAL design, it's not possible for one backend to commit > more than one transaction per disk rotation --- unless fsync is off, or > your disk drive lies about write-complete. Given that you recently > updated your hardware, I'm betting on the last item ... Yep. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 /* * Thread test program * by Philip Yarra */ #include <stdlib.h> void ins1(void); void ins2(void); EXEC SQL BEGIN DECLARE SECTION; char *dbname; int iterations; EXEC SQL END DECLARE SECTION; int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "Usage: %s dbname iterations\n", argv[0]); return 1; } dbname = argv[1]; iterations = atoi(argv[2]); EXEC SQL CONNECT TO:dbname AS test0; /* DROP might fail */ EXEC SQL AT test0 DROP TABLE test_thread; EXEC SQL AT test0 COMMIT WORK; EXEC SQL AT test0 CREATE TABLE test_thread(message TEXT); EXEC SQL AT test0 COMMIT WORK; EXEC SQL DISCONNECT test0; ins1(); return 0; } void ins1(void) { int i; EXEC SQL WHENEVER sqlerror sqlprint; EXEC SQL CONNECT TO:dbname AS test1; /* EXEC SQL AT test1 SET AUTOCOMMIT = ON;*/ for (i = 0; i < iterations; i++) { EXEC SQL AT test1 INSERT INTO test_thread VALUES('thread1'); } EXEC SQL AT test1 COMMIT WORK; EXEC SQL DISCONNECT test1; }
В списке pgsql-hackers по дате отправления: