pgsql: Buffering GiST index build algorithm.
Buffering GiST index build algorithm.
When building a GiST index that doesn't fit in cache, buffers are attached
to some internal nodes in the index. This speeds up the build by avoiding
random I/O that would otherwise be needed to traverse all the way down the
tree to the find right leaf page for tuple.
Alexander Korotkov
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/5edb24a8983e4a103e26153853d91141f818227c
Modified Files
--------------
doc/src/sgml/gist.sgml | 34 +
doc/src/sgml/ref/create_index.sgml | 20 +
src/backend/access/common/reloptions.c | 11 +
src/backend/access/gist/Makefile | 2 +-
src/backend/access/gist/README | 135 ++++
src/backend/access/gist/gist.c | 211 +-----
src/backend/access/gist/gistbuild.c | 1068 ++++++++++++++++++++++++++++
src/backend/access/gist/gistbuildbuffers.c | 787 ++++++++++++++++++++
src/backend/access/gist/gistutil.c | 27 +-
src/backend/access/gist/gistxlog.c | 6 +-
src/include/access/gist_private.h | 182 +++++-
11 files changed, 2297 insertions(+), 186 deletions(-)
On 8 September 2011 15:56, Heikki Linnakangas <heikki.linnakangas@iki.fi> wrote:
Buffering GiST index build algorithm.
When building a GiST index that doesn't fit in cache, buffers are attached
to some internal nodes in the index. This speeds up the build by avoiding
random I/O that would otherwise be needed to traverse all the way down the
tree to the find right leaf page for tuple.
Sorry Heikki...
s/additionaly/additionally/
--
Thom Brown
Twitter: @darkixion
IRC (freenode): dark_ixion
Registered Linux user: #516935
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On 08.09.2011 18:04, Thom Brown wrote:
On 8 September 2011 15:56, Heikki Linnakangas<heikki.linnakangas@iki.fi> wrote:
Buffering GiST index build algorithm.
When building a GiST index that doesn't fit in cache, buffers are attached
to some internal nodes in the index. This speeds up the build by avoiding
random I/O that would otherwise be needed to traverse all the way down the
tree to the find right leaf page for tuple.Sorry Heikki...
s/additionaly/additionally/
Sigh, fixed. I also reworded the sentence a bit. Thanks once again, Thom.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
On 09/08/2011 10:56 AM, Heikki Linnakangas wrote:
Buffering GiST index build algorithm.
When building a GiST index that doesn't fit in cache, buffers are attached
to some internal nodes in the index. This speeds up the build by avoiding
random I/O that would otherwise be needed to traverse all the way down the
tree to the find right leaf page for tuple.
This seems to have broken MSVC builds:
"C:\prog\bf\root\HEAD\pgsql.5584\pgsql.sln" (default target) (1) ->
(postgres target) ->
.\src\backend\access\gist\gistbuild.c(423): warning C4013: 'round' undefined; assuming extern returning int
"C:\prog\bf\root\HEAD\pgsql.5584\pgsql.sln" (default target) (1) ->
(postgres target) ->
gistbuild.obj : error LNK2019: unresolved external symbol round referenced in function calculatePagesPerBuffer
.\Debug\postgres\postgres.exe : fatal error LNK1120: 1 unresolved externals
Maybe we need to include math.h. And while we're about it, should the
result of round() be cast to an int, since that's what the function returns?
cheers
andrew
On 09/08/2011 04:13 PM, Andrew Dunstan wrote:
On 09/08/2011 10:56 AM, Heikki Linnakangas wrote:
Buffering GiST index build algorithm.
When building a GiST index that doesn't fit in cache, buffers are
attached
to some internal nodes in the index. This speeds up the build by
avoiding
random I/O that would otherwise be needed to traverse all the way
down the
tree to the find right leaf page for tuple.This seems to have broken MSVC builds:
"C:\prog\bf\root\HEAD\pgsql.5584\pgsql.sln" (default target) (1) ->
(postgres target) ->
.\src\backend\access\gist\gistbuild.c(423): warning C4013:
'round' undefined; assuming extern returning int"C:\prog\bf\root\HEAD\pgsql.5584\pgsql.sln" (default target) (1) ->
(postgres target) ->
gistbuild.obj : error LNK2019: unresolved external symbol round
referenced in function calculatePagesPerBuffer
.\Debug\postgres\postgres.exe : fatal error LNK1120: 1
unresolved externalsMaybe we need to include math.h. And while we're about it, should the
result of round() be cast to an int, since that's what the function
returns?
Or use rint(), which we certainly have.
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
Maybe we need to include math.h. And while we're about it, should the
result of round() be cast to an int, since that's what the function
returns?
Or use rint(), which we certainly have.
Yeah, this broke the build on my old HPUX box too. I committed a quick
fix using rint(), but on reflection I wonder if it shouldn't be ceil().
regards, tom lane
On 08.09.2011 23:44, Tom Lane wrote:
Andrew Dunstan<andrew@dunslane.net> writes:
Maybe we need to include math.h. And while we're about it, should the
result of round() be cast to an int, since that's what the function
returns?Or use rint(), which we certainly have.
Yeah, this broke the build on my old HPUX box too. I committed a quick
fix using rint(),
Thanks!
but on reflection I wonder if it shouldn't be ceil().
Doesn't really matter. The exact value of that parameter isn't critical
to the algorithm, and it can't go down to 0.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com