业务挑战

数据库是企业应用系统的核心,SQL作为数据库查询、更新等操作的标准语言,重要性不言而喻。然而在实际的SQL开发过程中,也面临着诸多挑战:

  • 数据库应用开发人员的SQL能力良莠不齐,经常写出不符合标准、执行性能差的SQL,当这些风险SQL流入生产环境,必然会对应用系统造成极大影响。

  • 随着应用越来越复杂,对应SQL的规模也越来越大,一个SQL语句动辄数百甚至上千行,这对专家来说也是一个挑战,很难发现潜在的问题。

  • 在数据库异构替换场景中,应用开发人员对目标数据库了解不够深入,烂SQL或慢SQL会越来越多,也缺少相关专家对SQL的质量进行审核。

基于以上挑战,华为云数据库和应用迁移UGO提供了SQL审核功能。

特性概览

SQL审核功能基于审核规则管理、性能评估和索引推荐、全面的审核路径、API集成和对接四大特性,帮助应用开发人员深度看护业务代码、提升开发效率、减轻专家手工审核负担,并提前预防由于风险SQL引起的稳定性和性能问题,有效避免风险SQL流入生产环境。

  • 审核规则管理:支持规范类、设计类、性能类等数百条SQL审核规则,并支持自定义规则模版、风险等级、阈值和优化建议,帮助用户提升审核效率,满足不同场景的审核需求。

  • 性能评估和索引推荐:可以评估PL/SQL中SQL语句的性能问题并输出分析报告,也可以为用户推荐最优索引,帮助用户最大限度地提升SQL运行性能。

  • 全面的审核路径:支持对象审核、代码审核、动态SQL审核等多种审核路径,并支持对SQL语句进行智能诊断分析,帮助用户及时发现风险SQL,及早规避风险。

  • API集成和对接:提供审核相关的OpenAPI,帮助开发者完成应用和SQL审核的集成,提升业务开发效率。

该功能目前支持GaussDB、MySQL、PostgreSQL多种引擎,并对GaussDB做了深度适配,在GaussDB数据库领域具有很高的专业度和规则覆盖度,帮助客户解决GaussDB数据库替换场景的SQL审核问题。下文将围绕以上特性详细展开。

特性指引:专业的审核规则,提升审核效率

审核规则

根据内部SQL编程规范和外部客户的实际使用场景,整理出开发规范类、对象设计类、性能类等数百条SQL审核规则,对命名规范、索引设计、SQL性能优化、分布键及算子下推等常见SQL质量问题进行了深入分析和审核。

自定义审核模版

当用户需要根据自己的业务场景制定不同的要求和规范时,SQL审核允许用户自定义SQL审核规则模版,选择和修改适合自身业务场景的审核规则,生成不同的规则模版,并自定义风险级别、阈值及优化建议。

性能评估和索引推荐,提高SQL运行性能

PL/SQL性能评估

在GaussDB数据库替换过程中,用户难以对PL/SQL内的SQL进行完整准确的性能分析,静态分析不准确、工作量大,动态分析无法构造能覆盖全部分支的测试用例。SQL审核提供了PL/SQL性能评估功能,通过对PL/SQL内的逻辑分支进行剪枝和重构,从而保证内部所有的SQL语句被全部执行和分析。同时SQL审核将生产环境数据库的统计信息导入测试库,如此性能评估时将不会对生产环境数据库产生任何影响,同时可以在测试环境完成分析,检查PL/SQL中的SQL语句是否存在性能问题并输出分析报告。

前置索引推荐

索引是数据库优化的重要手段,通过合理的设计可以显著提升数据库性能,同时也需要避免过度使用索引,造成不必要的开销。很多生产环境的性能问题都是由于索引设计不规范或无索引导致的,SQL审核支持对SQL语句进行智能诊断分析,生成冗余索引、不合理索引、推荐索引、风险SQL等分析报告,通过合理的索引推荐和索引设计,帮助用户最大限度地提升数据库的整体性能。

全面的审核路径,全方位审核业务SQL

对象审核

