You need to enable JavaScript to run this app.
文档中心
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
下载 pdf
审计日志
SQL 审计
复制全文
下载 pdf
SQL 审计

ByteHouse 云数仓版为您提供 SQL 审计能力和界面化查看 SQL 执行日志的功能,支持查看 SQL 历史和运行中的查询,帮助您快速定位并优化慢查询、排查错误、审计用户行为以保障数据安全,适用于数据库性能调优、安全合规审计、事后故障追溯等场景。同时 ByteHouse 也提供详细 SQL 日志表,打开详细日志开关后,即可查看对应详细 SQL 日志表数据,进一步查看更细致的日志数据。本文为您介绍如何使用 ByteHouse SQL 审计功能。

背景信息

ByteHouse SQL 审计功能支持查看 SQL 历史与运行中的查询,其中,SQL 历史中可查看慢 SQL 查询、错误查询、ID 或 SQL 语句内容精准检索。
该功能提供全面的审计维度,包括查询 ID、状态、用户名/ID、有效角色、计算组、开始/结束时间、时长、SQL 类型、SQL 语句、CPU 总耗时、内存最大用量(Segment)等。同时该功能也支持丰富的筛选项,便于您进行高效分析 SQL 执行情况。

此外,ByteHouse 也支持查看详细日志。启用该功能后,ByteHouse 将开始积攒数据(需重新与 ByteHouse 建立连接),并自动创建名为 bh_system 的数据库及库内 query_log 表,用于记录详细的 SQL 执行日志数据,您拥有该库和表的全部权限。该表默认数据生命周期为 7 天,如果需要保留更长周期,您可执行 SQL 命令按需删除 TTL 或修改 TTL 时间,操作详情请参见调整 query_log 表生命周期

使用限制
  • 管理员可查看所有用户的 SQL 审计信息,包括 SQL 历史、运行中的查询和详细日志,子用户仅能查看当前账号的 SQL 审计信息。子用户如需查看所有用户的 SQL 审计信息,可联系管理员授予全局审计日志权限,操作详情请参考资源权限设置
  • SQL 历史列表中的 ‘CPU 总耗时’ 和 ‘内存最大用量(Segment)’ 这两个展示项是 Beta 功能且要求引擎版本为 v2.3 及以上版本,如需查看对应信息,请提交工单或联系 ByteHouse 团队获取白名单权限。
  • 详细日志为非公开功能,如需使用,请提交工单或联系 ByteHouse 团队获取白名单权限。

查看 SQL 历史和运行中的查询
  1. 登录 ByteHouse 控制台,单击顶部审计日志,单击 SQL 审计,在 SQL 历史页签下,可以看到历史查询列表。您可以通过筛选条件筛选 SQL 历史,支持通过查询 IDSQL 语句查询,您可从下拉列表中选择并切换。
    Image
    1. SQL 历史列表中包含如下信息:
      • 查询 ID:SQL 查询的唯一 ID 号。
      • 状态:事件完成状态,如“成功”或“失败”。失败的事件,可以在后侧按钮查询具体情况。
      • 有效角色:执行此事件的角色类型。
      • 计算组:执行查询的计算组 VW 名称。
      • CPU总耗时:计算组所有 segment 的 CPU 耗时总和。由于 segment 可并行运行,因此该值可能大于查询时长。
      • 内存最大用量(Segment):该计算组执行的所有 segment 的最大内存用量。
      • 开始时间:事件发生的具体时间。
      • 结束时间:事件结束的具体时间。
      • 时长:事件执行的时间长度。
      • SQL 类型:执行 SQL 语句的类型,如 CREATE、DROP、INSERT、DELETE 等。
      • SQL 语句:执行的 SQL 语句内容,以及其方言类型。
    2. 切换到“错误查询”页签可以快速定位失败事件,并根据需求查询相关状态。
      Image
    3. 切换到“ID或SQL查询”页签,可以根据查询 ID 或 SQL 语句进行查询。
  2. 切换到“运行中的查询”页签,可以看到正在执行的查询列表,可查看查询 ID、开始时间、计算组、SQL 语句,您也可以使用查询 ID、SQL 语句或计算组查询正在执行的查询。
    Image

    说明

    • 运行中的查询页签,您可以中止任务查询,并查看当前CPU最大耗时及内存最大用量。
    • 您也可以通过使用 SQL 命令 SHOW PROCESSLIST 查看当前运行中的查询,使用方式请参见SHOW PROCESSLIST

查看详细日志(query_log)

注意

  • 详细日志为非公开功能,如需使用,请提交工单或联系 ByteHouse 团队获取白名单权限。

获取白名单权限后,您可以在 SQL 审计页面的右上角打开开启详细日志开关,启用后,ByteHouse 会为您在系统中创建一张 query_log 的表,用于写入详细的 SQL 执行日志数据。

  1. 打开开启详细日志开关。
    Image
    打开详细日志按钮后,ByteHouse 将获得您的授权,在您的【租户-环境】下创建 bh_system 数据库,并在该数据库中创建一张 query_log 表,您拥有该库和表的全部权限。如果子用户需要查看 query_log,可联系管理员授予数据权限,操作详情请参考数据权限管理

    注意

    由于 ByteHouse 将您执行的 SQL 日志信息持续写入到 bh_system.query_log 表中,对于该表的增删改操作将会影响日志写入。禁止对该表进行除修改 TTL 外的增删改操作。

  2. 查看 query_log 表。您可以通过单击页面顶部的数据库SQL 工作表查看 query_log 表。
    使用 SQL 工作表查看 query_log 表为例,您可以在 SQL 工作表的左侧数据对象中的 bh_system 数据库中看到该表。
    Image

