【笔记】用户指南—诊断与优化—SQL审计与分析—日志分析

简介: PolarDB-X支持SQL审计与分析功能,依托日志服务产品,提供强大的日志分析能力。本文将介绍常见场景的SQL日志分析语句及示例。

前提条件

开启SQL审计与分析功能。

注意事项

  • 相同地域下的所有PolarDB-X数据库的审计日志都会写入同一个日志服务的Logstore中,因此PolarDB-X的SQL审计与分析搜索框内会默认为您带上__topic__的过滤条件,保证您搜索到的SQL日志都属于同一地域下的PolarDB-X数据库。本文提供的所有查询语句,都需要在已有的__topic__过滤条件后追加使用。例如图中1部分的语句为默认过滤条件,序号2部分的语句为追加的过滤条件。
    3..png您可以单击原始日志各个字段后的详细内容,自动生成包含对应字段查询语句。

例如您可以单击sql_type后的Delete,查看所有包含Delete字段的SQL语句。4..png

快速定位SQL

您可以使用以下命令快速定位问题SQL。

  • 模糊搜索例如,您可以使用如下命令查询包含关键字为200003的SQL语句:
and sql: 200003
  • 字段搜索依赖预置的索引字段,PolarDB-X SQL审计还支持根据字段搜索。例如您可以使用如下命令查询DROP类型的SQL:
and sql_type:Drop
  • 多条件搜索您可以通过andor等关键字实现多条件的搜索。例如您可以使用如下命令查询针对id=200003行进行的所有DELETE语句:
and sql: 200003 and sql_type: Delete
  • 数值比较搜索索引字段中的affect_rowsresponse_time是数值类型,支持比较操作符。例如您可以使用如下命令查询response_time大于5秒的DROP语句:
and response_time > 5 and sql_type: Drop
  • 或者使用如下命令查询删除100行以上数据的SQL语句:
and affect_rows  > 100 and sql_type: Delete

SQL执行状况分析

您可以使用以下命令查看SQL执行状况。

  • SQL执行失败率您可以使用如下命令查询SQL执行的失败率:
| SELECT sum(case when fail = 1 then 1 else 0 end) * 1.0 / count(1) as fail_ratio
  • 查询结果如下图所示:

30.png

快速定位SQL

您可以使用以下命令快速定位问题SQL。

  • 模糊搜索例如,您可以使用如下命令查询包含关键字为200003的SQL语句:
and sql: 200003
  • 字段搜索依赖预置的索引字段,PolarDB-X SQL审计还支持根据字段搜索。例如您可以使用如下命令查询DROP类型的SQL:
and sql_type:Drop
  • 多条件搜索您可以通过andor等关键字实现多条件的搜索。例如您可以使用如下命令查询针对id=200003行进行的所有DELETE语句:
and sql: 200003 and sql_type: Delete
  • 数值比较搜索索引字段中的affect_rowsresponse_time是数值类型,支持比较操作符。例如您可以使用如下命令查询response_time大于5秒的DROP语句:
and response_time > 5 and sql_type: Drop
  • 或者使用如下命令查询删除100行以上数据的SQL语句:
and affect_rows  > 100 and sql_type: Delete

SQL执行状况分析

您可以使用以下命令查看SQL执行状况。

  • SQL执行失败率您可以使用如下命令查询SQL执行的失败率:
| SELECT sum(case when fail = 1 then 1 else 0 end) * 1.0 / count(1) as fail_ratio
  • 查询结果如下图所示:

1.png

高代价SQL模板Top 10

在大多数应用中,SQL通常基于若干模板动态生成的,只是参数不同。您可以使用如下命令通过模板ID找到应用中高代价的SQL模板:


| SELECT sql_code as "SQL模板ID", round(total_time * 1.0 /sum(total_time) over() * 100, 2) as "总体耗时比例(%)" ,execute_times as "执行次数", round(avg_time) as "平均执行时间",round(avg_rows) as "平均影响行数", CASE WHEN length(sql) > 200 THEN  concat(substr(sql, 1, 200), '......') ELSE trim(lpad(sql, 200, ' ')) end as "样例SQL" FROM  (SELECT sql_code, count(1) as execute_times, sum(response_time) as total_time, avg(response_time) as avg_time, avg(affect_rows) as avg_rows, arbitrary(sql) as sql FROM log GROUP BY sql_code) ORDER BY "总体耗时比例(%)" desc limit 10

