概述
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优化服务。