数据库对象是数据库架构的基础,良好的数据库对象设计可以对数据库业务的稳定运行提供坚实的保障。对于数据库对象审核场景,SQL审核会采集数据库对象的定义语句,包括表、索引、约束、存储过程、触发器、函数、package、package body等,从对象设计规范、合理性、性能等角度进行审核,提高系统的可维护性、安全性和规范性。

代码审核

在应用开发阶段,代码审核是确保软件质量和稳定性的重要步骤。​对于代码审核场景,SQL审核会采集代码中的SQL语句并进行全面审核,如Java源码、MyBatis XML文件、MyBatis注解、SQL脚本等代码文件,这不仅有助于提升代码质量,减少技术债务,还能促进团队间的技术共享和协作,有效提升软件质量和开发效率。

动态SQL审核

动态SQL是一种在运行时实时生成的SQL语句,无法从代码或数据库中直接获取。​对于动态SQL审核场景,SQL审核可以通过JVM探针或流量录制等方式,采集业务运行过程中产生的SQL语句,极大提升SQL获取的完整度,有效降低潜在风险。

API集成和对接,提升业务开发效率

API集成和对接

为了帮助用户完成应用与SQL审核的对接,SQL审核提供了OpenAPI,用户可将SQL审核集成到持续集成/持续交付(CI/CD)流水线中,帮助开发团队在代码提交或合并时自动完成审核,并返回审核结果,方便快速修复问题,有效提高审核效率和SQL代码质量。也可以将SQL审核集成到IntelliJ IDEA或其他IDE插件中,为开发者提供实时的SQL代码检查和反馈,从而提升业务开发效率和代码开发质量。

API安全认证

用户可以登录控制台创建访问密钥,获取AK和SK妥善保存。SQL审核通过AK识别用户的身份,通过SK对请求数据进行签名认证,用于确保请求的机密性、完整性和请求者身份的正确性,保护OpenAPI接口安全性。

应用案例

SQL审核成功帮助某金融大行完成数据库替代,将业务平滑迁移至GaussDB,通过流水线、上传业务代码、扫描业务数据库等方式,自定义特性化审核规则,审核了70多个应用系统,扫描的SQL总数超过60万条,发现的问题SQL数超过31万条,其中严重问题超过8万条,一般问题超过11万条,提示问题超过11万条,应用开发人员根据审核报告提前发现大量不规范SQL,并对代码进行优化,有效避免了风险SQL流入生产环境。

华为云数据库和应用迁移UGO服务的SQL审核功能在数据库管理和开发过程中具有重要的价值,是任何数据库管理和开发过程中都不可或缺的一部分,不仅可以优化数据库和业务系统的性能和可靠性,还能提升代码的可读性和可维护性。在未来,UGO也将借助AI技术持续增强SQL审核和优化改写能力,帮助用户更好地管理数据库和开发数据库相关业务。


华为开发者空间,汇聚鸿蒙、昇腾、鲲鹏、GaussDB、欧拉等各项根技术的开发资源及工具,致力于为每位开发者提供一台云主机、一套开发工具及云上存储空间,让开发者基于华为根生态创新。点击链接,免费领取您的专属云主机

