From 00b3f685e72babc6a1e89f1d5549745007e15a45 Mon Sep 17 00:00:00 2001 From: JmPotato Date: Wed, 15 Jul 2026 19:11:52 +0800 Subject: [PATCH 1/3] sessionctx: default paging size bytes to 4 MiB Signed-off-by: JmPotato --- pkg/sessionctx/vardef/tidb_vars.go | 7 ++++++- tests/integrationtest/r/sessionctx/setvar.result | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/sessionctx/vardef/tidb_vars.go b/pkg/sessionctx/vardef/tidb_vars.go index 1ab8cc5e66476..54560c4008f44 100644 --- a/pkg/sessionctx/vardef/tidb_vars.go +++ b/pkg/sessionctx/vardef/tidb_vars.go @@ -1517,7 +1517,12 @@ const ( DefInitChunkSize = 32 DefMinPagingSize = int(paging.MinPagingSize) DefMaxPagingSize = int(paging.MinAllowedMaxPagingSize) - DefPagingSizeBytes = 0 + // DefPagingSizeBytes defaults byte-budget paging to 4 MiB for resource groups with 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/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 From 6920105748962a51626a61032e171bfe1b823cc1 Mon Sep 17 00:00:00 2001 From: JmPotato Date: Wed, 15 Jul 2026 19:16:40 +0800 Subject: [PATCH 2/3] sessionctx: declare paging hint support inline Signed-off-by: JmPotato --- pkg/sessionctx/variable/setvar_affect.go | 1 - pkg/sessionctx/variable/sysvar.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) 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 }}, From cf002db4b103bbf4e29c195b188ac77456b10ba6 Mon Sep 17 00:00:00 2001 From: JmPotato Date: Wed, 15 Jul 2026 19:18:26 +0800 Subject: [PATCH 3/3] sessionctx: clarify paging size bytes scope Signed-off-by: JmPotato --- pkg/sessionctx/vardef/tidb_vars.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/sessionctx/vardef/tidb_vars.go b/pkg/sessionctx/vardef/tidb_vars.go index 54560c4008f44..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,8 @@ const ( DefInitChunkSize = 32 DefMinPagingSize = int(paging.MinPagingSize) DefMaxPagingSize = int(paging.MinAllowedMaxPagingSize) - // DefPagingSizeBytes defaults byte-budget paging to 4 MiB for resource groups with limited burst. + // 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,