未验证 提交 bc733d32 编写于 作者: X xiong-gang 提交者: GitHub

misc cleanup on resource group DDL function

* Remove the double-link list for DDL callback function 
* Retire ResGroupOpts.
* Remove CommandCounterIncrement() in AlterResourceGroup as we no longer
query pg_resgroupcapability in the callback function.
* alter memory_spill_ratio don't wakeup slots
* acquire AccessExlusiveLock on pg_resgroupcapability in CreateResGroup
* Change interface of GetResGroupCapabilities
* update test cases
Signed-off-by: NNing Yu <nyu@pivotal.io>
上级 c7798cec
此差异已折叠。
......@@ -391,15 +391,13 @@ error_out:
* Allocate a resource group entry from a hash table
*/
void
AllocResGroupEntry(Oid groupId, const ResGroupOpts *opts)
AllocResGroupEntry(Oid groupId, const ResGroupCaps *caps)
{
ResGroupData *group;
ResGroupCaps caps;
LWLockAcquire(ResGroupLock, LW_EXCLUSIVE);
ResGroupOptsToCaps(opts, &caps);
group = createGroup(groupId, &caps);
group = createGroup(groupId, caps);
Assert(group != NULL);
LWLockRelease(ResGroupLock);
......@@ -422,14 +420,11 @@ InitResGroups(void)
Relation relResGroup;
Relation relResGroupCapability;
on_shmem_exit(AtProcExit_ResGroup, 0);
/*
* On master, the postmaster does the initialization
* On segments, the first QE does the initialization
* On master and segments, the first backend does the initialization.
*/
if (Gp_role == GP_ROLE_DISPATCH && GpIdentity.segindex != MASTER_CONTENT_ID)
return;
on_shmem_exit(AtProcExit_ResGroup, 0);
if (pResGroupControl->loaded)
return;
/*
......@@ -480,8 +475,8 @@ InitResGroups(void)
int cpuRateLimit;
Oid groupId = HeapTupleGetOid(tuple);
GetResGroupCapabilities(groupId, &caps);
cpuRateLimit = caps.cpuRateLimit.value;
GetResGroupCapabilities(relResGroupCapability, groupId, &caps);
cpuRateLimit = caps.cpuRateLimit;
group = createGroup(groupId, &caps);
Assert(group != NULL);
......@@ -499,6 +494,11 @@ InitResGroups(void)
exit:
LWLockRelease(ResGroupLock);
/*
* release lock here to guarantee we have no lock held when acquiring
* resource group slot
*/
heap_close(relResGroup, AccessShareLock);
heap_close(relResGroupCapability, AccessShareLock);
CurrentResourceOwner = NULL;
......@@ -654,9 +654,9 @@ ResGroupAlterOnCommit(Oid groupId,
if (limittype == RESGROUP_LIMIT_TYPE_CPU)
{
ResGroupOps_SetCpuRateLimit(groupId, caps->cpuRateLimit.proposed);
ResGroupOps_SetCpuRateLimit(groupId, caps->cpuRateLimit);
}
else
else if (limittype != RESGROUP_LIMIT_TYPE_MEMORY_SPILL_RATIO)
{
shouldWakeUp = groupApplyMemCaps(group, caps);
......@@ -895,8 +895,8 @@ ResGroupReserveMemory(int32 memoryChunks, int32 overuseChunks, bool *waiverUsed)
selfUnassignDroppedGroup();
self->doMemCheck = false;
LOG_RESGROUP_DEBUG(LOG, "resource group is concurrently dropped while reserving memory: "
"dropped group=%d, my group=%d",
LOG_RESGROUP_DEBUG(LOG, "resource group is concurrently dropped while "
"reserving memory: dropped group=%d, my group=%d",
groupGroupId, selfGroupId);
return true;
......@@ -967,8 +967,8 @@ ResGroupReleaseMemory(int32 memoryChunks)
selfUnassignDroppedGroup();
self->doMemCheck = false;
LOG_RESGROUP_DEBUG(LOG, "resource group is concurrently dropped while releasing memory: "
"dropped group=%d, my group=%d",
LOG_RESGROUP_DEBUG(LOG, "resource group is concurrently dropped while "
"releasing memory: dropped group=%d, my group=%d",
groupGroupId, selfGroupId);
return;
......@@ -979,101 +979,6 @@ ResGroupReleaseMemory(int32 memoryChunks)
groupDecMemUsage(group, slot, memoryChunks);
}
/*
* Decide the new resource group concurrency capabilities
* of pg_resgroupcapability.
*
* The decision is based on current runtime information:
* - 'proposed' will always be set to the latest setting;
* - 'value' will be set to the most recent version of concurrency
* with which current nRunning doesn't exceed the limit;
*/
void
ResGroupDecideConcurrencyCaps(Oid groupId,
ResGroupCaps *caps,
const ResGroupOpts *opts)
{
ResGroupData *group;
/* If resource group is not in use we can always pick the new settings. */
if (!IsResGroupActivated())
{
caps->concurrency.value = opts->concurrency;
caps->concurrency.proposed = opts->concurrency;
return;
}
LWLockAcquire(ResGroupLock, LW_SHARED);
group = groupHashFind(groupId, true);
/*
* If the runtime usage information doesn't exceed the new setting
* then we can pick this setting as the new 'value'.
*/
if (group->nRunning <= opts->concurrency)
caps->concurrency.value = opts->concurrency;
/* 'proposed' is always set with latest setting */
caps->concurrency.proposed = opts->concurrency;
LWLockRelease(ResGroupLock);
}
/*
* Decide the new resource group memory capabilities
* of pg_resgroupcapability.
*
* The decision is based on current runtime information:
* - 'proposed' will always be set to the latest setting;
* - 'value' will be set to the most recent version of memory settings
* with which current memory quota usage and memory shared usage
* doesn't exceed the limit;
*/
void
ResGroupDecideMemoryCaps(int groupId,
ResGroupCaps *caps,
const ResGroupOpts *opts)
{
ResGroupData *group;
ResGroupCaps capsNew;
/* If resource group is not in use we can always pick the new settings. */
if (!IsResGroupActivated())
{
caps->memLimit.value = opts->memLimit;
caps->memLimit.proposed = opts->memLimit;
caps->memSharedQuota.value = opts->memSharedQuota;
caps->memSharedQuota.proposed = opts->memSharedQuota;
return;
}
LWLockAcquire(ResGroupLock, LW_SHARED);
group = groupHashFind(groupId, true);
ResGroupOptsToCaps(opts, &capsNew);
/*
* If the runtime usage information doesn't exceed the new settings
* then we can pick these settings as the new 'value's.
*/
if (opts->memLimit <= caps->memLimit.proposed &&
group->memQuotaUsed <= groupGetMemQuotaExpected(&capsNew) &&
group->memSharedUsage <= groupGetMemSharedExpected(&capsNew))
{
caps->memLimit.value = opts->memLimit;
caps->memSharedQuota.value = opts->memSharedQuota;
}
/* 'proposed' is always set with latest setting */
caps->memSharedQuota.proposed = opts->memSharedQuota;
caps->memLimit.proposed = opts->memLimit;
LWLockRelease(ResGroupLock);
}
int64
ResourceGroupGetQueryMemoryLimit(void)
{
......@@ -1350,7 +1255,7 @@ groupGetSlot(ResGroupData *group)
caps = &group->caps;
/* First check if the concurrency limit is reached */
if (group->nRunning >= caps->concurrency.proposed)
if (group->nRunning >= caps->concurrency)
return NULL;
if (!groupReserveMemQuota(group))
......@@ -1632,14 +1537,14 @@ groupApplyMemCaps(ResGroupData *group, const ResGroupCaps *caps)
/* memQuotaAvailable is the total free non-shared quota */
memQuotaAvailable = group->memQuotaGranted - group->memQuotaUsed;
if (caps->concurrency.proposed > group->nRunning)
if (caps->concurrency > group->nRunning)
{
/*
* memQuotaNeeded is the total non-shared quota needed
* by all the free slots
*/
memQuotaNeeded = slotGetMemQuotaExpected(caps) *
(caps->concurrency.proposed - group->nRunning);
(caps->concurrency - group->nRunning);
/*
* if memQuotaToFree > 0 then we can safely release these
......@@ -1794,7 +1699,7 @@ static int32
groupGetMemExpected(const ResGroupCaps *caps)
{
Assert(pResGroupControl->totalChunks > 0);
return pResGroupControl->totalChunks * caps->memLimit.proposed / 100;
return pResGroupControl->totalChunks * caps->memLimit / 100;
}
/*
......@@ -1803,11 +1708,11 @@ groupGetMemExpected(const ResGroupCaps *caps)
static int32
groupGetMemQuotaExpected(const ResGroupCaps *caps)
{
if (caps->concurrency.proposed > 0)
return slotGetMemQuotaExpected(caps) * caps->concurrency.proposed;
if (caps->concurrency > 0)
return slotGetMemQuotaExpected(caps) * caps->concurrency;
else
return groupGetMemExpected(caps) *
(100 - caps->memSharedQuota.proposed) / 100;
(100 - caps->memSharedQuota) / 100;
}
/*
......@@ -1834,10 +1739,10 @@ groupGetMemSpillTotal(const ResGroupCaps *caps)
static int32
slotGetMemQuotaExpected(const ResGroupCaps *caps)
{
Assert(caps->concurrency.proposed != 0);
Assert(caps->concurrency != 0);
return groupGetMemExpected(caps) *
(100 - caps->memSharedQuota.proposed) / 100 /
caps->concurrency.proposed;
(100 - caps->memSharedQuota) / 100 /
caps->concurrency;
}
/*
......@@ -1846,8 +1751,8 @@ slotGetMemQuotaExpected(const ResGroupCaps *caps)
static int32
slotGetMemSpill(const ResGroupCaps *caps)
{
Assert(caps->concurrency.proposed != 0);
return groupGetMemSpillTotal(caps) / caps->concurrency.proposed;
Assert(caps->concurrency != 0);
return groupGetMemSpillTotal(caps) / caps->concurrency;
}
/*
......@@ -1958,7 +1863,7 @@ mempoolAutoRelease(ResGroupData *group, ResGroupSlotData *slot)
memQuotaNeedFree = group->memQuotaGranted - groupGetMemQuotaExpected(caps);
memQuotaToFree = memQuotaNeedFree > 0 ? Min(memQuotaNeedFree, slot->memQuota) : 0;
if (caps->concurrency.proposed > 0)
if (caps->concurrency > 0)
{
/*
* Under this situation, when this slot is released,
......@@ -2015,8 +1920,12 @@ addTotalQueueDuration(ResGroupData *group)
TimestampTz start = pgstat_fetch_resgroup_queue_timestamp();
TimestampTz now = GetCurrentTimestamp();
Datum durationDatum = DirectFunctionCall2(timestamptz_age, TimestampTzGetDatum(now), TimestampTzGetDatum(start));
Datum sumDatum = DirectFunctionCall2(interval_pl, IntervalPGetDatum(&group->totalQueuedTime), durationDatum);
Datum durationDatum = DirectFunctionCall2(timestamptz_age,
TimestampTzGetDatum(now),
TimestampTzGetDatum(start));
Datum sumDatum = DirectFunctionCall2(interval_pl,
IntervalPGetDatum(&group->totalQueuedTime),
durationDatum);
memcpy(&group->totalQueuedTime, DatumGetIntervalP(sumDatum), sizeof(Interval));
}
......@@ -2068,11 +1977,8 @@ SerializeResGroupInfo(StringInfo str)
for (i = 0; i < RESGROUP_LIMIT_TYPE_COUNT; i++)
{
tmp = htonl(caps[i].value);
appendBinaryStringInfo(str, (char *) &tmp, sizeof(caps[i].value));
tmp = htonl(caps[i].proposed);
appendBinaryStringInfo(str, (char *) &tmp, sizeof(caps[i].proposed));
tmp = htonl(caps[i]);
appendBinaryStringInfo(str, (char *) &tmp, sizeof(caps[i]));
}
}
......@@ -2098,13 +2004,9 @@ DeserializeResGroupInfo(struct ResGroupCaps *capsOut,
for (i = 0; i < RESGROUP_LIMIT_TYPE_COUNT; i++)
{
memcpy(&tmp, ptr, sizeof(caps[i].value));
caps[i].value = ntohl(tmp);
ptr += sizeof(caps[i].value);
memcpy(&tmp, ptr, sizeof(caps[i].proposed));
caps[i].proposed = ntohl(tmp);
ptr += sizeof(caps[i].proposed);
memcpy(&tmp, ptr, sizeof(caps[i]));
caps[i] = ntohl(tmp);
ptr += sizeof(caps[i]);
}
Assert(len == ptr - buf);
......@@ -2314,7 +2216,7 @@ SwitchResGroupOnSegment(const char *buf, int len)
/* Init self */
Assert(host_segments > 0);
Assert(caps.concurrency.proposed > 0);
Assert(caps.concurrency > 0);
selfSetGroup(group);
self->caps = caps;
......@@ -2489,7 +2391,10 @@ groupHashRemove(Oid groupId)
Assert(LWLockHeldExclusiveByMe(ResGroupLock));
entry = (ResGroupHashEntry*)hash_search(pResGroupControl->htbl, (void *) &groupId, HASH_FIND, &found);
entry = (ResGroupHashEntry*)hash_search(pResGroupControl->htbl,
(void *) &groupId,
HASH_REMOVE,
&found);
if (!found)
ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
......@@ -2502,8 +2407,6 @@ groupHashRemove(Oid groupId)
group->memSharedGranted = 0;
group->groupId = InvalidOid;
hash_search(pResGroupControl->htbl, (void *) &groupId, HASH_REMOVE, &found);
wakeupGroups(groupId);
}
......@@ -2595,8 +2498,9 @@ groupSetMemorySpillRatio(const ResGroupCaps *caps)
{
char value[64];
snprintf(value, sizeof(value), "%d", caps->memSpillRatio.proposed);
set_config_option("memory_spill_ratio", value, PGC_USERSET, PGC_S_RESGROUP, GUC_ACTION_SET, true);
snprintf(value, sizeof(value), "%d", caps->memSpillRatio);
set_config_option("memory_spill_ratio", value, PGC_USERSET, PGC_S_RESGROUP,
GUC_ACTION_SET, true);
}
void
......@@ -2605,41 +2509,10 @@ ResGroupGetMemInfo(int *memLimit, int *slotQuota, int *sharedQuota)
const ResGroupCaps *caps = &self->caps;
*memLimit = groupGetMemExpected(caps);
*slotQuota = caps->concurrency.proposed ? slotGetMemQuotaExpected(caps) : -1;
*slotQuota = caps->concurrency ? slotGetMemQuotaExpected(caps) : -1;
*sharedQuota = groupGetMemSharedExpected(caps);
}
/*
* Convert ResGroupOpts to ResGroupCaps
*/
void
ResGroupOptsToCaps(const ResGroupOpts *optsIn, ResGroupCaps *capsOut)
{
int i;
ResGroupCap *caps = (ResGroupCap *) capsOut;
const int32 *opts = (int32 *) optsIn;
for (i = 0; i < RESGROUP_LIMIT_TYPE_COUNT; i++)
{
caps[i].value = opts[i];
caps[i].proposed = opts[i];
}
}
/*
* Convert ResGroupCaps to ResGroupOpts
*/
void
ResGroupCapsToOpts(const ResGroupCaps *capsIn, ResGroupOpts *optsOut)
{
int i;
const ResGroupCap *caps = (ResGroupCap *) capsIn;
int32 *opts = (int32 *) optsOut;
for (i = 0; i < RESGROUP_LIMIT_TYPE_COUNT; i++)
opts[i] = caps[i].proposed;
}
/*
* Validate the consistency of the resgroup information in self.
*
......@@ -3288,7 +3161,7 @@ resgroupDumpCaps(StringInfo str, ResGroupCap *caps)
appendStringInfo(str, "\"caps\":[");
for (i = 1; i < RESGROUP_LIMIT_TYPE_COUNT; i++)
{
appendStringInfo(str, "{\"value\":%d,\"proposed\":%d}", caps[i].value, caps[i].proposed);
appendStringInfo(str, "{\"%d\":%d}", i, caps[i]);
if (i < RESGROUP_LIMIT_TYPE_COUNT - 1)
appendStringInfo(str, ",");
}
......
......@@ -636,11 +636,11 @@ dumpResGroups(PGconn *conn)
i_memory_spill_ratio;
printfPQExpBuffer(buf, "SELECT g.rsgname AS groupname, "
"t1.proposed AS concurrency, "
"t2.proposed AS cpu_rate_limit, "
"t3.proposed AS memory_limit, "
"t4.proposed AS memory_shared_quota, "
"t5.proposed AS memory_spill_ratio "
"t1.value AS concurrency, "
"t2.value AS cpu_rate_limit, "
"t3.value AS memory_limit, "
"t4.value AS memory_shared_quota, "
"t5.value AS memory_spill_ratio "
"FROM pg_resgroup g, "
"pg_resgroupcapability t1, "
"pg_resgroupcapability t2, "
......
......@@ -16,8 +16,7 @@
#include "nodes/parsenodes.h"
#include "utils/resgroup.h"
#define RESGROUP_MAX_MEMORY_LIMIT (100)
#include "utils/relcache.h"
extern void CreateResourceGroup(CreateResourceGroupStmt *stmt);
extern void DropResourceGroup(DropResourceGroupStmt *stmt);
......@@ -27,7 +26,9 @@ extern void AlterResourceGroup(AlterResourceGroupStmt *stmt);
extern Oid GetResGroupIdForName(char *name, LOCKMODE lockmode);
extern char *GetResGroupNameForId(Oid oid, LOCKMODE lockmode);
extern Oid GetResGroupIdForRole(Oid roleid);
extern void GetResGroupCapabilities(Oid groupId, ResGroupCaps *resgroupCaps);
extern void GetResGroupCapabilities(Relation rel,
Oid groupId,
ResGroupCaps *resgroupCaps);
extern void AtEOXact_ResGroup(bool isCommit);
#endif /* RESGROUPCMDS_H */
......@@ -27,11 +27,7 @@
/*
* Resource group capability.
*/
typedef struct ResGroupCap
{
int value;
int proposed;
} ResGroupCap;
typedef int32 ResGroupCap;
/*
* Resource group capabilities.
......@@ -60,33 +56,6 @@ typedef struct ResGroupCaps
ResGroupCap memSpillRatio;
} ResGroupCaps;
/*
* Resource group setting options.
*
* These can represent the effective settings of a resource group,
* or the new settings from ALTER RESOURCE GROUP syntax.
*
* The properties must be in the same order as ResGroupLimitType.
*
* This struct can also be converted to an array of int32 so the fields
* can be accessed via index and iterated with loop.
*
* ResGroupOpts opts;
* int32 *array = (int32 *) &opts;
* opts.concurrency = 1;
* array[RESGROUP_LIMIT_TYPE_CONCURRENCY] = 2;
* Assert(opts.concurrency == 2);
*/
typedef struct ResGroupOpts
{
int32 __unknown; /* placeholder, do not use it */
int32 concurrency;
int32 cpuRateLimit;
int32 memLimit;
int32 memSharedQuota;
int32 memSpillRatio;
} ResGroupOpts;
/*
* GUC variables.
*/
......@@ -134,7 +103,7 @@ extern void ResGroupControlInit(void);
/* Load resource group information from catalog */
extern void InitResGroups(void);
extern void AllocResGroupEntry(Oid groupId, const ResGroupOpts *opts);
extern void AllocResGroupEntry(Oid groupId, const ResGroupCaps *caps);
extern void SerializeResGroupInfo(StringInfo str);
extern void DeserializeResGroupInfo(struct ResGroupCaps *capsOut,
......@@ -151,8 +120,6 @@ extern void SwitchResGroupOnSegment(const char *buf, int len);
/* Retrieve statistic information of type from resource group */
extern Datum ResGroupGetStat(Oid groupId, ResGroupStatType type);
extern void ResGroupOptsToCaps(const ResGroupOpts *optsIn, ResGroupCaps *capsOut);
extern void ResGroupCapsToOpts(const ResGroupCaps *capsIn, ResGroupOpts *optsOut);
extern void ResGroupDumpMemoryInfo(void);
/* Check the memory limit of resource group */
......@@ -166,12 +133,6 @@ extern void ResGroupAlterOnCommit(Oid groupId,
ResGroupLimitType limittype,
const ResGroupCaps *caps);
extern void ResGroupCheckForDrop(Oid groupId, char *name);
extern void ResGroupDecideMemoryCaps(int groupId,
ResGroupCaps *caps,
const ResGroupOpts *opts);
extern void ResGroupDecideConcurrencyCaps(Oid groupId,
ResGroupCaps *caps,
const ResGroupOpts *opts);
extern int32 ResGroupGetVmemLimitChunks(void);
extern int32 ResGroupGetVmemChunkSizeInBits(void);
......
......@@ -60,7 +60,7 @@ rg_spill_test|20 |20 |81
-- negative: memory_spill_ratio is larger than RESGROUP_MAX_MEMORY_SPILL_RATIO
ALTER RESOURCE GROUP rg_spill_test SET MEMORY_SPILL_RATIO 101;
ERROR: memory spill ratio cannot be greater than 100
ERROR: memory_spill_ratio range is [0, 100]
SELECT * FROM rg_spill_status;
groupname |memory_shared_quota|proposed_memory_shared_quota|memory_spill_ratio|proposed_memory_spill_ratio
-------------+-------------------+----------------------------+------------------+---------------------------
......
......@@ -167,7 +167,7 @@ ALTER
SELECT concurrency,proposed_concurrency FROM gp_toolkit.gp_resgroup_config WHERE groupname='rg_concurrency_test';
concurrency|proposed_concurrency
-----------+--------------------
3 |2
2 |2
(1 row)
-- When one transaction is finished, queueing transaction won't be woken up. There're 2 running transactions and 1 queueing transaction.
24:END;
......
......@@ -270,9 +270,9 @@ CREATE
ALTER RESOURCE GROUP admin_group SET CONCURRENCY 0;
ERROR: admin_group must have at least one concurrency
ALTER RESOURCE GROUP rg_test_group SET CONCURRENCY -1;
ERROR: concurrency limit cannot be less than 0
ERROR: concurrency range is [0, 'max_connections']
ALTER RESOURCE GROUP rg_test_group SET CONCURRENCY 26;
ERROR: concurrency limit cannot be greater than 'max_connections'
ERROR: concurrency range is [0, 'max_connections']
ALTER RESOURCE GROUP rg_test_group SET CONCURRENCY -0.5;
ERROR: syntax error at or near "0.5"
LINE 1: ALTER RESOURCE GROUP rg_test_group SET CONCURRENCY -0.5;
......@@ -310,9 +310,9 @@ ERROR: syntax error at or near "0.1"
LINE 1: ALTER RESOURCE GROUP rg_test_group SET CPU_RATE_LIMIT -0.1;
^
ALTER RESOURCE GROUP rg_test_group SET CPU_RATE_LIMIT -1;
ERROR: cpu rate limit cannot be less than 1
ERROR: cpu_rate_limit range is [1, 100]
ALTER RESOURCE GROUP rg_test_group SET CPU_RATE_LIMIT 0;
ERROR: cpu rate limit cannot be less than 1
ERROR: cpu_rate_limit range is [1, 100]
ALTER RESOURCE GROUP rg_test_group SET CPU_RATE_LIMIT 0.7;
ERROR: syntax error at or near "0.7"
LINE 1: ALTER RESOURCE GROUP rg_test_group SET CPU_RATE_LIMIT 0.7;
......
......@@ -40,9 +40,9 @@ ALTER
ALTER RESOURCE GROUP rg_spill_test SET MEMORY_SPILL_RATIO 100;
ALTER
ALTER RESOURCE GROUP rg_spill_test SET MEMORY_SPILL_RATIO -1;
ERROR: memory spill ratio cannot be less than 0
ERROR: memory_spill_ratio range is [0, 100]
ALTER RESOURCE GROUP rg_spill_test SET MEMORY_SPILL_RATIO 101;
ERROR: memory spill ratio cannot be greater than 100
ERROR: memory_spill_ratio range is [0, 100]
DROP RESOURCE GROUP rg_spill_test;
DROP
......
......@@ -94,7 +94,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|60 |60 |70 |80
rg1_memory_test|60 |60 |80 |80
(1 row)
1q: ... <quitting>
......@@ -227,7 +227,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|50 |60 |60 |60
rg1_memory_test|60 |60 |60 |60
(1 row)
ALTER RESOURCE GROUP rg1_memory_test SET MEMORY_LIMIT 40;
......@@ -253,7 +253,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|40 |10 |60 |60
rg1_memory_test|10 |10 |60 |60
(1 row)
--
......@@ -291,7 +291,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|40 |40 |60 |20
rg1_memory_test|40 |40 |20 |20
(1 row)
ALTER RESOURCE GROUP rg1_memory_test SET MEMORY_LIMIT 30;
......@@ -302,7 +302,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|40 |30 |60 |20
rg1_memory_test|30 |30 |20 |20
(1 row)
1q: ... <quitting>
......@@ -345,7 +345,7 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |40 |0 |0
rg1_memory_test|40 |40 |0 |0
rg2_memory_test|20 |20 |0 |0
(2 rows)
......@@ -410,8 +410,8 @@ BEGIN
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -431,8 +431,8 @@ rg2_memory_test| |<IDLE> in transaction
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -451,8 +451,8 @@ BEGIN
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -536,8 +536,8 @@ SET
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -557,8 +557,8 @@ END
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -581,8 +581,8 @@ BEGIN
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |15 |0 |0
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|15 |15 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -666,8 +666,8 @@ SET
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |20 |60 |60
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|20 |20 |60 |60
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -693,7 +693,7 @@ SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|20 |20 |30 |30
rg2_memory_test|30 |40 |0 |0
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -790,8 +790,8 @@ SET
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |20 |90 |90
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|20 |20 |90 |90
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -810,8 +810,8 @@ ALTER
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |20 |90 |30
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|20 |20 |30 |30
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......@@ -834,8 +834,8 @@ BEGIN
SELECT * FROM rg_mem_status;
groupname |memory_limit|proposed_memory_limit|memory_shared_quota|proposed_memory_shared_quota
---------------+------------+---------------------+-------------------+----------------------------
rg1_memory_test|30 |20 |90 |30
rg2_memory_test|30 |40 |0 |0
rg1_memory_test|20 |20 |30 |30
rg2_memory_test|40 |40 |0 |0
(2 rows)
SELECT * FROM rg_activity_status;
rsgname |waiting_reason|current_query
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册