1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

Rework temp_tablespaces patch so that temp tablespaces are assigned separately

for each temp file, rather than once per sort or hashjoin; this allows
spreading the data of a large sort or join across multiple tablespaces.
(I remain dubious that this will make any difference in practice, but certain
people insisted.)  Arrange to cache the results of parsing the GUC variable
instead of recomputing from scratch on every demand, and push usage of the
cache down to the bottommost fd.c level.
This commit is contained in:
Tom Lane
2007-06-07 19:19:57 +00:00
parent 2d9d7a6bf5
commit 24ee8af573
14 changed files with 284 additions and 169 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/executor/nodeHashjoin.c,v 1.90 2007/06/03 17:07:26 tgl Exp $
* $PostgreSQL: pgsql/src/backend/executor/nodeHashjoin.c,v 1.91 2007/06/07 19:19:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -223,8 +223,7 @@ ExecHashJoin(HashJoinState *node)
* in the corresponding outer-batch file.
*/
Assert(batchno > hashtable->curbatch);
ExecHashJoinSaveTuple(hashtable,
ExecFetchSlotMinimalTuple(outerTupleSlot),
ExecHashJoinSaveTuple(ExecFetchSlotMinimalTuple(outerTupleSlot),
hashvalue,
&hashtable->outerBatchFile[batchno]);
node->hj_NeedNewOuter = true;
@ -755,8 +754,7 @@ start_over:
* will get messed up.
*/
void
ExecHashJoinSaveTuple(HashJoinTable hashtable,
MinimalTuple tuple, uint32 hashvalue,
ExecHashJoinSaveTuple(MinimalTuple tuple, uint32 hashvalue,
BufFile **fileptr)
{
BufFile *file = *fileptr;
@ -765,7 +763,7 @@ ExecHashJoinSaveTuple(HashJoinTable hashtable,
if (file == NULL)
{
/* First write to this batch file, so open it. */
file = BufFileCreateTemp(false, hashtable->hashTblSpc);
file = BufFileCreateTemp(false);
*fileptr = file;
}