SQL优化从未如此简单,PawSQL Cloud实践指南(新增Oracle/人大金仓数据库语法支持)

2023年 10月 8日 51.7k 0

概述

PawSQL Cloud是PawSQL Advisor的SaaS版本,它整合了业界关于关系数据库查询优化最佳实践,通过查询重写优化、智能索引推荐,帮助应用开发人员及数据库管理人员一站式解决SQL性能问题。

相比较PawSQL Advisor/Paw Index Advisor等基于IntelliJ的插件,PawSQL Cloud免安装,不依赖其他工具,不仅适合应用开发人员,也适合数据库管理人员等非开发人员使用;PawSQL Cloud同时能够记录您的优化历史,便于日后查看和跟踪,同时优化结果可以通过链接和同事共享。

核心功能

  • 基于规则的SQL审查,包括正确性审查和性能优化审查规则。
  • 丰富的重写优化,推荐语义等价,但执行效率更高的SQL。
  • 智能索引推荐,满足各种SQL语法组合的场景下,推荐最优的索引组合。
  • 基于代价的性能验证,确保基于SQL重写和索引推荐的新方案有着更好的性能。
  • 索引分析,定位冗余索引,节省系统资源。

支持数据库

PawSQL基于自研的SQL解析器,支持多种数据库类型以及SQL方言,当前支持的数据库列表如下,还在不断增加中...

  • MySQL 5.6及以上 (official)
  • PostgreSQL 9.1及以上 (official)
  • openGauss 1.0及以上 (official)
  • MariaDB 5.6及以上(alpha)
  • Oracle 11g及以上(alpha)
  • KingbaseES V8(alpha)

三步完成您的SQL优化

  • 选择/创建工作空间
  • 输入待优化SQL
  • 查询优化配置

1、选择/创建工作空间

工作空间是你进行SQL优化的上下文环境,一般包括数据表、视图、索引的定义及其上的一些统计信息.

PawSQL Cloud支持以下方式创建您的工作空间。

  • 通过数据库连接信息创建工作空间
  • 支持MySQL/PostgreSQL/openGauss/MariaDB/Oracle等数据库
  • 通过DDL文件创建工作空间
  • 通过手工输入DDL语句创建工作空间
  • 通过数据库dump出来的DDL创建工作空间

提示: 对于每一种工作空间创建方式,PawSQL提供了在线指南帮您创建您的工作空间。

2、输入待优化SQL

待优化SQL是您进行查询优化的对象,它的来源可以是:

  • 数据库SQL日志。
  • 支持MySQL慢日志/通用日志,PostgreSQL的SQL日志,opengauss的SQL日志。
  • 文本文件;SQL语句间以;分割。
  • SQL文本;SQL语句间以;分割。

提示: 同样的,您可以看到PawSQL提供了在线指南帮您获取待优化的SQL。

3、创建查询优化

查询优化表示在您的工作空间内对一组SQL查询进行的性能优化诊断,一般包括SQL审查、重写优化、索引推荐等。

用户可以对优化任务输入、输出、数据源以及执行过程的配置。

图片

(1)基础配置

  • 优化ID:标识您本次优化的ID
  • 是否仅索引推荐:此选项控制是否启用重写优化,在SQL已经上线的情况下,修改SQL可能无法立即实施,在此情况下,可以禁用此选项;PawSQL将不会重写您的SQL,只是基于原SQL进行索引推荐。

(2)优化验证

  • 是否更新DDL信息,是否连接到验证数据库获取最新的DDL信息。
  • 是否启用What-If性能验证,此选项控制是否对推荐的优化建议进行性能验证,如果启用此选项,PawSQL在优化详情中会提供SQL优化前后的执行计划及代价信息,从而确保推荐的优化建议(重写优化及索引推荐)能够真实提升数据库性能。
  • 性能验证时是否启用Analyze,如果启用此选项,则在进行What-If性能验证时获取SQL的真实解析及执行时间,避免了MySQL对中间结果表explain的缺陷,代价估算更加精确。

