Use spinlock instead of lwlock per tenant

pull/6868/head
Gokhan Gulbiz 2023-04-19 10:09:23 +03:00
parent 08e2820c67
commit b437aa9e52
No known key found for this signature in database
GPG Key ID: 608EF06B6BD1B45B
2 changed files with 6 additions and 15 deletions

View File

@ -50,7 +50,6 @@ static clock_t QueryEndClock = { 0 };
static const char *SharedMemoryNameForMultiTenantMonitor = static const char *SharedMemoryNameForMultiTenantMonitor =
"Shared memory for multi tenant monitor"; "Shared memory for multi tenant monitor";
static char *TenantTrancheName = "Tenant Tranche";
static char *MonitorTrancheName = "Multi Tenant Monitor Tranche"; static char *MonitorTrancheName = "Multi Tenant Monitor Tranche";
static shmem_startup_hook_type prev_shmem_startup_hook = NULL; static shmem_startup_hook_type prev_shmem_startup_hook = NULL;
@ -358,13 +357,13 @@ AttributeMetricsIfApplicable()
if (currentTenantIndex != -1) if (currentTenantIndex != -1)
{ {
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex]; TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE); SpinLockAcquire(&tenantStats->lock);
UpdatePeriodsIfNecessary(tenantStats, queryTime); UpdatePeriodsIfNecessary(tenantStats, queryTime);
ReduceScoreIfNecessary(tenantStats, queryTime); ReduceScoreIfNecessary(tenantStats, queryTime);
RecordTenantStats(tenantStats, queryTime); RecordTenantStats(tenantStats, queryTime);
LWLockRelease(&tenantStats->lock); SpinLockRelease(&tenantStats->lock);
} }
else else
{ {
@ -385,13 +384,13 @@ AttributeMetricsIfApplicable()
if (currentTenantIndex != -1) if (currentTenantIndex != -1)
{ {
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex]; TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE); SpinLockAcquire(&tenantStats->lock);
UpdatePeriodsIfNecessary(tenantStats, queryTime); UpdatePeriodsIfNecessary(tenantStats, queryTime);
ReduceScoreIfNecessary(tenantStats, queryTime); ReduceScoreIfNecessary(tenantStats, queryTime);
RecordTenantStats(tenantStats, queryTime); RecordTenantStats(tenantStats, queryTime);
LWLockRelease(&tenantStats->lock); SpinLockRelease(&tenantStats->lock);
} }
} }
LWLockRelease(&monitor->lock); LWLockRelease(&monitor->lock);
@ -659,14 +658,7 @@ CreateTenantStats(MultiTenantMonitor *monitor, TimestampTz queryTime)
strcpy_s(monitor->tenants[tenantIndex].tenantAttribute, strcpy_s(monitor->tenants[tenantIndex].tenantAttribute,
sizeof(monitor->tenants[tenantIndex].tenantAttribute), AttributeToTenant); sizeof(monitor->tenants[tenantIndex].tenantAttribute), AttributeToTenant);
monitor->tenants[tenantIndex].colocationGroupId = AttributeToColocationGroupId; monitor->tenants[tenantIndex].colocationGroupId = AttributeToColocationGroupId;
SpinLockInit(&monitor->tenants[tenantIndex].lock);
monitor->tenants[tenantIndex].namedLockTranche.trancheId = LWLockNewTrancheId();
monitor->tenants[tenantIndex].namedLockTranche.trancheName = TenantTrancheName;
LWLockRegisterTranche(monitor->tenants[tenantIndex].namedLockTranche.trancheId,
monitor->tenants[tenantIndex].namedLockTranche.trancheName);
LWLockInitialize(&monitor->tenants[tenantIndex].lock,
monitor->tenants[tenantIndex].namedLockTranche.trancheId);
monitor->tenantCount++; monitor->tenantCount++;

View File

@ -70,8 +70,7 @@ typedef struct TenantStats
/* /*
* Locks needed to update this tenant's statistics. * Locks needed to update this tenant's statistics.
*/ */
NamedLWLockTranche namedLockTranche; slock_t lock;
LWLock lock;
} TenantStats; } TenantStats;
/* /*