Github地址:https://github.com/oceanbase/sql-lifecycle-management
SQLess是一款从蚂蚁OceanBase场景孵化的SQL智能诊断优化产品,提供了贯穿研发、集成、运维和持续优化各个阶段的SQL闭环能力。SQLess的愿景是让用户花更少时间关心SQL风险,可以更专注于SQL业务逻辑本身:Less on SQL tuning,More to SQL doing。SQLess在支持OceanBase的同时,将支持MySQL/PostgreSQL等更多数据库,为更多数据库生态的用户提供服务,一起建设通用SQL能力的开源生态。
同时SQLess提供了清晰简单的前端页面,让我们跟随文章快速体验一下主要功能吧!~
安装部署
SQLess支持两种部署方式,本地部署和使用容器部署
本地部署
- 执行环境: 推荐版本python == v3.8(tested on 3.8)
建议使用conda((https://github.com/conda/conda))来创建虚拟环境
conda create --name slm_3.8 python=3.8
conda activate slm_3.8
- 依赖安装
git clone https://github.com/oceanbase/sql-lifecycle-management.git
cd sql-lifecycle-management && make install
- 数据库初始化
# 填写本地元数据库链接方式
cd sql-lifecycle-management && vim db.cfg
# 本地元数据库初始化
mysql -h host_ip -u user_name -p
source init/init.sql
- 访问页面
cd sql-lifecycle-management && sh ./start.sh
访问页面http://localhost:8989
使用容器部署
- build
git clone https://github.com/oceanbase/sql-lifecycle-management.git
cd sql-lifecycle-management
docker build -t <your_tag> .
- run
docker run -itd -p 8989:8989 <image_id> /bin/bash
docker exec -it <container_id> /bin/bash
- 元数据库配置
# in docker
vim db.cfg
- 元数据库初始化
mysql -h host_ip -u user_name -p
source init/init.sql
如果没有现成的元数据库,您也可以使用Docker在本地安装mysql服务
docker run --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<your_password> -dit mysql:latest
- visit web
sh ./start.sh
visit http://localhost:8989
页面使用
第一次访问
点击 Add Database Engine
新增数据库资产/引擎
填写数据库版本和发布平台
填写数据库名和唯一标识
Optimize
选择需要的优化场景,点击SQL Optimize
当前SQL Optimize支持三种不同的使用场景:
- 不使用统计信息,仅仅提供SQL文本进行优化
- table is online,并且提供了在线库的统计信息
- table is not online,并且手动输入了统计信息
不使用统计信息
提供在线库统计信息
点击Copy,将得到执行的SQL,比如:
(SELECT CAST(CONCAT('{"columns": [',IFNULL(@cols,''),'], "indexes": [',IFNULL(@indexes,''),'], "tables":[',IFNULL(@tbls,''),'],
"version": "', VERSION(), '"}') AS CHAR) as metadata_json FROM
(SELECT (@cols:=NULL), (SELECT (0) FROM information_schema.columns cols
WHERE table_schema = 'sqless_test' AND table_name in ('sqless_base')
AND (0x00) IN (@cols:=CONCAT_WS(',', @cols, CONCAT('{"schema":"',cols.table_schema,'","table":"',cols.table_name,'",
"name":"', replace(cols.column_name,'"', '\"'), '","type":"', cols.column_type, '","nullable":',
IF(cols.IS_NULLABLE = 'YES', 'true', 'false'), '}')))) ) cols,
(SELECT (@indexes:=NULL), (SELECT (0) FROM information_schema.statistics indexes
WHERE table_schema = 'sqless_test' AND table_name in ('sqless_base')
AND (0x00) IN (@indexes:=CONCAT_WS(',', @indexes, CONCAT('{"schema":"',indexes.table_schema,'","table":"',indexes.table_name,'",
"name":"', indexes.index_name, '","column":"', indexes.column_name, '",
"cardinality":', indexes.cardinality, ',"unique":', IF(indexes.non_unique = 1, 'false', 'true'), '}')))) ) indexes,
(SELECT (@tbls:=NULL), (SELECT (0) FROM information_schema.tables tbls
WHERE table_schema = 'sqless_test' AND table_name in ('sqless_base') AND (0x00) IN
(@tbls:=CONCAT_WS(',', @tbls, CONCAT('{', '"schema":"', `TABLE_SCHEMA`, '",', '"table":"', `TABLE_NAME`, '",', '"rows":',
IFNULL(`TABLE_ROWS`, 0), ',', '"engine":"', IFNULL(`ENGINE`, ''), '"}')))) tbls) x);
将复制到的SQL文本,粘贴到在线的数据库中,获得一个schema的json
将获得的json贴到输入框中
示例:
{"columns": [{"schema":"sqless_test","table":"sqless_base",
"name":"a","type":"int(2)","nullable":false},{"schema":"sqless_test","table":"sqless_base",
"name":"b","type":"int(2)","nullable":false}], "indexes": [{"schema":"sqless_test","table":"sqless_base",
"name":"PRIMARY","column":"c",
"cardinality":1,"unique":true}], "tables":[{"schema":"sqless_test","table":"sqless_base","rows":1,"engine":"InnoDB"}],
"version": "5.7.36"}
然后点击Optimize获得优化的报告展示
人工提供统计信息
选择table is not online,点击Manual Configuration
可以人为调整表大小和每个列的过滤性
上传create table ddl
报告展示
三种模式呈现的报告样式相同,提供索引建议、PMD扫描建议和SQL Rewrite建议。
Review
跟optimize不同的是,optimize针对的是单SQL场景的优化
review针对的是提供某个xml的优化
当前只支持Mybatis,其他orm框架暂不支持
上传orm xml文件,同时也可以类似optimize一样,增加create table ddl来帮助优化
报告展示,Summary会呈现一个整体的情况,点击每一行的view即表示展示某个单一SQL的优化信息,和Optimize相同
Analysis
功能类似于Review,只是上传的文件不同;Review针对于ORM框架中xml的解析,Analysis针对于slow log的解析
报告展示和Analysis相同
Monitor
配置监控
点击Database Asset,选择要配置的监控库,点击Update Monitor
配置库的连接信息和数据采集内容
目前OceanBase支持4个维度的信息采集:SQL、执行计划、Schema和统计信息
性能数据查询
监控信息配置完毕后,点击SQL Montior Tab,查询监控数据
选择配置了采集任务的目标库,选择对应时间,点击查询
不同数据库引擎展示的指标不同,以下展示OceanBase的性能指标
点击左边的SQLID字段,可以展示这个SQL的详细信息,提供优化建议
也可以点击执行详情展示该SQL在不同采集批次内的详细性能信息
执行路径Tab页主要展示索引信息,列的NDV数据、SQL的执行计划信息
加入我们
SQLess致力于将开源社区打造成一个开放和有创造力的社区。欢迎任何形式的参与,包括且不限于提问、代码贡献、技术讨论等。期待收到社区想法和反馈,以推动项目持续前进。
Star us, join us, and rock the SQL together!