BUG #4079: libpq.dll very slow (unusable)

Поиск
Список
Период
Сортировка
От Pavel Golub
Тема BUG #4079: libpq.dll very slow (unusable)
Дата
Msg-id 200804011403.m31E3MSD058056@wwwmaster.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #4079: libpq.dll very slow (unusable)  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      4079
Logged by:          Pavel Golub
Email address:      pavel@microolap.com
PostgreSQL version: 8.3.1
Operating system:   Windows XP SP2
Description:        libpq.dll very slow (unusable)
Details:

Comparing 8.3.1 to 8.2.5 release INSERT of >1000 rows is very slow.

CREATE TABLE numbers
(
  numberint integer NOT NULL,
  numberstr character varying(80),
  CONSTRAINT numbers_pkey PRIMARY KEY (numberint)
);

Inserts:
INSERT INTO numbers (numberint, numberstr) VALUES (1, 'One');
INSERT INTO numbers (numberint, numberstr) VALUES (2, 'Two');
INSERT INTO numbers (numberint, numberstr) VALUES (3, 'Three');
...
INSERT INTO numbers (numberint, numberstr) VALUES (1000, 'One thousand');

Program written on Delphi. Using libpq.dll 8.3.1.8075, and libpq 8.2.5.7260.
Both of them give the same results.

procedure Main(Db: TPSQLDatabase; SQL: string);
var
  conninfo: string;
  Conn: PGConn;
  Res: PGResult;
  cStart, cStop: cardinal;
begin
  with Db do
   Conninfo := Format('host = ''%s'' dbname = ''%s'' user = ''%s'' password
= ''%s'' port=''%d''',
          [Host, DatabaseName, UserName, UserPassword, Port]);

  Conn := PQConnectdb(PChar(ConnInfo));

  If PQStatus(Conn) <> CONNECTION_OK then
   begin
    ShowMessage('CAN''T START connection!');
    PQFinish(Conn);
    Exit;
   end;

   cStart:=GetTickCount();

   Res := PQExec(conn,PChar(SQL));
   if PQResultStatus(res) <> PGRES_COMMAND_OK then
       ShowMessage('CAN''T EXECUTE INSERTS');

  cStop:=GetTickCount();
  InfoMemo.Lines.Add('Execution time: '+IntToStr(cStop-cStart)+'ms');

  PQClear(res);
  PQFinish(Conn);
end;

Results with 10000 INSERTS:
- 984ms on PostgreSQL 8.2.7
- 25953ms on PostgreSQL 8.3.1

Result with 50000 INSERTS:
- 5063ms on PosgreSQL 8.2.7
- 26 minutes on PosgreSQL 8.3.1 (with 100% CPU usage)

The same behavior for pgAdmin III.

But psql works well when executing the request on both 8.2 and 8.3.

Tests were made under Windows XP only.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: BUG #4078: ERROR: operator does not exist: numeric = character varying
Следующее
От: "Pavel Alexei"
Дата:
Сообщение: BUG #4081: Running Postgres as Windows service vs regular applications