!896 修复walwrite线程占用CPU较高的问题
Merge pull request !896 from movead/walwrite_high_cpu_issue
This commit is contained in:
@ -102,6 +102,20 @@ static void knl_g_ckpt_init(knl_g_ckpt_context* ckpt_cxt)
|
||||
|
||||
static void knl_g_wal_init(knl_g_wal_context *const wal_cxt)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = pthread_condattr_init(&wal_cxt->criticalEntryAtt);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to init conattr for walwrite");
|
||||
}
|
||||
ret = pthread_condattr_setclock(&wal_cxt->criticalEntryAtt, CLOCK_MONOTONIC);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to setclock walwrite");
|
||||
}
|
||||
ret = pthread_cond_init(&wal_cxt->criticalEntryCV, &wal_cxt->criticalEntryAtt);
|
||||
if (ret != 0) {
|
||||
elog(FATAL, "Fail to init cond for walwrite");
|
||||
}
|
||||
|
||||
wal_cxt->walInsertStatusTable = NULL;
|
||||
wal_cxt->walFlushWaitLock = NULL;
|
||||
wal_cxt->walBufferInitWaitLock = NULL;
|
||||
@ -114,7 +128,6 @@ static void knl_g_wal_init(knl_g_wal_context *const wal_cxt)
|
||||
wal_cxt->XLogFlusherCPU = 0;
|
||||
wal_cxt->isWalWriterSleeping = false;
|
||||
wal_cxt->criticalEntryMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
wal_cxt->criticalEntryCV = (pthread_cond_t)PTHREAD_COND_INITIALIZER;
|
||||
wal_cxt->globalEndPosSegNo = InvalidXLogSegPtr;
|
||||
wal_cxt->walWaitFlushCount = 0;
|
||||
wal_cxt->lastWalStatusEntryFlushed = -1;
|
||||
|
||||
@ -698,6 +698,7 @@ typedef struct knl_g_wal_context {
|
||||
volatile bool isWalWriterSleeping;
|
||||
pthread_mutex_t criticalEntryMutex;
|
||||
pthread_cond_t criticalEntryCV;
|
||||
pthread_condattr_t criticalEntryAtt;
|
||||
volatile uint32 walWaitFlushCount; /* only for xlog statistics use */
|
||||
volatile XLogSegNo globalEndPosSegNo; /* Global variable for init xlog segment files. */
|
||||
int lastWalStatusEntryFlushed;
|
||||
|
||||
Reference in New Issue
Block a user