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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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,
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
1月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
阿里云日志服务(SLS)推出智能分析助手 SLS SQL Copilot,融合 AI 技术与日志分析最佳实践,将自然语言转换为 SQL 查询,降低使用门槛,提升查询效率。其具备原生集成、智能语义理解与高效执行能力,助力用户快速洞察日志数据价值,实现智能化日志分析新体验。
133 1
|
1月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。我们将带你深入了解,这一智能分析助手如何从用户真实需求出发,融合前沿 AI 能力与 SLS 十余年日志分析最佳实践,打造出面向未来的智能化日志分析体验。
193 24
|
15天前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
82 6
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
274 4
|
5月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
658 54
|
6月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
153 0
优化 Apache 日志记录的 5 个最佳实践
|
8月前
|
关系型数据库 MySQL
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
184 3
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
290 112
|
10月前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。

热门文章

最新文章