v2-0002-Use-sort_template.h-for-compactify_tuples.patch
text/x-patch
Filename: v2-0002-Use-sort_template.h-for-compactify_tuples.patch
Type: text/x-patch
Part: 1
Message:
Re: Optimising compactify_tuples()
Patch
Format: format-patch
Series: patch v2-0002
Subject: Use sort_template.h for compactify_tuples().
| File | + | − |
|---|---|---|
| src/backend/storage/page/bufpage.c | 8 | 9 |
From 9290693b090ec69bf837f2a2f53e1f1663bdc8ef Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Mon, 17 Aug 2020 20:59:32 +1200
Subject: [PATCH v2 2/5] Use sort_template.h for compactify_tuples().
Since compactify_tuples() is called often, a specialized sort function
for sorting tuple offsets can give measurable speed-up.
Discussion: https://postgr.es/m/CA%2BhUKGKMQFVpjr106gRhwk6R-nXv0qOcTreZuQzxgpHESAL6dw%40mail.gmail.com
---
src/backend/storage/page/bufpage.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c
index d708117a40..f81fa8cf3d 100644
--- a/src/backend/storage/page/bufpage.c
+++ b/src/backend/storage/page/bufpage.c
@@ -421,13 +421,13 @@ typedef struct itemIdSortData
} itemIdSortData;
typedef itemIdSortData *itemIdSort;
-static int
-itemoffcompare(const void *itemidp1, const void *itemidp2)
-{
- /* Sort in decreasing itemoff order */
- return ((itemIdSort) itemidp2)->itemoff -
- ((itemIdSort) itemidp1)->itemoff;
-}
+/* Create a specialized sort function for descending offset order. */
+#define ST_SORT qsort_itemoff
+#define ST_ELEMENT_TYPE itemIdSortData
+#define ST_COMPARE(a, b) ((b)->itemoff - (a)->itemoff)
+#define ST_SCOPE static
+#define ST_DEFINE
+#include "lib/sort_template.h"
/*
* After removing or marking some line pointers unused, move the tuples to
@@ -441,8 +441,7 @@ compactify_tuples(itemIdSort itemidbase, int nitems, Page page)
int i;
/* sort itemIdSortData array into decreasing itemoff order */
- qsort((char *) itemidbase, nitems, sizeof(itemIdSortData),
- itemoffcompare);
+ qsort_itemoff(itemidbase, nitems);
upper = phdr->pd_special;
for (i = 0; i < nitems; i++)
--
2.20.1