性能诊断
单个集群的性能诊断页面主要显示与该集群性能诊断相关的内容。默认显示 Top SQL 信息,用于展示该集群累计耗时时间最长的查询语句。并且支持用户通过“SQL 语句” 和“数据库名” 进行全文检索。另外,如果用户想查看更多的性能相关的信息,也可以选择 “更多诊断信息” 链接跳转到该集群的 dashboard 地址。请确认 TEM 浏览器所在的客户端能够访问到 TiDB 集群的 PD 节点。
Top SQL tab 页
该页面用于显示 TiDB 集群中累计耗时时间最长的 SQL 语句,用户可以通过点击列表中的“SQL 语句” 列中的 SQL 文本信息查看该 SQL 语句的详细执行计划信息和运行过程中的各种详细统计信息。
慢查询 tab 页
这个 tab 页用于显示该集群的慢查询语句,其页面显示信息与 Top SQL 类似,展示的是集群的慢SQL信息,用户也可以点击列表中的SQL 语句
查看该SQL语句的详细执行计划信息。
诊断报告 tab 页
- 根据“报告开始时间”选择诊断报告开始的时间,“区间长度” 指定性能报告包含的时间区间长度。
- 如果需要以某个特定的时间段作为性能基线,则可以选择“与基线时间对比”。而如果没有基线性能报告,则用户技术选择了与“基线时间对比” 也可以产生性能报告,但是没有对比信息。
- 开始按钮用于开始产生用户指定时间段的性能报告,并在页面的表格中显示。
- 在页面表格中:
- 报告名称:这是一个链接,用户点击可以看到详细的性能报告。报告名称规则为 perf-report-<开始时间>-<结束时间>。
- 状态表示诊断报告的状态,支持的状态有:完成,异常,运行中
- 报告开始时间表示诊断报告搜集信息开始的时间,结束时间表示诊断报告搜集的诊断数据的截止时间。
- 基线报告的开始时间和结束时间,用于显示该集群定义的性能基线的开始和结束时间。如果集群没有设置,则显示空。
- 选择日志搜索的时间范围,日志信息的类型,搜索实例的范围,并指定搜索的关键字。
- 之后在表格中显示搜索到的详细信息。
SQL 审计页 用户可以在该页面中启动 TiDB 集群的 SQL 审计特性,并查看产生的审计记录。由于 TiDB 社区版本和企业版的 SQL 审计特性产品形态不同,下面分别来介绍这两种不同的版本如何使用该特性:
- 社区版本:默认情况下 TEM 不会为社区版集群安装 SQL 审计插件,只有在用户选择启用 SQL 审计特性时才会部署 SQL 审计插件。
对于社区版 TiDB 集群,由于 SQL 审计插件是以插件的形式提供的,用户需要手动下载该插件,并将审计插件使用的 audit-1.so 文件拷贝到 TEM 的各个节点的以下指定位置,并重命名成为 TEM 可以识别的名称:
<tem 部署路径>/tem-server-<端口>/bin/libs/audit-<tidb 集群版本>-linux-<CPU 架构>.so
示例:
// X86 架构
cp ./audit-1.so /tem-deploy/tem-server-8080/bin/libs/audit-v6.5.3-linux-x86_64.so
//arm 架构
cp ./audit-1.so /tem-deploy/tem-server-8080/bin/libs/audit-v6.5.3-linux-aarch64.so
之后,就可以在 SQL 审计页面点击安装审计插件,并重载集群使审计插件生效。重载集群后,可以连接到 tidb 节点上运行下面的命令查看审计插件的状态。
mysql> show plugins
最后,用户需要链接到 TiDB 集群中,向表 mysql.tidb_audit_table_access 中插入数据来指定需要审计的操作, 并在 TEM 上打开启用审计开关。 下面的示例中的 insert 语句表示审计访问 test 库 tab1 表的所有 SQL 语句
mysql> insert into mysql.tidb_audit_table_access (user, db, tbl, access_type) values (".*", 'test', ^tab1$, '');
mysql> flush tidb plugins audit;
在完成了上面页面中的操作之后,可以通过点击“SQL审计日志” 按钮查看产生的审计日志。
用户可以根据需要对审计日志进行过滤,并将 SQL 审计日志导出。
- 企业版:TiDB 企业版的SQL 审计特性已经集成到了数据库内核当中,用户需要参考下面的页面启用 SQL 审计特性并指定审计日志的保留天数。
在启用了 SQL 审计特性之后,可以连接到 TiDB 节点并运行下面命令检查特性是否被启用了。
mysql>show variables like '%audit%';
+---------------------------------+----------------+
| Variable_name | Value |
+---------------------------------+----------------+
| tidb_audit_enabled | ON |
......
| tidb_audit_log_reserved_days | 2 |
+---------------------------------+----------------+
接下来,通过运行类似于下面的 SQL 语句来指定需要审计的事件和用户。下面的语句会审计所有用户执行的查询操作。
// 审计所有查询操作
mysql> select audit_log_create_filter('all_query', '{"filter":[{"class":["QUERY"]}]}');
mysql> select * from mysql.audit_log_filters;
+-------------+------------------------------------------------------+
| FILTER_NAME | CONTENT |
+-------------+------------------------------------------------------+
| all_query | {"filter":[{"class":["QUERY"]}]} |
+-------------+------------------------------------------------------+
//审计所有用户的查询操作
mysql> SELECT audit_log_create_rule('%@%', 'all_query');
mysql> select * from mysql.audit_log_filter_rules;
+------+-------------+---------+
| USER | FILTER_NAME | ENABLED |
+------+-------------+---------+
| %@% | all_query | 1 |
+------+-------------+---------+
如果不再需要进行审计,可以使用类似下面的语句删除审计的过滤器。
mysql> SELECT audit_log_remove_rule('%@%', 'all_query');
mysql> select audit_log_remove_filter('all_query');
关于如何使用 TiDB 企业版的 SQL 审计功能,请参考 TiDB 企业版数据库用户手册。