Skip to content

Commit

Permalink
Add details about sysbench and the SQL Plan Cache (pingcap#12016)
Browse files Browse the repository at this point in the history
  • Loading branch information
shichun-0415 authored Nov 21, 2022
1 parent cfe2d04 commit cef6f1b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 19 deletions.
26 changes: 7 additions & 19 deletions benchmark/benchmark-tidb-using-sysbench.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ aliases: ['/docs-cn/dev/benchmark/benchmark-tidb-using-sysbench/','/docs-cn/dev/

# 如何用 Sysbench 测试 TiDB

建议使用 Sysbench 1.0 或之后的更新版本,可在 [Sysbench Release 1.0.14 页面](https://github.com/akopytov/sysbench/releases/tag/1.0.14)下载。
建议使用 Sysbench 1.0 或之后的更新版本,可在 [Sysbench Release 1.0.20 页面](https://github.com/akopytov/sysbench/releases/tag/1.0.20)下载。

## 测试方案

Expand All @@ -19,6 +19,8 @@ server_configs:
log.level: "error"
```
同时,推荐启用 [`tidb_enable_prepared_plan_cache`](/system-variables.md#tidb_enable_prepared_plan_cache-从-v610-版本开始引入),并保证 `--db-ps-mode` 没有设置为 `disabled`,这样 Sysbench 就可以使用预处理语句。关于 SQL 执行计划缓存的功能及监控,请参考[执行计划缓存](/sql-prepared-plan-cache.md)。

### TiKV 配置

升高 TiKV 的日志级别同样有利于提高性能表现。
Expand Down Expand Up @@ -111,10 +113,10 @@ create database sbtest;

调整 Sysbench 脚本创建索引的顺序。Sysbench 按照“建表->插入数据->创建索引”的顺序导入数据。对于 TiDB 而言,该方式会花费更多的导入时间。你可以通过调整顺序来加速数据的导入。

假设使用的 Sysbench 版本为 [1.0.14](https://github.com/akopytov/sysbench/tree/1.0.14),可以通过以下两种方式来修改:
假设使用的 Sysbench 版本为 [1.0.20](https://github.com/akopytov/sysbench/tree/1.0.20),可以通过以下两种方式来修改:

1. 直接下载为 TiDB 修改好的 [oltp_common.lua](https://raw.githubusercontent.com/pingcap/tidb-bench/master/sysbench/sysbench-patch/oltp_common.lua) 文件,覆盖 `/usr/share/sysbench/oltp_common.lua` 文件。
2.`/usr/share/sysbench/oltp_common.lua` 的第 [235](https://github.com/akopytov/sysbench/blob/1.0.14/src/lua/oltp_common.lua#L235) 行到第 [240](https://github.com/akopytov/sysbench/blob/1.0.14/src/lua/oltp_common.lua#L240) 行移动到第 198 行以后。
2. 将 `/usr/share/sysbench/oltp_common.lua` 的第 [235-240](https://github.com/akopytov/sysbench/blob/1.0.20/src/lua/oltp_common.lua#L235-L240) 行移动到第 198 行以后。

> **注意:**
>
Expand All @@ -132,22 +134,8 @@ sysbench --config-file=config oltp_point_select --tables=32 --table-size=1000000

数据预热可将磁盘中的数据载入内存的 block cache 中,预热后的数据对系统整体的性能有较大的改善,建议在每次重启集群后进行一次数据预热。

Sysbench 1.0.14 没有提供数据预热的功能,因此需要手动进行数据预热。如果使用的是 [master 的 Sysbench 版本](https://github.com/akopytov/sysbench/tree/master),可以使用 Sysbench 自带的预热功能。

以 Sysbench 中某张表 sbtest7 为例,执行如下 SQL 语句进行数据预热:

{{< copyable "sql" >}}

```sql
SELECT COUNT(pad) FROM sbtest7 USE INDEX (k_7);
```

统计信息收集有助于优化器选择更为准确的执行计划,可以通过 `analyze` 命令来收集表 sbtest 的统计信息,每个表都需要统计。

{{< copyable "sql" >}}

```sql
ANALYZE TABLE sbtest7;
```bash
sysbench --config-file=config oltp_point_select --tables=32 --table-size=10000000 warmup
```

### Point select 测试命令
Expand Down
Binary file added media/performance/sql_plan_cache.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions sql-prepared-plan-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,9 @@ mysql> select @@last_plan_from_cache; -- 因为开关打开,第二次依
+------------------------+
1 row in set (0.00 sec)
```

### 监控

[Grafana 面板](/grafana-tidb-dashboard.md)的 TiDB 页面,**Executor** 部分包含“Queries Using Plan Cache OPS”和“Plan Cache Miss OPS”两个图表,用以检查 TiDB 和应用是否正确配置,以便 SQL 执行计划缓存能正常工作。TiDB 页面的 **Server** 部分还提供了“Prepared Statement Count”图表,如果应用使用了预处理语句,这个图表会显示非零值。通过数值变化,可以判断 SQL 执行计划缓存是否正常工作。

![`sql_plan_cache`](/media/performance/sql_plan_cache.png)

0 comments on commit cef6f1b

Please sign in to comment.