---
title: 数据库
description: "- MySQL无锁优化Patch："
url: https://www.hikunpeng.com/document/detail/zh/kunpengfaq/productfaq/boostkitfaq/boostkit_faq_0009.html
sourcePath: /source/zh/kunpengfaq/productfaq/boostkitfaq/boostkit_faq_0009.html
indexId: 5c735d2f5e006a9383741d7334f51fda96a173a3dfbf8c2c563cc03310712b9867
---
# 数据库

#### 如何使用MySQL优化后Patch？

- MySQL无锁优化Patch：
  MySQL OLTP场景下DML语句（Insert, Update, Delete）大量并发操作trx_sys全局结构体中的关键数据结构，造成临界区的竞争和同步瓶颈。改造后使用无锁哈希表维护事务单元。减少锁冲突，提升并发度。

  Patch使用指导请参见：使用说明(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/lock_atomic_var_opt/docs/zh/mysql_lock_free_tuning_feature_guide.md#使用说明)

- MySQL细粒度锁优化Patch：
  MySQL OLTP场景下DML语句（Insert, Update, Delete）大量并发操作lock_sys->mutex全局锁保护的关键数据结构，造成锁竞争严重导致性能下降。替换成细粒度hash桶锁。减少锁冲突，提升并发度。

  Patch使用指导请参见：使用说明(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/lock_atomic_var_opt/docs/zh/mysql_fine_grained_lock_tuning_feature_guide.md#使用说明)

- MySQL并行查询优化Patch：
  MySQL单SQL查询只能调度单线程，多核CPU无法使用，单查询性能较差，难以满足查询场景的性能要求，通过并行查询优化提升查询性能。

  Patch使用指导请参见：Patch使用说明(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/ap_enhance_opt/docs/zh/mysql_parallel_query_tuning_feature_guide.md#patch使用说明)

- MySQL NUMA调度Patch：
  MySQL OLTP场景高并发下系统默认的线程调度使得线程频繁跨NUMA的访问，这种情况导致CPU开销增大，性能提升受限制，需要对用户处理线程做动态绑定固定NUMA CPU减少跨NUMA访问，同时需要保证CPU访问的负载均衡，后台线程静态绑定固定NUMA CPU减少跨NUMA访问，提升后台线程效率。

  Patch使用指导请参见：使用说明(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/basic_computation_opt/docs/zh/mysql_numa_schedule_optimization_feature_guide.md#安装和使用特性)

- MySQL可插拔线程池Patch：
  MySQL OLTP场景高并发下线程数过多，CPU消耗在无效的资源竞争和频繁切换上，线程池方案通过队列方式管理任务，所有的任务先放入等待执行队列，按系统执行能力从任务队列中取出任务让CPU执行，每个CPU同时处理任务个数是有限的，一般2~5个最优，从而保持稳定的业务处理能力。

  Patch使用指导请参见：MySQL可插拔线程池 特性指南(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/pluggablethreadpool/docs/zh/mysql_5_7_27_thread_pool_feature_guide.md)


#### MySQL线程池特性技术原理是怎么样的？

高并发下线程数过多，CPU消耗在无效的资源竞争和频繁切换上，线程池方案通过队列方式管理任务，所有的任务先放入等待执行队列，按系统执行能力取出任务队列让CPU执行，每个CPU同时处理任务个数是有限的，一般2~5个最优，从而保持稳定的业务处理能力。


#### 如何配置MySQL NUMA调度特性参数？

根据参数的合法取值，如果需要设置“sched_affinity_foreground_thread”参数的值，对应的SQL语句如下：

- 设置为空值：

```
set global sched_affinity_foreground_thread = '';
```


- 设置为0：

```
set global sched_affinity_foreground_thread = '0';
```


- 设置为2-5：

```
set global sched_affinity_foreground_thread = '2-5';
```


另外，《MySQL NUMA调度优化 特性指南(https://www.hikunpeng.com/document/detail/zh/boostdb/mysql/basic_computation_opt/docs/zh/mysql_numa_schedule_optimization_feature_guide.md#安装和使用特性)》中提供了三种配置MySQL NUMA调度特性参数的方式，可在配置文件、启动参数或运行时设置，请按需选择其中一种方式进行操作。


#### 如何理解“使用TPC-C模型时，并发数达到32以上”？

《鲲鹏BoostKit数据库使能套件 技术白皮书(https://www.hikunpeng.com/document/detail/zh/kunpengdbs/twp/kunpengdbs_19_0001.html)》的“使用TPC-C模型时，当并发数达到32以上时，系统的性能将会有明显的提升；当并发数达到64以上时，系统的写性能将会提高超过15%”描述里，“并发数”在TPC-C模型中，对应terminals的设置值，指终端数量，即同时有多少终端并发执行，表示并发程度。

“并发数达到32以上”意味着使用TPC-C模型时，系统能够同时处理或支持32个以上独立的用户会话或操作。这些会话或操作可能包括事务的提交、查询、更新等，它们并行地在系统上执行，共同构成系统的总负载。


#### JT_INDEX_SCAN和JT_REF有什么区别？

- JT_INDEX_SCAN

  - 定义：指的是在执行查询时，数据库系统扫描整个索引的叶子节点，将遍历索引的所有条目，而不论查询条件如何。
  - 应用场景：全表扫描或者没有明确范围限制的查询。
  - SQL示例：SELECT a FROM t1;
  - 这条SQL会返回表t1中的所有a列值。
- JT_RANGE

  - 定义：指的是在索引上进行范围扫描。数据库系统会扫描索引中的一部分数据，基于某个范围条件来限制扫描的起始点和结束点。
  - 应用场景：用于范围查询，例如使用BETWEEN、>或<等条件来限制检索的结果集。
  - SQL示例：SELECT a FROM t1 WHERE a BETWEEN 10 AND 20;
  - 这条SQL请求返回a列值在10到20之间的记录。
