如何查询tidb一段时间内的query log

tidb版本:4.0.5
问题描述:想要查询并导出tidb集群某一段时间内的querylog,该用哪张表,有没有类似的sql?

set @@tidb_general_log=on,表示对当前这个tidb-server 实例开启, genreal log 开启之后可以在 tidb.log 中根据 GENERAL_LOG 关键字查看 general log

1 个赞

数据库里边对应的是哪张表呢,我在 cluster_statements_summarycluster_statements_summary_historycluster_statements_summary_evicted表里边都没有找到库名相关的字段(希望通过库名来筛选)。

参考:https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_general_log

tidb_general_log

  • 作用域:INSTANCE
  • 默认值: OFF
  • 这个变量用来设置是否在日志里记录所有的 SQL 语句。该功能默认关闭。如果系统运维人员在定位问题过程中需要追踪所有 SQL 记录,可考虑开启该功能。
  • 通过查询 "GENERAL_LOG" 字符串可以定位到该功能在日志中的所有记录。日志会记录以下内容:
    • conn :当前会话对应的 ID
    • user :当前会话用户
    • schemaVersion :当前 schema 版本
    • txnStartTS :当前事务的开始时间戳
    • forUpdateTS :事务模式为悲观事务时,SQL 语句的当前时间戳。悲观事务内发生写冲突时,会重试当前执行语句,该时间戳会被更新。重试次数由 max-retry-count 配置。事务模式为乐观事务时,该条目与 txnStartTS 等价。
    • isReadConsistency :当前事务隔离级别是否是读已提交 (RC)
    • current_db :当前数据库名
    • txn_mode :事务模式。可选值: OPTIMISTIC (乐观事务模式),或 PESSIMISTIC (悲观事务模式)
    • sql :当前查询对应的 SQL 语句
1 个赞

cluster_statements_summary表中SCHEMA_NAME是库名
image

提供一个新的思路,
之前在MySQL都是这么玩的,因为general log会输出很多没有用的信息,比如set状态值,
所以可以把slow log 的时间阈值调到0,这样的话所有的sql都会进入到满查询日志,而且只是sql内容。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。