]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Cache most recent relfilenode lookups, for speed, after report of
authorBruce Momjian <bruce@momjian.us>
Wed, 20 Oct 2010 00:55:16 +0000 (00:55 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 20 Oct 2010 00:55:16 +0000 (00:55 +0000)
pg_upgrade slowness for 150k tables.

contrib/pg_upgrade/info.c

index a8d0bddc1912e90fe7969900ad1073da64cadcdf..946e6ccb6bacc83ef979ff281e420bba446e1884 100644 (file)
@@ -423,11 +423,21 @@ relarr_lookup_rel(RelInfoArr *rel_arr,
                                  const char *nspname, const char *relname,
                                  Cluster whichCluster)
 {
-       int                     relnum;
+       static int                      relnum = 0;
 
        if (!rel_arr || !relname)
                return NULL;
 
+       /* Test most recent lookup first, for speed */
+       if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&
+               strcmp(rel_arr->rels[relnum].relname, relname) == 0)
+               return &rel_arr->rels[relnum];
+
+       if (relnum + 1 < rel_arr->nrels &&
+               strcmp(rel_arr->rels[relnum + 1].nspname, nspname) == 0 &&
+               strcmp(rel_arr->rels[relnum + 1].relname, relname) == 0)
+               return &rel_arr->rels[relnum + 1];
+       
        for (relnum = 0; relnum < rel_arr->nrels; relnum++)
        {
                if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&