作者简介:靖顺,OcenaBase 开发工程师,专注于数据库诊断与调优
1. 前言
在SQL性能诊断上,OceanBase有一个非常实用的功能 —— SQL审计视图(gv$sql_audit)。在OceanBase 4.0.0及更高版本中,该功能是 gv$ob_sql_audit。它可以使开发和运维人员更方便地排查在OceanBase上运行过的任意一条SQL,无论这些SQL是成功与否,都有详细的运行信息记录。这些信息包括客户端和服务端的IP端口、SQL语句、执行时间、执行节点、执行计划ID、会话ID、执行时间、等待时间、总时间、排队时间、以及相关的块读取信息和执行报错信息等。
查询方式 | 说明 |
(g)v$ob_sql_audit | OceanBase 4.0.0.0 及以上版本,gv$xx查询该租户所有机器v$xxx查询该租户本机器(不保证路由准确) |
(g)v$sql_audit | OceanBase 4.0.0.0 以下版本gv$xx查询该租户所有机器v$xxx查询该租户本机器(不保证路由准确) |
sql_audit是基于虚拟表__all_virtual_sql_audit的视图, 该虚拟表对应的数据存放在一个可配置的内存空间中,能够记录并显示每一次SQL请求的来源、执行状态及统计信息,由于存放这些记录的内存是有限的,因此到达一定内存使用量,会触发淘汰。
- sql_audit 每隔 1s 会检测后台任务并根据以下标准决定是否淘汰:
- sql_audit 内存最大可使用上限为 avail_mem_limit = min (OBServer 可使用内存 *10%,sql_audit_memory_limit)。
- 当 avail_mem_limit 在 [64M, 100M] 范围内时, 内存使用达到 avail_mem_limit-20M 时触发淘汰。
- 当 avail_mem_limit 在 [100M, 5G] 范围内时, 内存使用达到 availmem_limit*0.8 时触发淘汰。
- 当 avail_mem_limit 在 [5G, +∞)范围内时, 内存使用达到 availmem_limit-1G 时触发淘汰。
- 当 sql_audidt 记录数超过 900 万条时,触发淘汰。
- sql_audit 根据以下标准决定是否停止淘汰:
- 如果是达到内存上限触发淘汰则:
- 当 avail_mem_limit 在 [64M, 100M] 时, 内存使用淘汰到 avail_mem_limit-40M 时停止淘汰。
- 当 avail_mem_limit 在 [100M, 5G] 时, 内存使用淘汰到 availmem_limit*0.6 时停止淘汰。
- 当 avail_mem_limit 在 [5G, +∞] 时, 内存使用淘汰到 availmem_limit-2G 时停止淘汰。
- 如果是达到记录数上限触发的淘汰则淘汰到 800 万行记录时停止淘汰。
2. sql_audit视图字段介绍
字段名称 | 类型 | 描述 |
SVR_IP | varchar(32) | ip地址 |
SVR_PORT | bigint(20) | 端口号 |
REQUEST_ID | bigint(20) | 请求的id号 |
TRACE_ID | varchar(128) | 这条语句的trace_id |
CLIENT_IP | varchar(32) | 发送请求的client ip |
CLIENT_PORT | bigint(20) | 发送请求的client port |
TENANT_ID | bigint(20) | 发送请求的租户id |
TENANT_NAME | varchar(64) | 发送请求的租户 名称 |
USER_ID | bigint(20) | 发送请求的用户id |
USER_NAME | varchar(64) | 发送请求的用户名称 |