Hi,
I took another look at this, and 99% of the patch (the fixes to sort
debug messages) seems fine to me. Attached is the part I plan to get
committed, including commit message etc.
The one change I decided to remove is this change in tuplesort_free:
- long spaceUsed;
+ int64 spaceUsed;
The reason why I think this variable should be 'long' is that we're
using it for this:
spaceUsed = LogicalTapeSetBlocks(state->tapeset);
and LogicalTapeSetBlocks is defined like this:
extern long LogicalTapeSetBlocks(LogicalTapeSet *lts);
FWIW the "long" is not introduced by incremental sort - it used to be in
tuplesort_end, the incremental sort patch just moved it to a different
function. It's a bit confusing that tuplesort_updatemax has this:
int64 spaceUsed;
But I'd argue this is actually wrong, and should be "long" instead. (And
this actually comes from the incremental sort patch, by me.)
FWIW while looking at what the other places calling LogicalTapeSetBlocks
do, and I noticed this:
uint64 disk_used = LogicalTapeSetBlocks(...);
in the disk-based hashagg patch. So that's a third data type ...
regards
--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>From 43545ab6e54821a1d459cde2ff9dea58ece2c237 Mon Sep 17 00:00:00 2001
From: tanghy <tanghy.f...@cn.fujitsu.com>
Date: Fri, 16 Oct 2020 14:50:38 +0900
Subject: [PATCH] Use INT64_FORMAT to print int64 variables in sort debug
Commit 6ee3b5fb99 cleaned up most of the long/int64 confusion related to
incremental sort, but the sort debug messages were still using %ld for
int64 variables. So fix that.
Author: Haiying Tang
Backpatch-through: 13
Discussion:
https://postgr.es/m/4250be9d350c4992abb722a76e288aef%40G08CNEXMBPEKD05.g08.fujitsu.local
---
src/backend/executor/nodeIncrementalSort.c | 28 +++++++++++-----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/backend/executor/nodeIncrementalSort.c
b/src/backend/executor/nodeIncrementalSort.c
index eb6cc19a60..eb1c1326de 100644
--- a/src/backend/executor/nodeIncrementalSort.c
+++ b/src/backend/executor/nodeIncrementalSort.c
@@ -333,7 +333,7 @@ switchToPresortedPrefixMode(PlanState *pstate)
*/
if (node->bounded)
{
- SO1_printf("Setting bound on presorted prefix tuplesort to:
%ld\n",
+ SO1_printf("Setting bound on presorted prefix tuplesort to: "
INT64_FORMAT "\n",
node->bound - node->bound_Done);
tuplesort_set_bound(node->prefixsort_state,
node->bound -
node->bound_Done);
@@ -417,9 +417,9 @@ switchToPresortedPrefixMode(PlanState *pstate)
* remaining in the large single prefix key group we think we've
* encountered.
*/
- SO1_printf("Moving %ld tuples to presorted prefix tuplesort\n",
nTuples);
+ SO1_printf("Moving " INT64_FORMAT " tuples to presorted prefix
tuplesort\n", nTuples);
node->n_fullsort_remaining -= nTuples;
- SO1_printf("Setting n_fullsort_remaining to %ld\n",
node->n_fullsort_remaining);
+ SO1_printf("Setting n_fullsort_remaining to " INT64_FORMAT "\n",
node->n_fullsort_remaining);
if (lastTuple)
{
@@ -449,7 +449,7 @@ switchToPresortedPrefixMode(PlanState *pstate)
* out all of those tuples, and then come back around to find
another
* batch.
*/
- SO1_printf("Sorting presorted prefix tuplesort with %ld
tuples\n", nTuples);
+ SO1_printf("Sorting presorted prefix tuplesort with "
INT64_FORMAT " tuples\n", nTuples);
tuplesort_performsort(node->prefixsort_state);
INSTRUMENT_SORT_GROUP(node, prefixsort);
@@ -462,7 +462,7 @@ switchToPresortedPrefixMode(PlanState *pstate)
* - n), so store the current number of processed
tuples for use
* in configuring sorting bound.
*/
- SO2_printf("Changing bound_Done from %ld to %ld\n",
+ SO2_printf("Changing bound_Done from " INT64_FORMAT "
to " INT64_FORMAT "\n",
Min(node->bound, node->bound_Done +
nTuples), node->bound_Done);
node->bound_Done = Min(node->bound, node->bound_Done +
nTuples);
}
@@ -574,7 +574,7 @@ ExecIncrementalSort(PlanState *pstate)
* need to re-execute the prefix mode transition
function to pull
* out the next prefix key group.
*/
- SO1_printf("Re-calling switchToPresortedPrefixMode()
because n_fullsort_remaining is > 0 (%ld)\n",
+ SO1_printf("Re-calling switchToPresortedPrefixMode()
because n_fullsort_remaining is > 0 (" INT64_FORMAT ")\n",
node->n_fullsort_remaining);
switchToPresortedPrefixMode(pstate);
}
@@ -707,7 +707,7 @@ ExecIncrementalSort(PlanState *pstate)
*/
node->outerNodeDone = true;
- SO1_printf("Sorting fullsort with %ld
tuples\n", nTuples);
+ SO1_printf("Sorting fullsort with "
INT64_FORMAT " tuples\n", nTuples);
tuplesort_performsort(fullsort_state);
INSTRUMENT_SORT_GROUP(node, fullsort);
@@ -776,7 +776,7 @@ ExecIncrementalSort(PlanState *pstate)
* current number of processed
tuples for later use
* configuring the sort state's
bound.
*/
- SO2_printf("Changing bound_Done
from %ld to %ld\n",
+ SO2_printf("Changing bound_Done
from " INT64_FORMAT " to " INT64_FORMAT "\n",
node->bound_Done,
Min(node->bound, node->bound_Done + nTuples));
node->bound_Done =
Min(node->bound, node->bound_Done + nTuples);
@@ -787,7 +787,7 @@ ExecIncrementalSort(PlanState *pstate)
* sort and transition modes to reading
out the sorted
* tuples.
*/
- SO1_printf("Sorting fullsort tuplesort
with %ld tuples\n",
+ SO1_printf("Sorting fullsort tuplesort
with " INT64_FORMAT " tuples\n",
nTuples);
tuplesort_performsort(fullsort_state);
@@ -828,7 +828,7 @@ ExecIncrementalSort(PlanState *pstate)
* on FIFO retrieval semantics when
transferring them to the
* presorted prefix tuplesort.
*/
- SO1_printf("Sorting fullsort tuplesort with %ld
tuples\n", nTuples);
+ SO1_printf("Sorting fullsort tuplesort with "
INT64_FORMAT " tuples\n", nTuples);
tuplesort_performsort(fullsort_state);
INSTRUMENT_SORT_GROUP(node, fullsort);
@@ -847,12 +847,12 @@ ExecIncrementalSort(PlanState *pstate)
{
int64 currentBound =
node->bound - node->bound_Done;
- SO2_printf("Read %ld tuples, but
setting to %ld because we used bounded sort\n",
+ SO2_printf("Read " INT64_FORMAT "
tuples, but setting to " INT64_FORMAT " because we used bounded sort\n",
nTuples,
Min(currentBound, nTuples));
nTuples = Min(currentBound, nTuples);
}
- SO1_printf("Setting n_fullsort_remaining to %ld
and calling switchToPresortedPrefixMode()\n",
+ SO1_printf("Setting n_fullsort_remaining to "
INT64_FORMAT " and calling switchToPresortedPrefixMode()\n",
nTuples);
/*
@@ -942,7 +942,7 @@ ExecIncrementalSort(PlanState *pstate)
* Perform the sort and begin returning the tuples to the
parent plan
* node.
*/
- SO1_printf("Sorting presorted prefix tuplesort with >= %ld
tuples\n", nTuples);
+ SO1_printf("Sorting presorted prefix tuplesort with "
INT64_FORMAT " tuples\n", nTuples);
tuplesort_performsort(node->prefixsort_state);
INSTRUMENT_SORT_GROUP(node, prefixsort);
@@ -958,7 +958,7 @@ ExecIncrementalSort(PlanState *pstate)
* - n), so store the current number of processed
tuples for use
* in configuring sorting bound.
*/
- SO2_printf("Changing bound_Done from %ld to %ld\n",
+ SO2_printf("Changing bound_Done from " INT64_FORMAT "
to " INT64_FORMAT "\n",
node->bound_Done,
Min(node->bound, node->bound_Done +
nTuples));
node->bound_Done = Min(node->bound, node->bound_Done +
nTuples);
--
2.25.4