文章
Doris 诊断工具
Doris Manager 日志
Doris Manager 的日志模块提供了慢 SQL 筛选功能。用户可以通过选择特定 FE 节点上的 fe.audit.log
来查看慢 SQL。只需在搜索框中输入“slow_query”,即可在页面上展示当前系统的历史慢 SQL 信息,如下图所示:

Audit Log
当前 Doris FE 提供了四种类型的 Audit Log,包括 slow_query
、query
、load
和 stream_load
。Audit Log 除了在安装部署 Manager 服务的集群上通过日志页面访问获取之外,也可以直接访问 FE 所在节点的 fe/log/fe.audit.log
文件获取信息。
通过直查 fe.audit.log
中的 slow_query
标签,可以快速筛选出执行缓慢的查询 SQL,如下所示:

通过 fe.audit.log
获取的慢 SQL,使用者可以方便地获取执行时间、扫描行数、返回行数、SQL 语句等详细信息,为进一步重现和定位性能问题奠定了基础。
audit_log 系统表
Doris 2.1 以后的版本在__internal_schema 数据库下提供了 audit_log 系统表,供用户查看 SQL 运行的情况。使用前需要打开全局配置 set global enable_audit_plugin=true;
(此开关默认关闭)
mysql> use __internal_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------------+
| Tables_in___internal_schema |
+-----------------------------+
| audit_log |
| column_statistics |
| histogram_statistics |
| partition_statistics |
+-----------------------------+
4 rows in set (0.00 sec)
mysql> desc audit_log;
+-------------------+--------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-------+---------+-------+
| query_id | varchar(48) | Yes | true | NULL | |
| time | datetime | Yes | true | NULL | |
| client_ip | varchar(128) | Yes | true | NULL | |
| user | varchar(128) | Yes | false | NULL | NONE |
| catalog | varchar(128) | Yes | false | NULL | NONE |
| db | varchar(128) | Yes | false | NULL | NONE |
| state | varchar(128) | Yes | false | NULL | NONE |
| error_code | int | Yes | false | NULL | NONE |
| error_message | text | Yes | false | NULL | NONE |
| query_time | bigint | Yes | false | NULL | NONE |
| scan_bytes | bigint | Yes | false | NULL | NONE |
| scan_rows | bigint | Yes | false | NULL | NONE |
| return_rows | bigint | Yes | false | NULL | NONE |
| stmt_id | bigint | Yes | false | NULL | NONE |
| is_query | tinyint | Yes | false | NULL | NONE |
| frontend_ip | varchar(128) | Yes | false | NULL | NONE |
| cpu_time_ms | bigint | Yes | false | NULL | NONE |
| sql_hash | varchar(128) | Yes | false | NULL | NONE |
| sql_digest | varchar(128) | Yes | false | NULL | NONE |
| peak_memory_bytes | bigint | Yes | false | NULL | NONE |
| stmt | text | Yes | false | NULL | NONE |
+-------------------+--------------+------+-------+---------+-------+
通过 audit_log 内部表,用户可以查询详细的 SQL 执行信息,进行如慢查询筛选等详细统计分析。
总结
Doris Manager 日志,audit log 以及 audit_log 系统表等工具,可以提供慢 SQL 自动或手动筛选过滤,以及细粒度 SQL 执行信息统计分析等能力。这些工具为系统性的性能诊断和调优提供了强大支撑。
查看 audit_log 内部表发现有很有rollback操作数据原因
根本原因
- 连接池配置问题:
- 您的
PooledDB
配置中设置了autocommit=False
(默认值) - 但您的
select_one
和select_all
方法只是简单查询,没有显式提交或回滚
- 您的
- 连接关闭行为:
- 当 Python 代码中
with
块结束时,连接会被关闭 - 由于 autocommit=False 且没有显式提交,Doris 会在连接关闭时自动回滚事务
- 当 Python 代码中
为什么当前行为无害
尽管日志中有很多 ROLLBACK,但实际上:
- 这些只是 SELECT 查询,没有修改数据
- ROLLBACK 不会对查询结果产生影响
- 不会造成数据一致性问题
性能考虑
过多的 ROLLBACK 记录:
- 会增加审计日志量
- 可能轻微影响连接关闭速度
- 不会影响查询性能本身
最佳方案(推荐):为只读查询启用自动提交
def _create_pool(self, config: Dict) -> PooledDB:
return PooledDB(
# 其他参数...
autocommit=True, # 为所有操作启用自动提交
)