diff --git a/pkg/sessionctx/vardef/tidb_vars.go b/pkg/sessionctx/vardef/tidb_vars.go index 1ab8cc5e66476..26ccb6f843ba1 100644 --- a/pkg/sessionctx/vardef/tidb_vars.go +++ b/pkg/sessionctx/vardef/tidb_vars.go @@ -540,6 +540,8 @@ const ( TiDBMaxPagingSize = "tidb_max_paging_size" // TiDBPagingSizeBytes is the byte budget per coprocessor page. + // A non-zero value takes effect only when Resource Control is enabled and the active Resource Group + // is non-burstable (has limited burst). // 0 means disabled (no byte-budget paging). TiDBPagingSizeBytes = "tidb_paging_size_bytes" @@ -1517,7 +1519,13 @@ const ( DefInitChunkSize = 32 DefMinPagingSize = int(paging.MinPagingSize) DefMaxPagingSize = int(paging.MinAllowedMaxPagingSize) - DefPagingSizeBytes = 0 + // DefPagingSizeBytes defaults byte-budget paging to 4 MiB. It takes effect only when Resource Control + // is enabled and the active Resource Group is non-burstable (has limited burst). + // Regression tests across cap-bound and under-cap TPC-C, FullScan, and Join workloads found no + // material performance regression. Among the tested 1, 2, 4, 8, and 16 MiB candidates, 4 MiB + // provided the best overall balance of throughput, tail latency, RU stability, RPC overhead, CPU, + // and RU efficiency. + DefPagingSizeBytes = 4 * 1024 * 1024 DefMaxChunkSize = 1024 DefDMLBatchSize = 0 DefMaxPreparedStmtCount = -1 diff --git a/pkg/sessionctx/variable/setvar_affect.go b/pkg/sessionctx/variable/setvar_affect.go index f485f62204a7b..befd35dd9ff27 100644 --- a/pkg/sessionctx/variable/setvar_affect.go +++ b/pkg/sessionctx/variable/setvar_affect.go @@ -92,7 +92,6 @@ var isHintUpdatableVerified = map[string]struct{}{ "tidb_max_chunk_size": {}, "tidb_min_paging_size": {}, "tidb_max_paging_size": {}, - "tidb_paging_size_bytes": {}, "tidb_enable_cascades_planner": {}, "tidb_merge_join_concurrency": {}, "tidb_index_merge_intersection_concurrency": {}, diff --git a/pkg/sessionctx/variable/sysvar.go b/pkg/sessionctx/variable/sysvar.go index 9df474aefe435..759a6f893f21d 100644 --- a/pkg/sessionctx/variable/sysvar.go +++ b/pkg/sessionctx/variable/sysvar.go @@ -3070,7 +3070,7 @@ var defaultSysVars = []*SysVar{ s.MaxPagingSize = tidbOptPositiveInt32(val, vardef.DefMaxPagingSize) return nil }}, - {Scope: vardef.ScopeGlobal | vardef.ScopeSession, Name: vardef.TiDBPagingSizeBytes, Value: strconv.Itoa(vardef.DefPagingSizeBytes), Type: vardef.TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { + {Scope: vardef.ScopeGlobal | vardef.ScopeSession, Name: vardef.TiDBPagingSizeBytes, Value: strconv.Itoa(vardef.DefPagingSizeBytes), Type: vardef.TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt64, IsHintUpdatableVerified: true, SetSession: func(s *SessionVars, val string) error { s.PagingSizeBytes = int(TidbOptInt64(val, int64(vardef.DefPagingSizeBytes))) return nil }}, diff --git a/tests/integrationtest/r/sessionctx/setvar.result b/tests/integrationtest/r/sessionctx/setvar.result index 91a7cfd9be050..a64e073b9fa49 100644 --- a/tests/integrationtest/r/sessionctx/setvar.result +++ b/tests/integrationtest/r/sessionctx/setvar.result @@ -1102,11 +1102,11 @@ select /*+ set_var(tidb_paging_size_bytes=1048576) */ @@tidb_paging_size_bytes; 1048576 select @@tidb_paging_size_bytes; @@tidb_paging_size_bytes -0 +4194304 set @@tidb_paging_size_bytes=default; select @@tidb_paging_size_bytes; @@tidb_paging_size_bytes -0 +4194304 set @@tidb_paging_size_bytes=0; select @@tidb_paging_size_bytes; @@tidb_paging_size_bytes @@ -1118,7 +1118,7 @@ select @@tidb_paging_size_bytes; set @@tidb_paging_size_bytes=default; select @@tidb_paging_size_bytes; @@tidb_paging_size_bytes -0 +4194304 select /*+ set_var(tidb_enable_cascades_planner=0) */ @@tidb_enable_cascades_planner; @@tidb_enable_cascades_planner 0