Improved scanner performance

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: PostgreSQL Development <pgsql-hackers(at)postgresql(dot)org>
Subject: Improved scanner performance
Date: 2002-04-19 17:02:16
Message-ID: Pine.LNX.4.30.0204191245190.687-100000@peter.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I've been poking at the scanner a bit using the large literal test case
from the other day

http://archives.postgresql.org/pgsql-hackers/2002-04/msg00811.php

I've been able to reduce the wall-clock run time of that test from 3:37
min to 2:13 min and the base_yylex() per-call time from 137ms to 24ms.

I've used 'flex -8 -CFa' and restructured the code to avoid looping over
and copying the input string half a dozen times. For instance, instead of
scanstr(), the escape sequences are resolved as the input is scanned, and
instead of the myinput() routine I use the function yy_scan_buffer()
provided by flex for scanning in-memory strings. (This would make the
code flex-dependent, but in reality it already is anyway.)

The "before" profile was:

% cumulative self self total
time seconds seconds calls ms/call ms/call name
23.51 6.65 6.65 110 60.45 137.27 base_yylex
23.19 13.21 6.56 11 596.36 1089.69 pq_getstring
19.16 18.63 5.42 74882482 0.00 0.00 pq_getbyte
14.99 22.87 4.24 11 385.45 385.46 scanstr
9.61 25.59 2.72 23 118.26 118.26 yy_get_previous_state
3.78 26.66 1.07 34 31.47 31.47 myinput
3.64 27.69 1.03 22 46.82 46.82 textin
1.48 28.11 0.42 34 12.35 43.82 yy_get_next_buffer

The "after" profile is:

% cumulative self self total
time seconds seconds calls ms/call ms/call name
40.30 5.65 5.65 11 513.64 943.64 pq_getstring
33.74 10.38 4.73 74882482 0.00 0.00 pq_getbyte
18.90 13.03 2.65 110 24.09 24.09 base_yylex
6.85 13.99 0.96 22 43.64 43.64 textin
0.07 14.00 0.01 86 0.12 0.12 heap_fetch

--
Peter Eisentraut peter_e(at)gmx(dot)net

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Joe Conway 2002-04-19 17:25:56 Re: Odd(?) RI-trigger behavior
Previous Message Tom Lane 2002-04-19 16:57:49 Re: Odd(?) RI-trigger behavior