Skip to content

Commit

Permalink
tikv config: Add in-memory lock tikv config (#18648)
Browse files Browse the repository at this point in the history
  • Loading branch information
cfzjywxk authored Oct 16, 2024
1 parent 36a685b commit b151d40
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
2 changes: 2 additions & 0 deletions dynamic-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ show warnings;
| pessimistic-txn.wake-up-delay-duration | 悲观事务被重新唤醒的时间 |
| pessimistic-txn.pipelined | 是否开启流水线式加悲观锁流程 |
| pessimistic-txn.in-memory | 是否开启内存悲观锁功能 |
| pessimistic-txn.in-memory-peer-size-limit | 控制单个 Region 内存悲观锁的内存使用上限 |
| pessimistic-txn.in-memory-instance-size-limit | 控制单个 TiKV 实例内存悲观锁的内存使用上限 |
| quota.foreground-cpu-time | 限制处理 TiKV 前台读写请求所使用的 CPU 资源使用量,软限制 |
| quota.foreground-write-bandwidth | 限制前台事务写入的带宽,软限制 |
| quota.foreground-read-bandwidth | 限制前台事务读取数据和 Coprocessor 读取数据的带宽,软限制 |
Expand Down
17 changes: 16 additions & 1 deletion pessimistic-transaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ set config tikv pessimistic-txn.pipelined='false';

TiKV 在 v6.0.0 中引入了内存悲观锁功能。开启内存悲观锁功能后,悲观锁通常只会被存储在 Region leader 的内存中,而不会将锁持久化到磁盘,也不会通过 Raft 协议将锁同步到其他副本,因此可以大大降低悲观事务加锁的开销,提升悲观事务的吞吐并降低延迟。

当内存悲观锁占用的内存达到 Region 或节点的阈值时,加悲观锁会回退为使用 [pipelined 加锁流程](#pipelined-加锁流程)。当 Region 发生合并或 leader 迁移时,为避免悲观锁丢失,TiKV 会将内存悲观锁写入磁盘并同步到其他副本。
当内存悲观锁占用的内存达到 [Region](/tikv-configuration-file.md#in-memory-peer-size-limit-从-v840-版本开始引入) 或 [TiKV 节点](/tikv-configuration-file.md#in-memory-instance-size-limit-从-v840-版本开始引入)的阈值时,加悲观锁会回退为使用 [pipelined 加锁流程](#pipelined-加锁流程)。当 Region 发生合并或 leader 迁移时,为避免悲观锁丢失,TiKV 会将内存悲观锁写入磁盘并同步到其他副本。

内存悲观锁实现了和 [pipelined 加锁](#pipelined-加锁流程)类似的表现,即集群无异常时不影响加锁表现,但当 TiKV 出现网络隔离或者节点宕机时,事务加的悲观锁可能丢失。

Expand All @@ -206,3 +206,18 @@ in-memory = false
```sql
set config tikv pessimistic-txn.in-memory='false';
```

v8.4.0 开始,你可以通过 [`pessimistic-txn.in-memory-peer-size-limit`](/tikv-configuration-file.md#in-memory-peer-size-limit-从-v840-版本开始引入) 或 [`pessimistic-txn.in-memory-instance-size-limit`](/tikv-configuration-file.md#in-memory-instance-size-limit-从-v840-版本开始引入) 配置项修改 Region 或 TiKV 节点内存悲观锁的内存使用上限:

```toml
[pessimistic-txn]
in-memory-peer-size-limit = "512KiB"
in-memory-instance-size-limit = "100MiB"
```

也可通过[在线修改 TiKV 配置](/dynamic-config.md#在线修改-tikv-配置)功能动态调整:

```sql
SET CONFIG tikv `pessimistic-txn.in-memory-peer-size-limit`="512KiB";
SET CONFIG tikv `pessimistic-txn.in-memory-instance-size-limit`="100MiB";
```
12 changes: 12 additions & 0 deletions tikv-configuration-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -2324,6 +2324,18 @@ Raft Engine 相关的配置项。
+ 默认值:true
+ 注意:`in-memory` 仅在 `pipelined` 为 true 时生效。

### `in-memory-peer-size-limit` <span class="version-mark">从 v8.4.0 版本开始引入</span>

+ 控制单个 Region [内存悲观锁](/pessimistic-transaction.md#内存悲观锁)的内存使用上限。超过此限制时,悲观锁将回退到持久化方式写入磁盘。
+ 默认值:512KiB
+ 单位:KiB|MiB|GiB

### `in-memory-instance-size-limit` <span class="version-mark">从 v8.4.0 版本开始引入</span>

+ 控制单个 TiKV 实例[内存悲观锁](/pessimistic-transaction.md#内存悲观锁)的内存使用上限。超过此限制时,悲观锁将回退到持久化方式写入磁盘。
+ 默认值:100MiB
+ 单位:KiB|MiB|GiB

## quota

用于请求限流 (Quota Limiter) 相关的配置项。
Expand Down

0 comments on commit b151d40

Please sign in to comment.