This is an automated email from the ASF dual-hosted git repository.

maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 3a2626d5c22c2075ae9d22dbbba9fbddc77997c9
Author: Soumyadeep Chakraborty <[email protected]>
AuthorDate: Sat May 25 13:55:19 2024 -0700

    Introduce gp_appendonly_compaction_segfile_limit
    
    This commit introduces the gp_appendonly_compaction_segfile_limit GUC,
    which ensures the availability of N segfiles for insert operations,
    before going forward with a compaction decision.
    
    During VACUUM, we decide to drop a segfile in AWAITING_DROP iff there is
    no older snapshot in the system that can see the segfile. This can lead
    to exhaustion of segfiles for insert purposes post VACUUM (since
    segfiles AWAITING_DROP aren't eligible for inserts). Currently, once a
    segfile is chosen as a compaction "target", it is destined to go into
    AWAITING_DROP. So, we install the GUC guard when we are deciding on the
    next segfile to compact. If we see that the number of eligible segments
    for insert is below the threshold, we are done with compaction - for all
    remaining segfiles.
    
    uao/max_concurrency2.source has been modified to demonstrate the
    safeguard.
    
    Co-authored-by: Ashwin Agrawal <[email protected]>
    Reviewed-by: Huansong Fu <[email protected]>
---
 src/backend/access/appendonly/appendonlywriter.c   |  73 ++++-
 src/backend/utils/misc/guc_gp.c                    |  12 +
 src/include/utils/guc.h                            |   1 +
 src/include/utils/sync_guc_name.h                  |   1 +
 .../isolation2/input/uao/max_concurrency2.source   |  28 +-
 .../isolation2/output/uao/max_concurrency2.source  | 300 ++++++++++++++++++++-
 6 files changed, 405 insertions(+), 10 deletions(-)

diff --git a/src/backend/access/appendonly/appendonlywriter.c 
b/src/backend/access/appendonly/appendonlywriter.c
index 7fceaed238..fdcc39de2e 100644
--- a/src/backend/access/appendonly/appendonlywriter.c
+++ b/src/backend/access/appendonly/appendonlywriter.c
@@ -50,6 +50,7 @@
  * local functions
  */
 static int choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode);
+static int num_non_existing_segfiles(Relation rel, bool *existing_segnos, List 
*avoid_segnos);
 static int choose_new_segfile(Relation rel, bool *used, List *avoid_segnos);
 static void get_aoseg_fields(Relation rel, Relation pg_aoseg_rel, HeapTuple 
tuple,
                                                         int32 *segno, int64 
*tupcount, int16 *state, int16 *formatversion);
@@ -386,15 +387,16 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
        int                     i;
        int32           chosen_segno = -1;
        candidate_segment candidates[MAX_AOREL_CONCURRENCY];
-       bool            used[MAX_AOREL_CONCURRENCY];
+       bool            existing_segnos[MAX_AOREL_CONCURRENCY]; /* already have 
aoseg row */
        int                     ncandidates = 0;
+       int             nemptysegs = 0;
        SysScanDesc aoscan;
        HeapTuple       tuple;
        Snapshot        snapshot;
        Oid                     segrelid;
        bool            tried_creating_new_segfile = false;
 
-       memset(used, 0, sizeof(used));
+       memset(existing_segnos, 0, sizeof(existing_segnos));
 
        if (ShouldUseReservedSegno(rel, mode))
        {
@@ -457,7 +459,7 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
                get_aoseg_fields(rel, pg_aoseg_rel, tuple, &segno,
                                                 &tupcount, &state, 
&formatversion);
 
-               used[segno] = true;
+               existing_segnos[segno] = true;
 
                /* never write to AWAITING_DROP segments */
                if (state != AOSEG_STATE_DEFAULT)
@@ -500,11 +502,11 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
                                break;
                        }
                }
