Optimize snapshot acquiring when read write statement is spliting
This commit is contained in:
@ -400,6 +400,7 @@ int ObTableApiProcessorBase::setup_tx_snapshot_(transaction::ObTxDesc &trans_des
|
|||||||
SCN weak_read_snapshot;
|
SCN weak_read_snapshot;
|
||||||
if (OB_FAIL(txs->get_weak_read_snapshot_version(
|
if (OB_FAIL(txs->get_weak_read_snapshot_version(
|
||||||
-1, // system variable : max read stale time for user
|
-1, // system variable : max read stale time for user
|
||||||
|
false,
|
||||||
weak_read_snapshot))) {
|
weak_read_snapshot))) {
|
||||||
LOG_WARN("fail to get weak read snapshot", K(ret));
|
LOG_WARN("fail to get weak read snapshot", K(ret));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -264,7 +264,7 @@ DEF_TIME_WITH_CHECKER(max_stale_time_for_weak_consistency, OB_TENANT_PARAMETER,
|
|||||||
"the max data stale time that cluster weak read version behind current timestamp,"
|
"the max data stale time that cluster weak read version behind current timestamp,"
|
||||||
"no smaller than weak_read_version_refresh_interval, range: [5s, +∞)",
|
"no smaller than weak_read_version_refresh_interval, range: [5s, +∞)",
|
||||||
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||||
DEF_BOOL(enable_monotonic_weak_read, OB_TENANT_PARAMETER, "true",
|
DEF_BOOL(enable_monotonic_weak_read, OB_TENANT_PARAMETER, "false",
|
||||||
"specifies observer supportting atomicity and monotonic order read",
|
"specifies observer supportting atomicity and monotonic order read",
|
||||||
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||||
DEF_DBL(server_cpu_quota_min, OB_CLUSTER_PARAMETER, "1", "[1,16]",
|
DEF_DBL(server_cpu_quota_min, OB_CLUSTER_PARAMETER, "1", "[1,16]",
|
||||||
|
|||||||
@ -656,7 +656,10 @@ int ObSqlTransControl::stmt_setup_snapshot_(ObSQLSessionInfo *session,
|
|||||||
auto &snapshot = das_ctx.get_snapshot();
|
auto &snapshot = das_ctx.get_snapshot();
|
||||||
if (cl == ObConsistencyLevel::WEAK || cl == ObConsistencyLevel::FROZEN) {
|
if (cl == ObConsistencyLevel::WEAK || cl == ObConsistencyLevel::FROZEN) {
|
||||||
SCN snapshot_version = SCN::min_scn();
|
SCN snapshot_version = SCN::min_scn();
|
||||||
|
const bool local_single_ls = plan->is_local_plan() &&
|
||||||
|
OB_PHY_PLAN_LOCAL == plan->get_location_type();
|
||||||
if (OB_FAIL(txs->get_weak_read_snapshot_version(session->get_ob_max_read_stale_time(),
|
if (OB_FAIL(txs->get_weak_read_snapshot_version(session->get_ob_max_read_stale_time(),
|
||||||
|
local_single_ls,
|
||||||
snapshot_version))) {
|
snapshot_version))) {
|
||||||
TRANS_LOG(WARN, "get weak read snapshot fail", KPC(txs));
|
TRANS_LOG(WARN, "get weak read snapshot fail", KPC(txs));
|
||||||
int64_t stale_time = session->get_ob_max_read_stale_time();
|
int64_t stale_time = session->get_ob_max_read_stale_time();
|
||||||
|
|||||||
@ -444,6 +444,7 @@ int ObMultiVersionGarbageCollector::study_min_unallocated_WRS(
|
|||||||
|
|
||||||
if (OB_FAIL(MTL(transaction::ObTransService*)->get_weak_read_snapshot_version(
|
if (OB_FAIL(MTL(transaction::ObTransService*)->get_weak_read_snapshot_version(
|
||||||
-1, // system variable : max read stale time for user
|
-1, // system variable : max read stale time for user
|
||||||
|
false,
|
||||||
min_unallocated_WRS))) {
|
min_unallocated_WRS))) {
|
||||||
MVCC_LOG(WARN, "fail to get weak read snapshot", K(ret));
|
MVCC_LOG(WARN, "fail to get weak read snapshot", K(ret));
|
||||||
if (OB_REPLICA_NOT_READABLE == ret) {
|
if (OB_REPLICA_NOT_READABLE == ret) {
|
||||||
|
|||||||
@ -716,6 +716,7 @@ int ObTransService::get_ls_read_snapshot_version(const share::ObLSID &local_ls_i
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ObTransService::get_weak_read_snapshot_version(const int64_t max_read_stale_us_for_user,
|
int ObTransService::get_weak_read_snapshot_version(const int64_t max_read_stale_us_for_user,
|
||||||
|
const bool local_single_ls,
|
||||||
SCN &snapshot)
|
SCN &snapshot)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -724,10 +725,16 @@ int ObTransService::get_weak_read_snapshot_version(const int64_t max_read_stale_
|
|||||||
|
|
||||||
// server weak read version
|
// server weak read version
|
||||||
if (!ObWeakReadUtil::enable_monotonic_weak_read(tenant_id_)) {
|
if (!ObWeakReadUtil::enable_monotonic_weak_read(tenant_id_)) {
|
||||||
if (OB_FAIL(GCTX.weak_read_service_->get_server_version(tenant_id_, wrs_scn))) {
|
if (local_single_ls) {
|
||||||
TRANS_LOG(WARN, "get server read snapshot fail", K(ret), KPC(this));
|
if (OB_FAIL(GCTX.weak_read_service_->get_server_version(tenant_id_, wrs_scn))) {
|
||||||
|
TRANS_LOG(WARN, "get server read snapshot fail", K(ret), KPC(this));
|
||||||
|
}
|
||||||
|
monotinic_read = false;
|
||||||
|
} else {
|
||||||
|
if (OB_FAIL(GCTX.weak_read_service_->get_cluster_version(tenant_id_, wrs_scn))) {
|
||||||
|
TRANS_LOG(WARN, "get weak read snapshot fail", K(ret), KPC(this));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
monotinic_read = false;
|
|
||||||
// wrs cluster version
|
// wrs cluster version
|
||||||
} else if (OB_FAIL(GCTX.weak_read_service_->get_cluster_version(tenant_id_, wrs_scn))) {
|
} else if (OB_FAIL(GCTX.weak_read_service_->get_cluster_version(tenant_id_, wrs_scn))) {
|
||||||
TRANS_LOG(WARN, "get weak read snapshot fail", K(ret), KPC(this));
|
TRANS_LOG(WARN, "get weak read snapshot fail", K(ret), KPC(this));
|
||||||
|
|||||||
@ -235,6 +235,7 @@ int get_ls_read_snapshot_version(const share::ObLSID &local_ls_id,
|
|||||||
* OB_REPLICA_NOT_READABLE - snapshot is too stale
|
* OB_REPLICA_NOT_READABLE - snapshot is too stale
|
||||||
*/
|
*/
|
||||||
int get_weak_read_snapshot_version(const int64_t max_read_stale_time,
|
int get_weak_read_snapshot_version(const int64_t max_read_stale_time,
|
||||||
|
const bool local_single_ls,
|
||||||
share::SCN &snapshot_version);
|
share::SCN &snapshot_version);
|
||||||
/*
|
/*
|
||||||
* release_snapshot - release snapshot
|
* release_snapshot - release snapshot
|
||||||
|
|||||||
Reference in New Issue
Block a user