Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3325c9b

Browse files
committed
Further speed up pg_upgrade lookups.
1 parent c33bfb8 commit 3325c9b

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

contrib/pg_upgrade/info.c

+20-19
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db,
6666
if (strcmp(newrel->nspname, "pg_toast") == 0)
6767
continue;
6868

69-
oldrel = relarr_lookup_rel(&(old_db->rel_arr), newrel->nspname,
69+
oldrel = relarr_lookup_rel(&old_db->rel_arr, newrel->nspname,
7070
newrel->relname, CLUSTER_OLD);
7171

7272
map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata,
@@ -275,7 +275,7 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster)
275275

276276
for (dbnum = 0; dbnum < db_arr->ndbs; dbnum++)
277277
get_rel_infos(&db_arr->dbs[dbnum],
278-
&(db_arr->dbs[dbnum].rel_arr), whichCluster);
278+
&db_arr->dbs[dbnum].rel_arr, whichCluster);
279279

280280
if (log.debug)
281281
dbarr_print(db_arr, whichCluster);
@@ -292,8 +292,7 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster)
292292
* FirstNormalObjectId belongs to the user
293293
*/
294294
static void
295-
get_rel_infos(const DbInfo *dbinfo,
296-
RelInfoArr *relarr, Cluster whichCluster)
295+
get_rel_infos(const DbInfo *dbinfo, RelInfoArr *relarr, Cluster whichCluster)
297296
{
298297
PGconn *conn = connectToServer(dbinfo->db_name, whichCluster);
299298
PGresult *res;
@@ -386,6 +385,7 @@ get_rel_infos(const DbInfo *dbinfo,
386385

387386
relarr->rels = relinfos;
388387
relarr->nrels = num_rels;
388+
relarr->cache_name_rel = 0;
389389
}
390390

391391

@@ -419,31 +419,31 @@ dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name)
419419
* RelInfo structure.
420420
*/
421421
static RelInfo *
422-
relarr_lookup_rel(RelInfoArr *rel_arr,
423-
const char *nspname, const char *relname,
424-
Cluster whichCluster)
422+
relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname,
423+
const char *relname, Cluster whichCluster)
425424
{
426-
static int relnum = 0;
425+
int relnum;
427426

428427
if (!rel_arr || !relname)
429428
return NULL;
430429

431-
/* Test most recent lookup first, for speed */
432-
if (relnum < rel_arr->nrels &&
433-
strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&
434-
strcmp(rel_arr->rels[relnum].relname, relname) == 0)
435-
return &rel_arr->rels[relnum];
436-
437-
if (relnum + 1 < rel_arr->nrels &&
438-
strcmp(rel_arr->rels[relnum + 1].nspname, nspname) == 0 &&
439-
strcmp(rel_arr->rels[relnum + 1].relname, relname) == 0)
440-
return &rel_arr->rels[relnum + 1];
441-
430+
/* Test next lookup first, for speed */
431+
if (rel_arr->cache_name_rel + 1 < rel_arr->nrels &&
432+
strcmp(rel_arr->rels[rel_arr->cache_name_rel + 1].nspname, nspname) == 0 &&
433+
strcmp(rel_arr->rels[rel_arr->cache_name_rel + 1].relname, relname) == 0)
434+
{
435+
rel_arr->cache_name_rel++;
436+
return &rel_arr->rels[rel_arr->cache_name_rel];
437+
}
438+
442439
for (relnum = 0; relnum < rel_arr->nrels; relnum++)
443440
{
444441
if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&
445442
strcmp(rel_arr->rels[relnum].relname, relname) == 0)
443+
{
444+
rel_arr->cache_name_rel = relnum;
446445
return &rel_arr->rels[relnum];
446+
}
447447
}
448448
pg_log(PG_FATAL, "Could not find %s.%s in %s cluster\n",
449449
nspname, relname, CLUSTERNAME(whichCluster));
@@ -483,6 +483,7 @@ relarr_free(RelInfoArr *rel_arr)
483483
{
484484
pg_free(rel_arr->rels);
485485
rel_arr->nrels = 0;
486+
rel_arr->cache_name_rel = 0;
486487
}
487488

488489

contrib/pg_upgrade/pg_upgrade.h

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ typedef struct
7878
{
7979
RelInfo *rels;
8080
int nrels;
81+
int cache_name_rel; /* cache of last lookup location */
8182
} RelInfoArr;
8283

8384
/*

0 commit comments

Comments
 (0)