统计结果中包括SQL模板ID,该模板SQL占总体SQL的耗时比例、执行次数、平均执行时间、平均影响行数以及样例SQL等信息。2.png


  • 说明
    上述查询是按照总体耗时比例%排序,您也可以根据平均执行时间执行次数进行排序帮助排查问题。
  • 事务平均执行时长对于相同事务内的SQL,预置的trace_id字段前缀相同,后缀为'-' + 序号;非事务的SQL的trace_id中则不包含'-'。因此,您可以使用如下命令对事务SQL的性能进行相关分析。说明由于事务分析涉及前缀匹配操作,查询效率会低于其它类型的查询操作。
    • 查询事务的平均执行耗时您可以使用如下语句查询事务的平均执行耗时:
| SELECT  sum(response_time) / COUNT(DISTINCT substr(trace_id, 1, strpos(trace_id, '-') - 1)) where strpos(trace_id, '-') > 0
    • 慢事务Top 10您可以按照事务的执行时间排序查询慢事务的列表:
| SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as "事务ID" , sum(response_time) as "事务耗时" where strpos(trace_id, '-') > 0 GROUP BY substr(trace_id, 1, strpos(trace_id, '-') - 1) ORDER BY "事务耗时" DESC LIMIT 10
    • 在此基础上,您可以使用如下命令,根据查到的慢事务ID搜索该事务下的所有SQL用于分析执行慢的具体原因:
and trace_id: db3226a20402000*
    • 大批量操作事务Top 10您可以使用如下命令按照事务内SQL影响的行数排序,查询大批量操作的事务列表:
| SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as  "事务ID" , sum(affect_rows) as "影响行数" where strpos(trace_id, '-') > 0 GROUP BY substr(trace_id, 1, strpos(trace_id, '-') - 1) ORDER BY "影响行数" DESC LIMIT 10

SQL安全性分析

您可以使用以下命令查看SQL安全性分析情况。

  • 错误SQL类型分布您可以使用如下命令查看错误SQL类型分布:
and fail > 0 | select sql_type, count(1) as "错误次数" group by sql_type
  • 高危SQL列表PolarDB-X 2.0中的高危SQL是指DROP或TRUNCATE类型的SQL(您也可以根据业务需求增加更多条件自定义高危SQL)。
    您可以使用如下命令查询包含DROP或TRUNCATE类型的SQL列表:
and sql_type: Drop OR sql_type: Truncate
  • 大批量删除SQL列表您可以使用如下命令大批量删除SQL列表:
and affect_rows > 100 and sql_type: Delete | SELECT date_format(from_unixtime(__time__), '%m/%d %H:%i:%s') as time,
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
8月前
|
存储 运维 监控
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
|
3月前
|
监控 安全 搜索推荐
使用EventLog Analyzer进行日志取证分析
EventLog Analyzer助力企业通过集中采集、归档与分析系统日志及syslog,快速构建“数字犯罪现场”,精准追溯安全事件根源。其强大搜索功能可秒级定位入侵时间、人员与路径,生成合规与取证报表,确保日志安全防篡改,大幅提升调查效率,为执法提供有力证据支持。
174 0
|
8月前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
590 118
|
5月前
|
监控 安全 NoSQL
【DevOps】Logstash详解:高效日志管理与分析工具
Logstash是ELK Stack核心组件之一,具备强大的日志收集、处理与转发能力。它支持多种数据来源,提供灵活的过滤、转换机制,并可通过插件扩展功能,广泛应用于系统日志分析、性能优化及安全合规等领域,是现代日志管理的关键工具。
858 0
|
7月前
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
998 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
|
6月前
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
9月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
402 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
9月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
9月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
196 1
|
11月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
618 7
MySQL事务日志-Undo Log工作原理分析

热门文章

最新文章