adjust clog_checkpoint lock read_prefer

This commit is contained in:
obdev 2022-12-28 10:12:03 +00:00 committed by ob-robot
parent d76fd66d95
commit 4853e91041
7 changed files with 21 additions and 13 deletions

View File

@ -298,6 +298,8 @@ LATCH_DEF(MEMTABLE_STAT_LOCK, 287, "metmable stat lock", LATCH_FIFO, 2000, 0, ME
LATCH_DEF(DEADLOCK_DETECT_LOCK, 288, "deadlock detect lock", LATCH_FIFO, 2000, 0, DEADLOCK_DETECT_LOCK_WAIT, "deadlock detect lock")
LATCH_DEF(FREEZE_THREAD_POOL_LOCK, 289, "freeze thread pool lock", LATCH_FIFO, 2000, 0, FREEZE_THREAD_POOL_WAIT, "freeze thread pool lock")
LATCH_DEF(DAS_ASYNC_RPC_LOCK, 290, "das wait remote response lock", LATCH_FIFO, 2000, 0, DAS_ASYNC_RPC_LOCK_WAIT, "das wait remote response lock")
LATCH_DEF(CLOG_CKPT_RWLOCK, 291, "clog checkpoint rwlock", LATCH_READ_PREFER, 2000, 0, CLOG_CKPT_RWLOCK_WAIT, "clog checkpoint rwlock")
// LATCH_DEF(TENANT_MGR_TENANT_BUCKET_LOCK, 290, "tenant mgr tenant bucket lock", LATCH_READ_PREFER, INT64_MAX, 0, TENANT_MGR_TENANT_BUCKET_LOCK_WAIT, "tenant mgr tenant bucket lock")
LATCH_DEF(SRS_LOCK, 292, "srs lock", LATCH_READ_PREFER, 2000, 0, SRS_LOCK_WAIT, "srs lock")
LATCH_DEF(LATCH_END, 99999, "latch end", LATCH_FIFO, 2000, 0, WAIT_EVENT_END, "latch end")

View File

@ -288,6 +288,7 @@ WAIT_EVENT_DEF(TENANT_MEM_USAGE_LOCK_WAIT, 15244, "latch: tenant memory usage lo
WAIT_EVENT_DEF(TX_TABLE_LOCK_WAIT, 15245, "rwlock: tx table lock wait", "address", "number", "tries", CONCURRENCY, "rwlock: tx table lock wait", true)
WAIT_EVENT_DEF(MEMTABLE_STAT_LOCK_WAIT, 15246, "spinlock: memtable stat lock wait", "address", "number", "tries", CONCURRENCY, "spinlock: memtable stat lock wait", true)
WAIT_EVENT_DEF(DEADLOCK_DETECT_LOCK_WAIT, 15247, "spinlock: deadlock detect lock wait", "address", "number", "tries", CONCURRENCY, "spinlock: deadlock detect lock wait", true)
WAIT_EVENT_DEF(CLOG_CKPT_RWLOCK_WAIT, 15248, "rwlock: clog checkpoint rwlock wait", "address", "number", "tries", CONCURRENCY, "rwlock: clog checkpoint rwlock wait", true)
//WAIT_EVENT_DEF(BACKUP_DATA_SERVICE_COND_WAIT, 15248, "backup data service condition wait", "address", "", "", CONCURRENCY, "backup data service condition wait", true) used by backup
//WAIT_EVENT_DEF(BACKUP_CLEAN_SERVICE_COND_WAIT, 15249, "backup clean service condition wait", "address", "", "", CONCURRENCY, "backup clean service condition wait", true)
//WAIT_EVENT_DEF(BACKUP_ARCHIVE_SERVICE_COND_WAIT, 15250, "backup archive service condition wait", "address", "", "", CONCURRENCY, "backup archive service condition wait", true)

View File

@ -29,7 +29,7 @@ namespace checkpoint
{
ObCheckpointExecutor::ObCheckpointExecutor()
: rwlock_(common::ObLatchIds::CLOG_CKPT_LOCK),
: rwlock_(common::ObLatchIds::CLOG_CKPT_RWLOCK),
update_checkpoint_enabled_(false)
{
reset();

View File

@ -421,7 +421,7 @@ SCN ObLSTxService::get_rec_scn()
SCN min_rec_scn = SCN::max_scn();
int min_rec_scn_common_checkpoint_type_index = 0;
char common_checkpoint_type[common::MAX_CHECKPOINT_TYPE_BUF_LENGTH];
ObSpinLockGuard guard(lock_);
RLockGuard guard(rwlock_);
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
if (OB_NOT_NULL(common_checkpoints_[i])) {
SCN rec_scn = common_checkpoints_[i]->get_rec_scn();
@ -446,7 +446,7 @@ int ObLSTxService::flush(SCN &recycle_scn)
{
int ret = OB_SUCCESS;
int tmp_ret = OB_SUCCESS;
ObSpinLockGuard guard(lock_);
RLockGuard guard(rwlock_);
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
// only flush the common_checkpoint that whose clog need recycle
if (OB_NOT_NULL(common_checkpoints_[i]) && recycle_scn >= common_checkpoints_[i]->get_rec_scn()) {
@ -480,7 +480,7 @@ int ObLSTxService::get_common_checkpoint_info(
{
int ret = OB_SUCCESS;
common_checkpoint_array.reset();
ObSpinLockGuard guard(lock_);
RLockGuard guard(rwlock_);
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
ObCommonCheckpoint *common_checkpoint = common_checkpoints_[i];
if (OB_ISNULL(common_checkpoint)) {
@ -507,7 +507,7 @@ int ObLSTxService::register_common_checkpoint(const ObCommonCheckpointType &type
ret = OB_INVALID_ARGUMENT;
STORAGE_LOG(WARN, "invalid arguments", K(ret), K(type), K(common_checkpoint));
} else {
ObSpinLockGuard guard(lock_);
WLockGuard guard(rwlock_);
if (OB_NOT_NULL(common_checkpoints_[type])) {
STORAGE_LOG(WARN, "repeat register common_checkpoint", K(ret), K(type), K(common_checkpoint));
} else {
@ -527,7 +527,7 @@ int ObLSTxService::unregister_common_checkpoint(const ObCommonCheckpointType &ty
ret = OB_INVALID_ARGUMENT;
STORAGE_LOG(WARN, "invalid arguments", K(ret), K(type), K(common_checkpoint));
} else {
ObSpinLockGuard guard(lock_);
WLockGuard guard(rwlock_);
if (OB_ISNULL(common_checkpoints_[type])) {
STORAGE_LOG(WARN, "common_checkpoint is null, no need unregister", K(type),
K(common_checkpoint));
@ -559,7 +559,7 @@ int ObLSTxService::traversal_flush()
{
int ret = OB_SUCCESS;
int tmp_ret = OB_SUCCESS;
ObSpinLockGuard guard(lock_);
RLockGuard guard(rwlock_);
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
if (OB_NOT_NULL(common_checkpoints_[i]) &&
OB_SUCCESS != (tmp_ret = common_checkpoints_[i]->flush(SCN::max_scn(), false))) {
@ -570,7 +570,7 @@ int ObLSTxService::traversal_flush()
}
void ObLSTxService::reset_() {
ObSpinLockGuard guard(lock_);
WLockGuard guard(rwlock_);
for (int i = 0; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
common_checkpoints_[i] = NULL;
}

View File

@ -14,7 +14,7 @@
#define OCEANBASE_TRANSACTION_OB_LS_TX_SERVICE
#include "lib/ob_errno.h"
#include "lib/lock/ob_spin_lock.h"
#include "lib/lock/ob_spin_rwlock.h" // SpinRWLock
#include "share/ob_ls_id.h"
#include "storage/checkpoint/ob_common_checkpoint.h"
#include "storage/ob_i_store.h"
@ -62,7 +62,7 @@ public:
ls_id_(),
mgr_(NULL),
trans_service_(NULL),
lock_(common::ObLatchIds::CLOG_CKPT_LOCK) {
rwlock_(common::ObLatchIds::CLOG_CKPT_RWLOCK) {
reset_();
}
~ObLSTxService() {}
@ -177,7 +177,10 @@ private:
// responsible for maintenance checkpoint unit that write TRANS_SERVICE_LOG_BASE_TYPE clog
checkpoint::ObCommonCheckpoint *common_checkpoints_[checkpoint::ObCommonCheckpointType::MAX_BASE_TYPE];
common::ObSpinLock lock_;
typedef common::SpinRWLock RWLock;
typedef common::SpinRLockGuard RLockGuard;
typedef common::SpinWLockGuard WLockGuard;
RWLock rwlock_;
};
}

View File

@ -826,6 +826,8 @@ int ObLockMemtable::flush(SCN recycle_scn,
if (OB_EAGAIN != ret && OB_SIZE_OVERFLOW != ret) {
LOG_WARN("failed to schedule lock_memtable merge dag", K(ret), K(this));
}
} else {
LOG_INFO("schedule lock_memtable merge_dag successfully", K(ls_id_), K(freeze_scn_));
}
}
}

View File

@ -648,8 +648,8 @@ int ObOBJLock::get_table_lock_store_info(
ObTableLockOpList *op_list = map_[i];
if (op_list != NULL) {
DLIST_FOREACH(curr, *op_list) {
if (curr->lock_op_.commit_scn_ <= freeze_scn
&& curr->is_complete_outtrans_lock()) {
if (curr->lock_op_.commit_scn_ <= freeze_scn &&
(curr->is_complete_outtrans_lock() || curr->is_complete_outtrans_unlock())) {
ObTableLockOp store_info;
if(OB_FAIL(curr->get_table_lock_store_info(store_info))) {
LOG_WARN("get_table_lock_store_info failed", K(ret));