-               else
+               else if (tupcount == 0)
                {
                        /* If the ao segment is empty, do not choose it for 
compaction */
-                       if (tupcount == 0)
-                               continue;
+                       nemptysegs++;
+                       continue;
                }
 
                candidates[ncandidates].segno = segno;
@@ -520,6 +522,35 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
        if (chosen_segno == -1)
        {
 
+               /*
+                * If we are choosing the next segfile to compact, check to see 
if we
+                * still have enough segfiles that can be inserted into.
+                *
+                * The grand total of non-existing segfiles, empty segfiles and 
segfiles
+                * that are worthy of compaction (ncandidates) represent the 
total
+                * number of available segfiles that can serve inserts. This 
total must
+                * at least be gp_appendonly_compaction_segfile_limit.
+                *
+                * Otherwise, we might put too many segments into 
AOSEG_STATE_AWAITING_DROP.
+                * Segfiles also remain in that state if VACUUM runs while 
there is an
+                * older snapshot in the system.
+                */
+               if (mode == CHOOSE_MODE_COMPACTION_TARGET)
+               {
+                       int     non_existing_segfile_count;
+
+                       non_existing_segfile_count =
+                               num_non_existing_segfiles(rel, existing_segnos, 
avoid_segnos);
+                       if (non_existing_segfile_count + ncandidates + 
nemptysegs < gp_appendonly_compaction_segfile_limit)
+                       {
+                               
ereportif(Debug_appendonly_print_segfile_choice, LOG,
+                                                 (errmsg("number of available 
segfiles for inserts is below gp_appendonly_compaction_segfile_limit"),
+                                                  errdetail("compaction 
candidate count = %d, non-existing segfile count = %d, empty segfile count = 
%d, limit = %d",
+                                                                        
ncandidates, non_existing_segfile_count, nemptysegs, 
gp_appendonly_compaction_segfile_limit)));
+                               goto cleanup;
+                       }
+               }
+
                /*
                 * Sort the candidates by tuple count, to prefer segment with 
fewest existing
                 * tuples. (In particular, in COMPACTION_WRITE mode, this puts 
all empty
@@ -547,7 +578,7 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
                                !tried_creating_new_segfile &&
                                candidates[i].tupcount > 0)
                        {
-                               chosen_segno = choose_new_segfile(rel, used, 
avoid_segnos);
+                               chosen_segno = choose_new_segfile(rel, 
existing_segnos, avoid_segnos);
                                tried_creating_new_segfile = true;
                                if (chosen_segno != -1)
                                        break;
@@ -586,9 +617,10 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
                mode != CHOOSE_MODE_COMPACTION_TARGET &&
                !tried_creating_new_segfile)
        {
-               chosen_segno = choose_new_segfile(rel, used, avoid_segnos);
+               chosen_segno = choose_new_segfile(rel, existing_segnos, 
avoid_segnos);
        }
 
+cleanup:
        UnlockDatabaseObject(rel->rd_node.dbNode, (Oid)rel->rd_node.relNode, 0, 
ExclusiveLock);
 
        if (Debug_appendonly_print_segfile_choice && chosen_segno != -1)
@@ -601,6 +633,31 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
        return chosen_segno;
 }
 
+/*
+ * Discounting the 'existing_segnos' and 'avoid_segnos', count the number of
+ * segnos for this append-optimized relation. These segnos won't have an
+ * aoseg/aocsseg row.
+ */
+static int
+num_non_existing_segfiles(Relation rel, bool *existing_segnos, List 
*avoid_segnos)
+{
+       int non_existing = 0;
+
+       Assert(RelationStorageIsAO(rel));
+
+       for (int segno = 0; segno < MAX_AOREL_CONCURRENCY; segno++)
+       {
+               /* Only choose seg 0 in utility mode. See above. */
+               if (Gp_role != GP_ROLE_UTILITY && segno == 0)
+                       continue;
+
+               if (!existing_segnos[segno] && !list_member_int(avoid_segnos, 
segno))
+                       non_existing++;
+       }
+
+       return non_existing;
+}
+
 static int
 choose_new_segfile(Relation rel, bool *used, List *avoid_segnos)
 {
diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c
index eecfd01c70..09c48950c1 100644
--- a/src/backend/utils/misc/guc_gp.c
+++ b/src/backend/utils/misc/guc_gp.c
@@ -155,6 +155,7 @@ bool                enable_parallel_dedup_semi_reverse_join 
= true;
 int                    gp_appendonly_insert_files = 0;
 int                    gp_appendonly_insert_files_tuples_range = 0;
 int                    gp_random_insert_segments = 0;
+int            gp_appendonly_compaction_segfile_limit = 0;
 bool           gp_heap_require_relhasoids_match = true;
 bool           gp_local_distributed_cache_stats = false;
 bool           debug_xlog_record_read = false;
@@ -3401,6 +3402,17 @@ struct config_int ConfigureNamesInt_gp[] =
                NULL, NULL, NULL
        },
 
+       {
+               {"gp_appendonly_compaction_segfile_limit", PGC_USERSET, 
DEVELOPER_OPTIONS,
+               gettext_noop("Sets the minimum number of segfiles that must 
always be available for inserts"),
+               gettext_noop("If the number of available segfiles for insert 
falls below this limit, "
+                                                                       
"compaction will be avoided, to avoid too many segments going into 
AWAITING_DROP.")
+               },
+               &gp_appendonly_compaction_segfile_limit,
+               10, 0, 127,
+               NULL, NULL, NULL
+       },
+
        {
                {"gp_appendonly_insert_files_tuples_range", PGC_USERSET, 
DEVELOPER_OPTIONS,
                        gettext_noop("Range number of tuples files to switch 
between segment files for appendonly"
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index f9045dc8a2..31ba99791f 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -316,6 +316,7 @@ extern bool gp_enable_multiphase_limit;
  * 10% of the tuples are hidden.
  */
 extern int  gp_appendonly_compaction_threshold;
+extern int  gp_appendonly_compaction_segfile_limit;
 extern bool gp_heap_require_relhasoids_match;
 extern bool    debug_xlog_record_read;
 extern bool Debug_cancel_print;
diff --git a/src/include/utils/sync_guc_name.h 
b/src/include/utils/sync_guc_name.h
index 57ac3d8937..30d84ddd60 100644
--- a/src/include/utils/sync_guc_name.h
+++ b/src/include/utils/sync_guc_name.h
@@ -53,6 +53,7 @@
                "gin_pending_list_limit",
                "gp_allow_date_field_width_5digits",
                "gp_appendonly_compaction",
+               "gp_appendonly_compaction_segfile_limit",
                "gp_appendonly_compaction_threshold",
                "gp_appendonly_verify_block_checksums",
                "gp_appendonly_verify_write_block",
diff --git a/src/test/isolation2/input/uao/max_concurrency2.source 
b/src/test/isolation2/input/uao/max_concurrency2.source
index 976048d914..5b5c8161e6 100644
--- a/src/test/isolation2/input/uao/max_concurrency2.source
+++ b/src/test/isolation2/input/uao/max_concurrency2.source
@@ -1,5 +1,7 @@
 -- @Description Insert into a ao relation with 128 concurrent transactions.
--- The 128th transaction is expected to fail.
+-- The 128th transaction is expected to fail. After that, test VACUUM in the
+-- presence of an old snapshot and ensure that it respects
+-- gp_appendonly_compaction_segfile_limit.
 --
 --
 -- start_matchsubs
@@ -399,4 +401,28 @@ ALTER RESOURCE GROUP admin_group SET CONCURRENCY 130;
 SELECT * FROM ao;
 SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY segno;
 
+-- Test VACUUM in the presence of an old snapshot.
+SHOW gp_appendonly_compaction_segfile_limit;
+
+DELETE FROM ao;
+
+-- Create an "old" snapshot.
+1: BEGIN;
+1: SELECT * FROM ao;
+
+-- Since there is an old snapshot that is active, even though VACUUM will find
+-- that all segments are eligible to be compacted, it will compact them sans
+-- gp_appendonly_compaction_segfile_limit number of segments. The compacted 
segments
+-- will be in AWAITING_DROP due to the "old" snapshot though.
+VACUUM ao;
+SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY state, segno;
+
+-- Terminate the "old" snapshot.
+1: END;
+
+-- Now VACUUM will be able to compact the segments it wasn't able to and drop
+-- the ones that were AWAITING_DROP.
+VACUUM ao;
+SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY state, segno;
+
 ALTER RESOURCE GROUP admin_group SET CONCURRENCY 20;
diff --git a/src/test/isolation2/output/uao/max_concurrency2.source 
b/src/test/isolation2/output/uao/max_concurrency2.source
index a83f9de1bd..294e2feccf 100644
--- a/src/test/isolation2/output/uao/max_concurrency2.source
+++ b/src/test/isolation2/output/uao/max_concurrency2.source
@@ -1,5 +1,7 @@
 -- @Description Insert into a ao relation with 128 concurrent transactions.
--- The 128th transaction is expected to fail.
+-- The 128th transaction is expected to fail. After that, test VACUUM in the
+-- presence of an old snapshot and ensure that it respects
+-- gp_appendonly_compaction_segfile_limit.
 --
 --
 -- start_matchsubs
@@ -1047,5 +1049,301 @@ SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY segno;
  1          | 127   | 1        | 1        | 3             | 1     
 (127 rows)
 
+-- Test VACUUM in the presence of an old snapshot.
+SHOW gp_appendonly_compaction_segfile_limit;
+ gp_appendonly_compaction_segfile_limit 
+----------------------------------------
+ 10                                     
+(1 row)
+
+DELETE FROM ao;
+DELETE 127
+
+-- Create an "old" snapshot.
+1: BEGIN;
+BEGIN
+1: SELECT * FROM ao;
+ a | b 
+---+---
+(0 rows)
+
+-- Since there is an old snapshot that is active, even though VACUUM will find
+-- that all segments are eligible to be compacted, it will compact them sans
+-- gp_appendonly_compaction_segfile_limit number of segments. The compacted 
segments
+-- will be in AWAITING_DROP due to the "old" snapshot though.
+VACUUM ao;
+VACUUM
+SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY state, segno;
+ segment_id | segno | tupcount | modcount | formatversion | state 
+------------+-------+----------+----------+---------------+-------
+ 1          | 2     | 1        | 1        | 3             | 1     
+ 1          | 119   | 1        | 1        | 3             | 1     
+ 1          | 120   | 1        | 1        | 3             | 1     
+ 1          | 121   | 1        | 1        | 3             | 1     
+ 1          | 122   | 1        | 1        | 3             | 1     
+ 1          | 123   | 1        | 1        | 3             | 1     
+ 1          | 124   | 1        | 1        | 3             | 1     
+ 1          | 125   | 1        | 1        | 3             | 1     
+ 1          | 126   | 1        | 1        | 3             | 1     
+ 1          | 127   | 1        | 1        | 3             | 1     
+ 1          | 1     | 1        | 2        | 3             | 2     
+ 1          | 3     | 1        | 1        | 3             | 2     
+ 1          | 4     | 1        | 1        | 3             | 2     
+ 1          | 5     | 1        | 1        | 3             | 2     
+ 1          | 6     | 1        | 1        | 3             | 2     
+ 1          | 7     | 1        | 1        | 3             | 2     
+ 1          | 8     | 1        | 1        | 3             | 2     
+ 1          | 9     | 1        | 1        | 3             | 2     
+ 1          | 10    | 1        | 1        | 3             | 2     
+ 1          | 11    | 1        | 1        | 3             | 2     
+ 1          | 12    | 1        | 1        | 3             | 2     
+ 1          | 13    | 1        | 1        | 3             | 2     
+ 1          | 14    | 1        | 1        | 3             | 2     
+ 1          | 15    | 1        | 1        | 3             | 2     
+ 1          | 16    | 1        | 1        | 3             | 2     
+ 1          | 17    | 1        | 1        | 3             | 2     
+ 1          | 18    | 1        | 1        | 3             | 2     
+ 1          | 19    | 1        | 1        | 3             | 2     
+ 1          | 20    | 1        | 1        | 3             | 2     
+ 1          | 21    | 1        | 1        | 3             | 2     
+ 1          | 22    | 1        | 1        | 3             | 2     
+ 1          | 23    | 1        | 1        | 3             | 2     
+ 1          | 24    | 1        | 1        | 3             | 2     
+ 1          | 25    | 1        | 1        | 3             | 2     
+ 1          | 26    | 1        | 1        | 3             | 2     
+ 1          | 27    | 1        | 1        | 3             | 2     
+ 1          | 28    | 1        | 1        | 3             | 2     
+ 1          | 29    | 1        | 1        | 3             | 2     
+ 1          | 30    | 1        | 1        | 3             | 2     
+ 1          | 31    | 1        | 1        | 3             | 2     
+ 1          | 32    | 1        | 1        | 3             | 2     
+ 1          | 33    | 1        | 1        | 3             | 2     
+ 1          | 34    | 1        | 1        | 3             | 2     
+ 1          | 35    | 1        | 1        | 3             | 2     
+ 1          | 36    | 1        | 1        | 3             | 2     
+ 1          | 37    | 1        | 1        | 3             | 2     
+ 1          | 38    | 1        | 1        | 3             | 2     
+ 1          | 39    | 1        | 1        | 3             | 2     
+ 1          | 40    | 1        | 1        | 3             | 2     
+ 1          | 41    | 1        | 1        | 3             | 2     
+ 1          | 42    | 1        | 1        | 3             | 2     
+ 1          | 43    | 1        | 1        | 3             | 2     
+ 1          | 44    | 1        | 1        | 3             | 2     
+ 1          | 45    | 1        | 1        | 3             | 2     
+ 1          | 46    | 1        | 1        | 3             | 2     
+ 1          | 47    | 1        | 1        | 3             | 2     
+ 1          | 48    | 1        | 1        | 3             | 2     
+ 1          | 49    | 1        | 1        | 3             | 2     
+ 1          | 50    | 1        | 1        | 3             | 2     
+ 1          | 51    | 1        | 1        | 3             | 2     
+ 1          | 52    | 1        | 1        | 3             | 2     
+ 1          | 53    | 1        | 1        | 3             | 2     
+ 1          | 54    | 1        | 1        | 3             | 2     
+ 1          | 55    | 1        | 1        | 3             | 2     
+ 1          | 56    | 1        | 1        | 3             | 2     
+ 1          | 57    | 1        | 1        | 3             | 2     
+ 1          | 58    | 1        | 1        | 3             | 2     
+ 1          | 59    | 1        | 1        | 3             | 2     
+ 1          | 60    | 1        | 1        | 3             | 2     
+ 1          | 61    | 1        | 1        | 3             | 2     
+ 1          | 62    | 1        | 1        | 3             | 2     
+ 1          | 63    | 1        | 1        | 3             | 2     
+ 1          | 64    | 1        | 1        | 3             | 2     
+ 1          | 65    | 1        | 1        | 3             | 2     
+ 1          | 66    | 1        | 1        | 3             | 2     
+ 1          | 67    | 1        | 1        | 3             | 2     
+ 1          | 68    | 1        | 1        | 3             | 2     
+ 1          | 69    | 1        | 1        | 3             | 2     
+ 1          | 70    | 1        | 1        | 3             | 2     
+ 1          | 71    | 1        | 1        | 3             | 2     
+ 1          | 72    | 1        | 1        | 3             | 2     
+ 1          | 73    | 1        | 1        | 3             | 2     
+ 1          | 74    | 1        | 1        | 3             | 2     
+ 1          | 75    | 1        | 1        | 3             | 2     
+ 1          | 76    | 1        | 1        | 3             | 2     
+ 1          | 77    | 1        | 1        | 3             | 2     
+ 1          | 78    | 1        | 1        | 3             | 2     
+ 1          | 79    | 1        | 1        | 3             | 2     
+ 1          | 80    | 1        | 1        | 3             | 2     
+ 1          | 81    | 1        | 1        | 3             | 2     
+ 1          | 82    | 1        | 1        | 3             | 2     
+ 1          | 83    | 1        | 1        | 3             | 2     
+ 1          | 84    | 1        | 1        | 3             | 2     
+ 1          | 85    | 1        | 1        | 3             | 2     
+ 1          | 86    | 1        | 1        | 3             | 2     
+ 1          | 87    | 1        | 1        | 3             | 2     
+ 1          | 88    | 1        | 1        | 3             | 2     
+ 1          | 89    | 1        | 1        | 3             | 2     
+ 1          | 90    | 1        | 1        | 3             | 2     
+ 1          | 91    | 1        | 1        | 3             | 2     
+ 1          | 92    | 1        | 1        | 3             | 2     
+ 1          | 93    | 1        | 1        | 3             | 2     
+ 1          | 94    | 1        | 1        | 3             | 2     
+ 1          | 95    | 1        | 1        | 3             | 2     
+ 1          | 96    | 1        | 1        | 3             | 2     
+ 1          | 97    | 1        | 1        | 3             | 2     
+ 1          | 98    | 1        | 1        | 3             | 2     
+ 1          | 99    | 1        | 1        | 3             | 2     
+ 1          | 100   | 1        | 1        | 3             | 2     
+ 1          | 101   | 1        | 1        | 3             | 2     
+ 1          | 102   | 1        | 1        | 3             | 2     
+ 1          | 103   | 1        | 1        | 3             | 2     
+ 1          | 104   | 1        | 1        | 3             | 2     
+ 1          | 105   | 1        | 1        | 3             | 2     
+ 1          | 106   | 1        | 1        | 3             | 2     
+ 1          | 107   | 1        | 1        | 3             | 2     
+ 1          | 108   | 1        | 1        | 3             | 2     
+ 1          | 109   | 1        | 1        | 3             | 2     
+ 1          | 110   | 1        | 1        | 3             | 2     
+ 1          | 111   | 1        | 1        | 3             | 2     
+ 1          | 112   | 1        | 1        | 3             | 2     
+ 1          | 113   | 1        | 1        | 3             | 2     
+ 1          | 114   | 1        | 1        | 3             | 2     
+ 1          | 115   | 1        | 1        | 3             | 2     
+ 1          | 116   | 1        | 1        | 3             | 2     
+ 1          | 117   | 1        | 1        | 3             | 2     
+ 1          | 118   | 1        | 1        | 3             | 2     
+(127 rows)
+
+-- Terminate the "old" snapshot.
+1: END;
+END
+
+-- Now VACUUM will be able to compact the segments it wasn't able to and drop
+-- the ones that were AWAITING_DROP.
+VACUUM ao;
+VACUUM
+SELECT * FROM gp_ao_or_aocs_seg('ao') ORDER BY state, segno;
+ segment_id | segno | tupcount | modcount | formatversion | state 
+------------+-------+----------+----------+---------------+-------
+ 1          | 1     | 0        | 2        | 3             | 1     
+ 1          | 2     | 0        | 1        | 3             | 1     
+ 1          | 3     | 0        | 1        | 3             | 1     
+ 1          | 4     | 0        | 1        | 3             | 1     
+ 1          | 5     | 0        | 1        | 3             | 1     
+ 1          | 6     | 0        | 1        | 3             | 1     
+ 1          | 7     | 0        | 1        | 3             | 1     
+ 1          | 8     | 0        | 1        | 3             | 1     
+ 1          | 9     | 0        | 1        | 3             | 1     
+ 1          | 10    | 0        | 1        | 3             | 1     
+ 1          | 11    | 0        | 1        | 3             | 1     
+ 1          | 12    | 0        | 1        | 3             | 1     
+ 1          | 13    | 0        | 1        | 3             | 1     
+ 1          | 14    | 0        | 1        | 3             | 1     
+ 1          | 15    | 0        | 1        | 3             | 1     
+ 1          | 16    | 0        | 1        | 3             | 1     
+ 1          | 17    | 0        | 1        | 3             | 1     
+ 1          | 18    | 0        | 1        | 3             | 1     
+ 1          | 19    | 0        | 1        | 3             | 1     
+ 1          | 20    | 0        | 1        | 3             | 1     
+ 1          | 21    | 0        | 1        | 3             | 1     
+ 1          | 22    | 0        | 1        | 3             | 1     
+ 1          | 23    | 0        | 1        | 3             | 1     
+ 1          | 24    | 0        | 1        | 3             | 1     
+ 1          | 25    | 0        | 1        | 3             | 1     
+ 1          | 26    | 0        | 1        | 3             | 1     
+ 1          | 27    | 0        | 1        | 3             | 1     
+ 1          | 28    | 0        | 1        | 3             | 1     
+ 1          | 29    | 0        | 1        | 3             | 1     
+ 1          | 30    | 0        | 1        | 3             | 1     
+ 1          | 31    | 0        | 1        | 3             | 1     
+ 1          | 32    | 0        | 1        | 3             | 1     
+ 1          | 33    | 0        | 1        | 3             | 1     
+ 1          | 34    | 0        | 1        | 3             | 1     
+ 1          | 35    | 0        | 1        | 3             | 1     
+ 1          | 36    | 0        | 1        | 3             | 1     
+ 1          | 37    | 0        | 1        | 3             | 1     
+ 1          | 38    | 0        | 1        | 3             | 1     
+ 1          | 39    | 0        | 1        | 3             | 1     
+ 1          | 40    | 0        | 1        | 3             | 1     
+ 1          | 41    | 0        | 1        | 3             | 1     
+ 1          | 42    | 0        | 1        | 3             | 1     
+ 1          | 43    | 0        | 1        | 3             | 1     
+ 1          | 44    | 0        | 1        | 3             | 1     
+ 1          | 45    | 0        | 1        | 3             | 1     
+ 1          | 46    | 0        | 1        | 3             | 1     
+ 1          | 47    | 0        | 1        | 3             | 1     
+ 1          | 48    | 0        | 1        | 3             | 1     
+ 1          | 49    | 0        | 1        | 3             | 1     
+ 1          | 50    | 0        | 1        | 3             | 1     
+ 1          | 51    | 0        | 1        | 3             | 1     
+ 1          | 52    | 0        | 1        | 3             | 1     
+ 1          | 53    | 0        | 1        | 3             | 1     
+ 1          | 54    | 0        | 1        | 3             | 1     
+ 1          | 55    | 0        | 1        | 3             | 1     
+ 1          | 56    | 0        | 1        | 3             | 1     
+ 1          | 57    | 0        | 1        | 3             | 1     
+ 1          | 58    | 0        | 1        | 3             | 1     
+ 1          | 59    | 0        | 1        | 3             | 1     
+ 1          | 60    | 0        | 1        | 3             | 1     
+ 1          | 61    | 0        | 1        | 3             | 1     
+ 1          | 62    | 0        | 1        | 3             | 1     
+ 1          | 63    | 0        | 1        | 3             | 1     
+ 1          | 64    | 0        | 1        | 3             | 1     
+ 1          | 65    | 0        | 1        | 3             | 1     
+ 1          | 66    | 0        | 1        | 3             | 1     
+ 1          | 67    | 0        | 1        | 3             | 1     
+ 1          | 68    | 0        | 1        | 3             | 1     
+ 1          | 69    | 0        | 1        | 3             | 1     
+ 1          | 70    | 0        | 1        | 3             | 1     
+ 1          | 71    | 0        | 1        | 3             | 1     
+ 1          | 72    | 0        | 1        | 3             | 1     
+ 1          | 73    | 0        | 1        | 3             | 1     
+ 1          | 74    | 0        | 1        | 3             | 1     
+ 1          | 75    | 0        | 1        | 3             | 1     
+ 1          | 76    | 0        | 1        | 3             | 1     
+ 1          | 77    | 0        | 1        | 3             | 1     
+ 1          | 78    | 0        | 1        | 3             | 1     
+ 1          | 79    | 0        | 1        | 3             | 1     
+ 1          | 80    | 0        | 1        | 3             | 1     
+ 1          | 81    | 0        | 1        | 3             | 1     
+ 1          | 82    | 0        | 1        | 3             | 1     
+ 1          | 83    | 0        | 1        | 3             | 1     
+ 1          | 84    | 0        | 1        | 3             | 1     
+ 1          | 85    | 0        | 1        | 3             | 1     
+ 1          | 86    | 0        | 1        | 3             | 1     
+ 1          | 87    | 0        | 1        | 3             | 1     
+ 1          | 88    | 0        | 1        | 3             | 1     
+ 1          | 89    | 0        | 1        | 3             | 1     
+ 1          | 90    | 0        | 1        | 3             | 1     
+ 1          | 91    | 0        | 1        | 3             | 1     
+ 1          | 92    | 0        | 1        | 3             | 1     
+ 1          | 93    | 0        | 1        | 3             | 1     
+ 1          | 94    | 0        | 1        | 3             | 1     
+ 1          | 95    | 0        | 1        | 3             | 1     
+ 1          | 96    | 0        | 1        | 3             | 1     
+ 1          | 97    | 0        | 1        | 3             | 1     
+ 1          | 98    | 0        | 1        | 3             | 1     
+ 1          | 99    | 0        | 1        | 3             | 1     
+ 1          | 100   | 0        | 1        | 3             | 1     
+ 1          | 101   | 0        | 1        | 3             | 1     
+ 1          | 102   | 0        | 1        | 3             | 1     
+ 1          | 103   | 0        | 1        | 3             | 1     
+ 1          | 104   | 0        | 1        | 3             | 1     
+ 1          | 105   | 0        | 1        | 3             | 1     
+ 1          | 106   | 0        | 1        | 3             | 1     
+ 1          | 107   | 0        | 1        | 3             | 1     
+ 1          | 108   | 0        | 1        | 3             | 1     
+ 1          | 109   | 0        | 1        | 3             | 1     
+ 1          | 110   | 0        | 1        | 3             | 1     
+ 1          | 111   | 0        | 1        | 3             | 1     
+ 1          | 112   | 0        | 1        | 3             | 1     
+ 1          | 113   | 0        | 1        | 3             | 1     
+ 1          | 114   | 0        | 1        | 3             | 1     
+ 1          | 115   | 0        | 1        | 3             | 1     
+ 1          | 116   | 0        | 1        | 3             | 1     
+ 1          | 117   | 0        | 1        | 3             | 1     
+ 1          | 118   | 0        | 1        | 3             | 1     
+ 1          | 119   | 0        | 1        | 3             | 1     
+ 1          | 120   | 0        | 1        | 3             | 1     
+ 1          | 121   | 0        | 1        | 3             | 1     
+ 1          | 122   | 0        | 1        | 3             | 1     
+ 1          | 123   | 0        | 1        | 3             | 1     
+ 1          | 124   | 0        | 1        | 3             | 1     
+ 1          | 125   | 0        | 1        | 3             | 1     
+ 1          | 126   | 0        | 1        | 3             | 1     
+ 1          | 127   | 0        | 1        | 3             | 1     
+(127 rows)
+
 ALTER RESOURCE GROUP admin_group SET CONCURRENCY 20;
 ALTER


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to