# Performance (B)

+ `token-limit`
  + 配置可以同时执行请求的 session 的数量，用于流量控制，避免并发请求数过多造成 tidb-server 资源耗尽，服务无法响应。

![center](./student-guide/diagram/06-performance-02-01.png)

-------------------------------------------------------------
Performance
- max-proc 
  - 控制 tidb-server 使用的 CPU 核数，在单台机器上部署多个 tidb-server 设置这个变量可以限制 tidb-server 使用的资源，避免对其他进程造成影响
  - 建议在 NUMA 架构服务器上，部署 n 个 TiDB（n = NUMA CPU 的个数），同时将 TiDB 的 max-procs 变量的值设置为与 NUMA CPU 的核数相同。
  - 该参数控制着整个 Go 进程能使用的 CPU 核心数量，默认情况下为当前机器或者 cgroups 的 CPU 数量。Go 运行时会定期使用一定比例的线程进行 GC 等后台工作。在混合部署模式下，如果不对这一参数进行限制，GC 等后台操作会过多占用 CPU 资源。
- token-limit
  - 配置可以同时执行请求的 session 的数量，用于流量控制，避免并发请求数过多造成 tidb-server 资源耗尽，服务无法响应
  - 默认：1000
  - 如果当前运行的连接多于该 token-limit，那么请求会阻塞，等待已经完成的操作释放 Token
如果增大token-limit 到3000，那么同时运行的连接数就会是3000， 那么需要考虑的影响就是，多的这些session是否会对 tidb-server 和 tikv-server 产生大的压力。

可以查看当前的监控系统资源，over-view，如果峰值业务时间段，系统资源占用很低，那么增加 token-limit 应该没有问题，如果峰值时间段，系统负载已经很高，业务延时也比较高，那么建议尽量不调整，或者可以试试先少调高一些。
- force-priority
  - 控制 tidb-server 的优先级，设置后，所有请求都会使用该优先级来执行，一个常用的场景是用来配置一个单独的 tidb-server 设置低优先级，执行 AP 请求。
默认: NO_PRIORITY
TiDB 支持的语句优先级包括：NO_PRIORITY、LOW_PRIORITY、DELAYED 以及 HIGH_PRIORITY。
场景一：如果你需要为 OLAP 查询指定专属服务器池，可将该值设置为 LOW_PRIORITY，以保证 TiKV 服务器优先处理其他 TiDB 服务器池收到的 OLTP 请求。这样可以使 OLTP 性能更稳定，但 OLAP 性能可能会稍有下降。
场景二：TiDB 自动将 table scan 设置为 LOW_PRIORITY，通过将 DML modifier 设置为 HIGH PRIORITY 或 LOW PRIORITY，可重写一条语句的优先级。
场景三：数据库低速导出配置 --params "tidb-force-priority=LOW_PRIORITY,tidb_distsql_scan_concurrency=5" 能够调低导出语句执行优先级并缩小 TiDB 导出时 scan 数据并发度，从而实现对数据库低影响的低速备份数据。
- committer-concurrency
  - 控制一个事务 commit 阶段的最大的并发数量。对于一个大事务来说，提交事务需要向 TiKV 发送大量写请求。设置更大的并发可能让大事务更快提交完成，但是也可能会造成 TiKV 瞬时压力过大，请求堆积，无法响应。