揭秘UGO SQL审核功能4大特性,让业务平滑迁移至GaussDB的更多相关文章

  1. Atitit 数据融合merge功能v3新特性.docx

    Atitit 数据融合merge功能v3新特性.docx 1.1. 版本历史1 1.2. 生成sql结果1 1.3. 使用范例1 1.4. 核心代码1 1.1. 版本历史 V2增加了replace部分 ...

  2. 基于Inception搭建MySQL SQL审核平台Yearing

    基于Inception搭建MySQL SQL审核平台Yearing Inception 1. Inceptionj简介 2. Inception安装 2.1 下载和编译 2.2 启动配置 Yearni ...

  3. SQL审核 Inception 中小团队快速构建SQL自动审核系统

    SQL审核与执行,作为DBA日常工作中相当重要的一环,一直以来我们都是通过人工的方式来处理,效率低且质量没办法保证.为了规范操作,提高效率,我们决定引入目前市面上非常流行的SQL自动审核工具Incep ...

  4. sql审核-避免离线sql导致的db集群故障

    关键词: sql审核.sql审批.sql检查.sql检测.sql执行 离线sql可能会导致的问题 首先,什么是离线sql呢?就是说手动触发执行的这种sql:相对的还有在线sql,位于我们的程序代码中, ...

  5. 天天写SQL,这些神奇的特性你知道吗?

    摘要:不要歪了,我这里说特性它不是 bug,而是故意设计的机制或语法,你有可能天天写语句或许还没发现原来还能这样用,没关系我们一起学下涨姿势. 本文分享自华为云社区<[云驻共创]天天写 SQL, ...

  6. 【原创】SQL审核系统

    前言 应公司dba的需求,做了一个sql审核并可以执行.记录的系统,整个系统有三种角色: DBA(需要管理员手动登记) 运维人员(需要管理员手动登记) 开发人员(默认注册后用户) 权限分配如下: 一些 ...

  7. SQL Server 2014 BI新特性(一)五个关键点带你了解Excel下的Data Explorer

    Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企业中的自助式的商业智能变得更加的灵活,从而也降低了商业智能的门槛. 此文是在微软商业智能官方博客里 ...

  8. Catalyst揭秘 Day7 SQL转为RDD的具体实现

    Catalyst揭秘 Day7 SQL转为RDD的具体实现 从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多.Catalyst就是个高层的智慧. Catalyst已经逐 ...

  9. php 实现购物车功能,以大苹果购物网为例,上图上代码。。。。

    首先是几个简单的登录页面 <body> <form action="chuli.php" method="post"> <div ...

  10. ES6的十大特性和认知

    ---恢复内容开始--- ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率.本文主要针对E ...

随机推荐

  1. fluent python-chap2

    1. 内置序列类型 容器序列: list tuple collections.deque 可以存放不同类型的数据. 存放的是它们所包含的任意类型的对象的引用. 扁平序列: str bytes byte ...

  2. 如何在 Web 前端做 3D 音效处理

    ​ 一.背景 在社交元宇宙.大逃杀等类型的游戏场景下,用户在通过简单语音交流外,结合场景也需要一些立体声效果来让用户感知游戏角色周围其他用户的存在及其对应的距离和方位,提高语音互动的趣味性. 为了满足 ...

  3. ASP.NET Core Library – Google libphonenumber (Country Dial Code)

    前言 Google libphonenumber 是 Java 的, ASP.NET Core 只是 port 过去而已. 以前在 angular2 学习笔记 ( translate, i18n 翻译 ...

  4. DOM – Browser Reflow & Repaint

    前言 没有深入研究过, 懂个概念就好, 等性能遇到问题在来看看. 以前写的笔记: 游览器 reflow 参考: reflow和repaint引发的性能问题 精读<web reflow> R ...

  5. ++i与i++在效率上的细微差别

    在一些特定的使用中, i++ 可能将原值用中间量存起来以待使用,下面看相关程序的汇编代码(使用 gcc ). i++ 源程序: #include <stdio.h> int main(){ ...

  6. ARM汇编: B、BL 与R14(LR)、R15(PC)

    1. b与bl指令的作用是什么? b与bl指令的作用:实现程序跳转,也就是调用子程序. 2. b与bl指令的区别是什么? b与bl指令的区别: b指令:简单的程序跳转,跳转到到目标标号处执行. bl指 ...

  7. DBA面试资源合集(含Oracle、MySQL、Redis等)-墨天轮

    如今正值金九银十招聘季,众多企业开放大批岗位等待新力量的注入,各位DBA们,你们是否正在激情备战中? 作为企业数据化进程中十分重要的一环,DBA的职责越来越重要,作为高薪资岗位之一,应聘DBA的竞争也 ...

  8. iOS 14 UIDatePicker适配问题,使用老的选择器样式

    iOS 14 UIDatePicker 在 13.4 新增了2个属性如下 @property (nonatomic, readwrite, assign) UIDatePickerStyle pref ...

  9. sqlSugar 使用原生模式链接数据库

    using System.Reflection; using zhulongxu_webapi_pro.Tools; namespace zhulongxu_webapi_pro.Services { ...

  10. break,continue,return的只要区别

    a)break 结束当前循环体 b)continue 结束本次的循环,执行下次的循环 c)return 结束函数体,并返回值 d)break 和 continue 写在循环里(for,while)re ...