File tree Expand file tree Collapse file tree 2 files changed +13
-2
lines changed
Expand file tree Collapse file tree 2 files changed +13
-2
lines changed Original file line number Diff line number Diff line change @@ -177,9 +177,11 @@ TiDB 支持是否开启外键约束检查,由系统变量 [`foreign_key_checks
177177
178178## 锁
179179
180- 在 ` INSERT ` 或者 ` UPDATE ` 子表时,外键约束会检查父表中是否存在对应的外键值,并对父表中的该行数据上锁,避免该外键值被其他操作删除,导致破坏外键约束。这里的上锁行为等同于对父表中外键值所在行做 ` SELECT FOR UPDATE ` 操作。
180+ 在 ` INSERT ` 或者 ` UPDATE ` 子表时,外键约束会检查父表中是否存在对应的外键值,并对父表中的该行数据上锁,避免该外键值被其他操作删除,导致破坏外键约束。
181181
182- 因为 TiDB 目前暂不支持 ` LOCK IN SHARE MODE ` ,所以,在并发写入子表场景,如果引用的外键值大部分都一样,可能会有比较严重的锁冲突。建议在大批量写入子表数据时,关闭 [ ` foreign_key_checks ` ] ( /system-variables.md#foreign_key_checks ) 。
182+ 默认情况下,在悲观事务中,外键检查对父表中行的加锁行为等价于对该行执行一次 ` SELECT ... FOR UPDATE ` 的锁定读(即加排他锁)。在子表高并发写入的场景下,如果大量事务反复引用相同的父表行,可能出现较严重的锁冲突。
183+
184+ 你可以通过开启系统变量 [ ` tidb_foreign_key_check_in_shared_lock ` ] ( /system-variables.md#tidb_foreign_key_check_in_shared_lock-从-v856-和-v900-版本开始引入 ) 来让外键检查使用共享锁。共享锁允许多个事务在同一父表行同时完成外键检查,从而减少锁冲突,提升子表并发写入性能。
183185
184186## 外键的定义和元信息
185187
Original file line number Diff line number Diff line change @@ -2736,6 +2736,15 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
27362736>
27372737> TiDB 从 v6 .6 .0 版本开始支持[使用资源管控 (Resource Control) 实现资源组限制和流控](/ tidb- resource- control- ru- groups .md )功能。该功能可以将不同优先级的语句放在不同的资源组中执行,并为这些资源组分配不同的配额和优先级,可以达到更好的资源管控效果。在开启资源管控功能后,语句的调度主要受资源组的控制,` PRIORITY` 将不再生效。建议在支持资源管控的版本优先使用资源管控功能。
27382738
2739+ # ## `tidb_foreign_key_check_in_shared_lock` <span class="version-mark">从 v8.5.6 和 v9.0.0 版本开始引入</span>
2740+
2741+ - 作用域:SESSION | GLOBAL
2742+ - 是否持久化到集群:是
2743+ - 是否受 Hint [SET_VAR](/ optimizer- hints .md # set_varvar_namevar_value) 控制:否
2744+ - 类型:布尔型
2745+ - 默认值:` OFF`
2746+ - 该变量用于控制在悲观事务中,外键约束检查对父表中的行加锁时是否使用共享锁(而非排他锁)。开启后,多个并发事务可以同时对同一父表行执行外键检查而不互相阻塞,从而降低锁冲突并提升子表并发写入性能。
2747+
27392748# ## `tidb_gc_concurrency` <span class="version-mark">从 v5.0 版本开始引入</span>
27402749
27412750- 作用域:GLOBAL
You can’t perform that action at this time.
0 commit comments