注意:最后两个性能验证的选项应避免在生产库上使用,因为对于没有内置what-if(内置虚拟索引)的数据库(MySQL/Postgres皆是)来说,性能验证是通过创建推荐索引并进行explain分析执行计划,然后删除推荐索引的方式来做的。这个过程在生产库上会消耗一定的资源,且执行时间可能会比较长,可能对生产库上的业务运行产生影响。

(3)索引推荐配置

  • 是否和现有索引去重,此选项表示推荐索引时,是否和现有索引去重。启用此选项的场景是不考虑删除现有的索引,因为输入的SQL只是并不能代表这个数据库上所有的SQL场景,所以只考虑新增对输入SQL有帮助的索引。如果能够确保输入的SQL包含此数据库所有的查询,那么只保留推荐的索引就可以了,这种情况下可以不选择此选项,并且使用新推荐的索引代替现有的索引。
  • 是否推荐覆盖索引,此选项表示推荐索引时是否考虑覆盖索引策略。覆盖索引可以让查询只访问索引而不需要访问数据表(请参考《高效索引的准则》),在一些场景下,覆盖索引能够大幅提示查询性能。但是覆盖索引会包含查询条件中没有使用的列,从而增加索引所占的磁盘空间大小。
  • 覆盖索引的最大列数,此项设置表示在进行覆盖索引推荐时,索引的最大列数限制。如以上所述,覆盖索引会包含查询条件中没有使用的列,从而增加索引所占的磁盘空间大小。此选项可以控制覆盖索引所占空间的大小,让PawSQL能够为用户提供一定空间限制的情况下利用覆盖索引的非回表特性。
  • 索引的最大列数,此选项限制索引的最大列数,索引会占用一定的磁盘空间,且太多列的索引会让索引树的层级加深,从而增加索引访问的代价。用户可以通过此项设置控制索引的最大列数。
  • 单表最大索引数目,如《高效索引的准则》中所述,索引不是免费的午餐,它会占用磁盘空间,并对对DML操作产生负面影响,因为对于数据库管理器写入表的每一行,它还必须更新任何受影响的索引。因此,PawSQL通过此选项来审查单表的索引数量,并进行警告提示。

图片

(4)优化规则配置

  • 是否启用该优化规则,以及修改相应阈值

图片

优化结果解析

汇总结果展示

 内容包括

  • 优化概要
  • 推荐的索引
  • SQL优化列表

图片

单SQL优化详情

  • 原始SQL

图片

  • 重写优化
  • 重写后的SQL
  • 重写所应用的优化策略
  • 重写优化对应的SQL片段

图片

  • 规则审查情况
  • 违反的审查规则
  • 违反规则的SQL片段

图片

  • 索引推荐情况
  • 推荐的索引
  • 索引推荐的依据

图片

  • 索引分析
  • 各个表上的索引列表,是否是冗余索引
  • 现有索引如何帮助此SQL
  • 单表索引个数超过阈值提示

图片

  • 性能验证
  • 性能提升比
  • 验证生效的推荐索引
  • 优化之前的执行计划
  • 优化之后的执行计划

图片

关于PawSQL

PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,Opengauss,Oracle(alpha), MariaDB(alpha)等,提供的SQL优化产品包括:

  • PawSQL Cloud,在线自动化SQL优化工具,支持SQL审查,智能查询重写、基于代价的索引推荐,适用于数据库管理员及数据应用开发人员,
  • PawSQL Advisor,JetBrain的DataGrip、IDEA等IDE的插件, 适用于数据应用开发人员,可以IDEA/DataGrip的应用市场通过名称搜索“PawSQL Advisor”安装。
  • PawSQL Engine, 是PawSQL系列产品的后端优化引擎,可以以docker镜像的方式独立安装部署,并通过http/json的接口提供SQL优化服务。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论