调整 query_log 表生命周期

bh_system.query_log 表默认数据生命周期只有 7 天, 如果需要保留更长周期,请参考以下命令按需删除 TTL 或修改 TTL 时间。

# 查看 bh_system.query_log 表当前生命周期
SHOW CREATE TABLE bh_system.query_log;

# 删除 TTL
ALTER TABLE bh_system.query_log REMOVE TTL;

# 将默认 TTL 从 7 天改为 180 天(您可以将 180 替换为您希望保留日志的天数,需管理员权限执行)
ALTER TABLE bh_system.query_log  MODIFY TTL event_time + INTERVAL 180 DAY;

query_log 表信息

列名

数据类型

字段描述

type

Enum8,枚举值包括:

  • 'QueryStart' = 1
  • 'QueryFinish' = 2
  • 'ExceptionBeforeStart' = 3
  • 'ExceptionWhileProcessing' = 4

查询事件类型:

  1. QueryStart (查询开始)
  2. QueryFinish (查询成功结束)
  3. ExceptionBeforeStart (执行前异常)
  4. ExceptionWhileProcessing (执行中异常)

event_date

Date

事件发生的日期

event_time

DateTime

事件发生的精确时间戳

event_time_microseconds

DateTime64(6)

事件时间戳(微秒精度)

query_start_time

DateTime

查询开始时间

query_start_time_microseconds

DateTime64(6)

查询开始时间(微秒精度)

query_duration_ms

UInt64

查询总耗时(毫秒)

read_rows

UInt64

查询的所有表和表函数读取的总行数

read_bytes

UInt64

查询的所有表和表函数读取的总字节数

written_rows

UInt64

写入的行数(仅INSERT操作)

written_bytes

UInt64

写入的字节数(仅INSERT操作)

result_rows

UInt64

返回结果的行数

result_bytes

UInt64

返回结果的字节数

memory_usage

UInt64

查询在每个worker,每个segment上使用的最高内存用量

current_database

String

当前数据库

query

String

完整的查询语句

normalized_query_hash

UInt64

规范化查询哈希值

query_kind

String

查询类型(如 SELECT, INSERT 等)

databases

Array(String)

查询涉及到的数据库

tables

Array(String)

查询涉及到的数据表

columns

Array(String)

查询涉及到的数据表字段

partition_ids

Array(String)

分区

projections

Array(String)

查询涉及的投影(Projection)名称列表

materialized_views

Array(String)

查询涉及的物化视图名称列表

exception_code

Int32

异常代码(仅当type为异常事件时有值)

exception

String

异常信息(错误消息)

stack_trace

String

异常堆栈跟踪信息(需配置 log_query_threads=1

is_initial_query

UInt8

是否为初始查询(0:子查询;1:用户直接发起的查询)

user

String

用户名

query_id

String

查询ID

interface

UInt8

发起查询的接口,可能的值:

  • 1 — TCP
  • 2 — HTTP

os_user

String

运行 TCP 客户端的操作系统用户

client_hostname

String

TCP 客户端主机名

client_name

String

TCP 客户端名称

client_revision

UInt32

TCP 客户端版本

client_version_major

UInt32

TCP 客户端主版本

client_version_minor

UInt32

TCP 客户端次版本号

client_version_patch

UInt32

TCP 客户端补丁版本

http_method

UInt8

发起查询的 HTTP 方法,可能值:
0 — TCP接口的查询.
1 — GET
2 — POST

http_user_agent

String

客户端的User-Agent信息

http_referer

String

HTTP 来源信息

forwarded_for

String

HTTP 代理链中的客户端IP

quota_key

String

配额键

revision

UInt32

ByteHouse 修订版

ProfileEvents

Map(String, UInt64)

PrunedPartitions:实际读取到的partition数量。
TotalPartitions:总共partition数量。
TotalCPUTimeMs:查询在每个worker,每个segment上总和的cpu耗时(毫秒)。

注意

TotalCPUTimeMs 列仅在 ByteHouse CDW 引擎 v2.3.x 及以上版本中支持,使用前请确认引擎版本。您可登录 ByteHouse 控制台,单击顶部租户管理,在基础信息页面中查看您使用的引擎版本。

Settings

Map(String, String)

查询生效的配置参数(覆盖默认值的部分)

log_comment

String

日志注释

thread_ids

Array(UInt64)

参与查询的线程ID列表

used_aggregate_functions

Array(String)

使用的聚合函数

used_aggregate_function_combinators

Array(String)

使用的聚合函数

used_database_engines

Array(String)

使用的表引擎

used_data_type_families

Array(String)

使用的数据类型

used_dictionaries

Array(String)

使用的字典表

used_formats

Array(String)

使用数据格式参数(如:FORMAT CSV)

used_functions

Array(String)

使用的函数

used_storages

Array(String)

使用的存储

used_table_functions

Array(String)

使用的表函数

virtual_warehouse

String

查询使用的计算组

query_plan

String

查询的执行计划

最近更新时间:2026.04.07 16:23:52
这个页面对您有帮助吗?
有用
有用
无用
无用