一、 软件讲解
1. SCA 介绍
SCA 全称 SQL Compatible Analysis,是一款异构数据库迁移前的 SQL 兼容和性能评估工具。
可用于异构数据迁移前的兼容性评估,评估源数据库中的实际业务 SQL 在目标库中是否存在语法问题,以及评估两款异构数据库中的 SQL 实际执行的性能差异。
本工具目前支持五种源端数据库,包括: Oracle, MySQL, DB2, PostgreSQL, Informix。
**适用于**: MogDB(以及其他基于 openGauss 的数据库)
SCA 程序可运行如下 14 种类型的任务:
程序运行相关的任务
I [Initialize]: 初始化,用于初始化 SCA 资料库
L [Apply License]: 申请 License,用于 License 申请的任务
采集相关的任务
OC [Oracle Collection]: Oracle 采集,用于采集 Oracle 数据库中执行过的业务 SQL,需要长时间采集
MC [MySQL Collection]: MySQL 采集,用于采集 MySQL 数据库中执行过的业务 SQL,需提前配置慢日志,然后一次性采集
DC [DB2 Collection]: DB2 采集,用于采集 DB2 数据库中执行过的业务 SQL,需要长时间采集
PC [PostgreSQL Collection]: PostgreSQL 采集,用于采集 PostgreSQL 数据库中执行过的业务 SQL(依赖于 pg_stat_statments 插件),需要长时间采集
IC [Informix Collection]: Informix 采集,用于采集 Informix 数据库中执行过的业务 SQL(需要先手动开启 global sql trace 功能),需要长时间采集
分析相关的任务
OI [Oracle Inspection]: Oracle 兼容评估,用于评估源端 Oracle 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
MI [MySQL Inspection]: MySQL 兼容评估,用于评估源端 MySQL 中采集到的业务 SQL,在目标端MogDB 中的实际兼容性
DI [DB2 Inspection]: DB2 兼容评估,用于评估源端 DB2 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
PI [PostgreSQL Inspection]: PostgreSQL 兼容评估,用于评估源端 PostgreSQL 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
II [Informix Inspection]: Informix 兼容评估,用于评估源端 Informix 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
OS [Oracle Simulation]: Oracle 性能评估,用于评估源端 Oracle 中采集到的业务 SQL,在目标端 MogDB 中的执行性能
OIS [Oracle Inspection & Simulation]: Oracle 兼容和性能评估,等同于 OI + OS 两种任务同时进行
**注意:**
兼容评估,需要有完整的源库结构,推荐使用 MTK 工具进行源数据库结构迁移,测试用途下也可使用 SCA 自动创建测试目标库结构
SQL 模拟,需要有完整的源库数据和数据,推荐使用 MTK 工具进行源数据库结构以及数据迁移
2. 操作系统与平台支持
SCA 目前支持在如下操作系统和平台架构下运行:
Linux x86_64
Linux arm64 (ARM 平台由于没有 DB2/Informix 客户端,故不支持 DB2/Informix 数据采集)
MacOS (MacOS 版本不支持 openGauss/MogDB 中的 SHA256 加密认证方式)
3. 数据库支持
SCA 目前支持的源端与目标端数据库类型如下:
源端:
Oracle: 不低于10.2
MySQL: 不低于5.5
DB2: 不低于11.5
PostgreSQL: 不低于 9
Informix: 不低于14.10 (更低版本未做验证)
File: MySQL slowlog
目标端:
MogDB/openGauss: 不低于 2.0
PostgreSQL: 不低于 13.0
**注意:** 平台支持,与数据库支持没有相关性,数据库可以运行在其他平台,如 Windows/AIX 等,只要从数据库到 SCA 运行主机网络与端口互通即可。
二、SCA 安装使用
1. 部署步骤
程序已打包为二进制可执行文件,无需额外的部署操作。
程序文件上传后,确认能正常通过网络连接数据库即可直接使用。
2. 常用命令
注意:以下以 x8664 架构下的 Linux 系统为例进行说明,其他 ARM 平台或 MacOS 系统需要修改对应的命令名称。
申请 License (软件第一次运行的时候,需要先联机申请 License)
```s 运行过程中,需要输入用户邮箱 申请到的 License 数据会发送到输入的邮箱中。 将 License 数据拷贝出来,并写入 SCA 同目录中的 license.json 文件内即可 ./sca_linux_x86_64 T L ```
初始化资料库 (对于同一个目标MogDB数据库,只在第一次运行时需要初始化资料库)
```s ./sca_linux_x86_64 T i H <hostP <portN <repodatabaseU <repouserE <repopassworduser <super_userpassword <super_password> ```
Oracle 数据采集 (无需资料库)
```s 作为测试用途,可添加如下参数加快 SQL 采集: q 0.001 Q 60 m off ./sca_linux_x86_64 T OC s SCOTT h <hostp <portn <target_dbu <Oracle_usere <Oracle_password> ```
从指定 MySQL 慢日志采集
```s ./sca_linux_x86_64 T MC d <data_directoryslowlog=<slow_logfile> ```
从指定 MySQL 服务器进行自动采集
```s ./sca_linux_x86_64 T MC d <data_directoryh <hostp <portn <target_dbu <MySQL_usere <MySQL_password> ```
进行 Oracle 兼容评估 (资料库已初始化,且资料库登录信息均为默认值)
```s ./sca_linux_x86_64 T OI d <unzipped data directoryn <target_db> ```
只进行 SQL 模拟 (资料库已初始化,且资料库用户密码信息均为默认值)
```s ./sca_linux_x86_64 T OS h <hostp <portn <target_dbd <unzipped data directory> ```
同时进行SQL兼容度与性能评估 (资料库已初始化)
```s ./sca_linux_x86_64 T OIS h <hostp <portn <target_dbu <repo_usere <repo_passwordd <unzipped data directory> ```
三、SCA 命令行选项
SCA 为纯命令行工具,所有功能均可通过单一的可执行程序完成。
1. 通用选项
通用选项在各类任务中均有可能会使用。
help (帮助信息)
在使用分析程序前,建议仔细阅读帮助信息(命令: ./sca_linux_x86_64 help):
```s Introduction: SCA is a tool used to do SQL lifecycle inspection and simulation when migration from heterogeneous database to MogDB. Source databases supported as below: 1. Oracle : SQL Inspection, Simulation 2. DB2 : SQL Inspection 3. MySQL : SQL Inspection 4. PostgreSQL : SQL Inspection 5. Informix : SQL Inspection Options: [ Overall ] help : Show help message v, version : Show SCA version T, type : Run type: : I = Init SCA repository : L = Apply for license : [Analysis: Target required] : OI = Oracle Inspection, this is default type : MI = MySQL Inspection : DI = DB2 Inspection : PI = PostgreSQL Inspection : II = Informix Inspection : OS = Oracle Simulation, just like Oracle SPA : OIS = Oracle Inspection & Simulation : [Collection: No need of target DB] : OC = Oracle Collection : MC = MySQL Collection : DC = DB2 Collection : PC = PostgreSQL Collection : IC = Informix Collection d, data : Unzipped data directory for analyzer, or directory for collection D, dataid : Use data with data id existed in the repository w, workers : Parallel workers for tasks, default: 10 x, debug : Enable debug mode l, logfile : Output to both logfile (without progressbar) and screen (with progressbar) L, logonly : Output to only logfile (without progressbar) F, force : Force mode in REPO Creation, drop old objects before create it r, report : Final report file location, default in data directory with name 'report' license : License file, default is [./license.json] sqlmodified : Modified SQL list used in simulation sqlconfig : SQL configuration file (for internal use) sqltransformer : Regular rules for SQL transformation (for internal use) : Format: [{"name": "xxx" : "source": "xxx", : "target": "xxx", : "comment": "xxx"}, ...] steps : Run given steps (with step id or name) in analysis tasks : Valid in type: : OI/MI/DI/PI/OS/OIS : Step valid in order: : 1.load : Load data from file to repository database : 2.make_object : Create source objects in target database : 3.inspect : Do SQL compatible analysis : 4.rollback_object : Rollback source objects created by make_object : 5.simulate : Do SQL performance analysis : 6.html_report : Genarate summary report in HTML format : 7.excel_report : Genarate detail report in Excel format : Option value for example: : steps 'load' : Just load data to repository database : steps 'inspect' : Run steps after 'inspect' (Step 37) : steps '5' : Run steps before 'simulate' (Step 15) : steps '25' : Run steps from 'make_object' to 'simulate' (Step 25) upgrade : Upgrade current binary SCA command [ Repository Connection ] H, repohost : Repository DB Server host address, default: 127.0.0.1 P, repoport : Repository DB server port, default: 5432 N, reponame : Repository database, default: sca_db U, repouser : Repository user, default: sca_repo E, repopassword : Repository password, default: SCA@password user : Administrator used to create repository DB and user, default: mogdb password : Password for Administrator, default: mogdb [ Source & Target Connection ] h, dbhost : Source & Target DB Server host address, default same as H p, dbport : Source & Target DB server port, default same as P n, dbname : Source & Target database, default same as N u, dbuser : Source & Target user, default same as U e, dbpassword : Source & Target password, default same as E targettype : Target database type in analysis tasks, default: MOGDB : Valid type: ORACLE, MOGDB, OPENGAUSS, POSTGRESQL, MYSQL, DB2 [ Collection Options ] q, sqldays : How many days for session sql data, default: 7 Q, sqlinterval : SQL collect interval in seconds, default: 600 s, schemainclude : Users/Schemas included in data collection, default: '' S, schemaexclude : Users/Schemas excluded in data collection : Default: <<depends on DB type>> m, enablemonitor : Starting background monitor process in SQL Collection : Valid values: 1/on/true/t = ENABLE, default: on : 0/off/false/f = DISABLE slowlog : MySQL slowlog for client data collection ignorebindplan: Ingore SQL binds and plans in Oracle data collection sqlcsv : SQL file in csv format for SQL Inspection (@todo) Usage: 0. Apply for license ./sca_linux_x86_64 T L 1. Init repository (used for first running) ./sca_linux_x86_64 T i H <hostP <portN <repodatabaseU <repouserE <repopassworduser <super_userpassword <super_password> 2. Oracle data collection Notice: "q 0.001 Q 60" means gather Session SQL only once # "m off" means do not monitor system status (CPU Idle and Disk Free) ./sca_linux_x86_64 T OC s SCOTT h <hostp <portn '<targetdb>' u <oracleusere <oraclepasswordq 0.001 Q 60 m off ./sca_linux_x86_64 T OC s SCOTT h <hostp <portn '<targetdb>' u <oracleusere <oraclepassword> 3. MySQL data collection using slowlog file ./sca_linux_x86_64 T MC d <reportdirectoryslowlog=<slowlogfile> 4. Oracle SQL compatible analysis (Required: Repository, Target DB) Note: use [H/P/N/U/E] options to assign the repository use [h/p/n/u/e] options to assign the target database ./sca_linux_x86_64 T OI d <unzipped data directoryn <target_db> 5. Oracle SQL performance simulation (Required: Repository, Target DB) Note: use [H/P/N/U/E] options to assign the repository use [h/p/n/u/e] options to assign the target database ./sca_linux_x86_64 T OS d <unzipped data directoryn <target_db> 6. MySQL SQL compatible analysis (Required: Repository, Target DB) Not e: use [H/P/N/U/E] options to assign the repository use [h/p/n/u/e] options to assign the target database ./sca_linux_x86_64 T MI d <unzipped data directoryh <hostp <portn <targetdb> ```
v, version (查看版本)
查看当前 SCA 的版本信息:
```s hongyedba@localhost ~ % ./sca_linux_x86_64 v SCA version: 5.1.0 ```
T, type (任务类型)
默认值: OI
指定任务类型,目前 SCA 支持如下类型的任务:
程序运行相关的任务
I [Initialize]: 初始化,用于初始化 SCA 资料库
L [Apply License]: 申请 License,用于 License 申请的任务
采集相关的任务
OC [Oracle Collection]: Oracle 采集,用于采集 Oracle 数据库中执行过的业务 SQL,需要长时间采集
MC [MySQL Collection]: MySQL 采集,用于采集 MySQL 数据库中执行过的业务 SQL,需提前配置慢日志,然后一次性采集
DC [DB2 Collection]: DB2 采集,用于采集 DB2 数据库中执行过的业务 SQL,需要长时间采集
PC [PostgreSQL Collection]: PostgreSQL 采集,用于采集 PostgreSQL 数据库中执行过的业务 SQL(依赖于 pg_stat_statments 插件),需要长时间采集
IC [Informix Collection]: Informix 采集,用于采集 Informix 数据库中执行过的业务 SQL(需要先手动开启 global sql trace 功能),需要长时间采集
分析相关的任务
OI [Oracle Inspection]: Oracle 兼容评估,用于评估源端 Oracle 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
MI [MySQL Inspection]: MySQL 兼容评估,用于评估源端 MySQL 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
DI [DB2 Inspection]: DB2 兼容评估,用于评估源端 DB2 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
PI [PostgreSQL Inspection]: PostgreSQL 兼容评估,用于评估源端 PostgreSQL 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
II [Informix Inspection]: Informix 兼容评估,用于评估源端 Informix 中采集到的业务 SQL,在目标端 MogDB 中的实际兼容性
OS [Oracle Simulation]: Oracle 性能评估,用于评估源端 Oracle 中采集到的业务 SQL,在目标端 MogDB 中的执行性能
OIS [Oracle Inspection & Simulation]: Oracle 兼容和性能评估,等同于 OI + OS 两种任务同时进行
d, data (数据目录)
除了资料库初始化(T I)之外的所有任务类型,都可以指定 d 数据目录。
采集任务会将采集到的数据写入到 d 指定的数据目录。
分析任务会从数据目录中读取数据,将数据插入到资料库表中,最终生成的报告结果默认也会写入到数据目录下。
D, dataid (数据编号)
指定数据编号,然后直接从资料库读取指定编号的数据,而不是重新从数据目录中读取并加载数据。
指定 D选项后,会跳过加载数据的步骤,直接执行相关的分析任务。
w, workers (并发度)
默认值:10
指定用于运行任务的并发度大小,适量的并发度有助于提高各个任务的运行速度。
并发度用于: 文件数据加载到资料库,SQL兼容度评估,SQL复杂度评估,SQL性能模拟等操作中。
注意:
在SQL模拟任务中,并发度越大,可能导致单条SQL的执行效率下降,需要依据实际生产环境的负载压力选取合理的并发度,通常设置为生产库的平均活跃会话数。
x, debug (Debug模式)
开启Debug 模式,不会影响正常的分析逻辑,但是会输出大量的日志,通常用于辅助分析程序本身的运行异常。
l, logfile (日志文件)
指定程序日志文件,程序输出会同时输出到终端命令行与日志文件中。
L, logonly (仅日志文件)
指定程序日志文件,程序输出会仅输出到日志文件中。
F, force (强制模式)
是否启用强制模式,强制模式会在资料库初始化场景下生效。
在资料库初始化过程中,如果启用强制模式,会先删除资料库,然后重新创建。
r, report (报告目录)
默认值:<DATA_DIR>/report
指定报告目录,这里的报告包括 兼容评估 报告和 SQL模拟 报告,都是 html 格式报告,可离线查看。
同时,对于 兼容评估 任务,还会产生 sql_detail_list.csv 文件,记录所有 SQL 的评估结果,以及可能存在的改写方案。
license (License文件)
默认值:./license.json
License 文件的位置。
sqlmodified (自定义SQL改写)
SQL 性能模拟中,每次运行性能模拟均会产生不支持 SQL 列表文件(存储于自定义的报告目录中),名称为:Simulator_modified_list.csv。
该选项用于在 SQL 性能模拟任务中,手动修改部分不支持的 SQL ,以达到更多的 SQL 支持率,尽可能对比更多的 SQL 性能变化。
自定义SQL 修改的流程如下:
使用标准的流程完成 SQL 性能模拟任务(第一次性能模拟)
打开报告目录中的 Simulator_modified_list.csv 文件,手动修改该文件中的SQL语句语法,使其能在目标数据库中正确执行
在原有选项的前提下,增加 D <dataidsqlmodified <repordir>/Simulator_modified_list.csv 选项,即可重新对失败的 SQL 进行性能模拟
继续检查步骤二和步骤三,直到最终性能模拟的 SQL 范围符合预期,取出最终的分析报告
sqlconfig (自定义SQL)
【高级用法】 指定各个步骤中使用的SQL命令,仅为内部紧急故障调试使用。
sqltransformer (SQL转换规则)
【高级用法】 指定从源库到目标库的 SQL 转换规则,使用正则匹配进行转换。
steps
在分析过程中,运行指定的步骤,可使用步骤名称或编号。
该选项在以下任务类型中生效: OI, MI, DI, PI, OS, OIS
有效的步骤编号与名称说明如下:
load : 将数据载入到资料库 make_object : 在目标数据库中创建源库对象 inspect : 执行 SQL 兼容性分析 rollback_object : 回退 make_objects 步骤中创建的源库对象 simulate : 执行 SQL 性能模拟分析 html_report : 创建 HTML 格式的汇总报告 excel_report : 创建 Excel 格式的详细报告
合法的使用示例如下:
steps 'load' : 只执行数据入库步骤 steps 'inspect' : 执行 'inspect' 之后的各个步骤 (步骤 37) steps '5' : 执行 'simulate' 之前的各个步骤 (步骤 15) steps '25' : 执行从 'make_object' 到 'simulate' 中的步骤 (步骤 25) upgrade
在运行环境可联网的情况下,自动升级当前 SCA 可执行程序。
2. 资料库选项
H, repohost (资料库IP地址)
默认值:127.0.0.1
资料库数据库 IP 地址。
P, repoport (资料库端口)
默认值:5432
资料库数据库端口。
N, reponame (资料库名称)
默认值: sca_db
资料库数据库名称。
U, repouser (资料库用户)
默认值:sca_repo
资料库数据库登录用户。
E, repopassword (资料库密码)
默认值:SCA@password
资料库数据库登录密码。
user (管理员用户)
资料库管理员用户,用于初始化资料库过程中,创建资料库用户,和资料库数据库。
password (管路员密码)
资料库管理员用户登录密码,用于初始化资料库过程中,创建资料库用户,和资料库数据库。
3. 源或目标库连接
h, dbhost (源或目标库IP地址)
源或目标库数据库 IP 地址,默认继承 H 选项值。
p, dbport (源或目标库端口)
源或目标库数据库端口,默认继承 P 选项值。
n, dbname (源或目标库名称)
源或目标库数据库名称,默认继承 N 选项值。
在 SQL分析任务中,指定目标库名称,通常是使用 MTK 或其他数据迁移工具,进行数据库结构和数据迁移时,在 MogDB 端创建的目标数据库。
需要注意的是,资料库用户默认需要对目标库有完全的操作权限,默认资料库是管理员权限。
在兼容评估中,只需要目标库有对象结构即可
在SQL模拟中,需要目标库既有对象结构,也有真实对等的全量生产数据,否则性能模拟的结果不具有参考意义
u, dbuser (源或目标库用户)
源或目标库数据库登录用户,默认继承 U 选项值。
e, dbpassword (源或目标库密码)
源或目标库数据库登录密码,默认继承 E 选项值。
targettype (目标库类型)
指定分析任务总,目标数据库类型,默认为 MOGDB。
当前此参数并未完善,仅支持 MOGDB/POSTGRESQL。
4. 数据采集选项
q, sqldays (SQL采集天数)
指定SQL 相关数据的采集总天数,由于从会话缓存 GV$SQLAREA 中采集已执行过的 SQL 数据, 存在一定的概率漏采,可通过延长采集天数,减小漏采的概率。
默认会采集一周 7 天的 SQL 数据。
Q, sqlinterval (SQL采集间隔)
指定SQL 相关数据的采集间隔(单位:秒),默认每 10 分钟采集一次。
每次采集到的 SQL 数据会和已采集的数据进行对比去重,避免重复数据太多导致的数据文件过大。
s, schemainclude (Schema白名单)
指定数据采集的 Schema 白名单,即只采集白名单列表中列出的 Schema 相关数据。
S, schemaexclude (Schema黑名单)
指定数据采集的 Schema 黑名单,即不采集黑名单列表中列出的 Schema 相关数据。
默认会将Oracle 系统用户列入 Schema 黑名单中。
m, enablemonitor (资源监控)
是否在后台启用资源监控子进程,默认启用。
资源监控子进程会定期(间隔 3 秒)查询当前服务器的 CPU 使用率,以及数据目录所在文件系统的剩余空间。
当 CPU使用率高于 90%,或者文件系统剩余空间低于 100MB 时,监控子进程会触发信号,停止采集主进程,避免因为资源问题导致服务器故障。
slowlog (慢查询日志)
采集时,指定 MySQL 慢查询日志文件。
在采集程序无法访问目标 MySQL 数据库,以及不在 MySQL 服务器上运行采集程序时,可手动将目标库 MySQL 慢日志取出来,使用当前选项指定慢日志即可解析并生成对应的采集数据,可用于后续 MySQL SQL 兼容性评估任务。
ignorebindplan (忽略绑定变量与执行计划)
在Oracle 数据采集过程中,忽略 SQL 绑定变量和执行计划数据的采集,忽略采集能避免由于绑定变量或执行计划解析而导致的 Oracle 字典查询 Bug,并加快数据采集时间,但可能导致后期数据分析的精度下降。
四、SCA 结果说明
SCA 结果分为两类:
采集结果 : 源库(Oracle)中的数据采集结果,该结果会自动打包为一个 zip 文件,并在采集最后给出明确文件位置提示。
分析结果 : 在目标MogDB/openGauss 中执行完分析后生成的分析报告,报告为单独一个文件夹,其中为离线 HTML 格式的报告文档,可任意进行拷贝传阅。
1. 采集结果
数据采集结果会自动打包成 zip 数据包,默认存储在程序当前目录下。
采集完成之后的结果提示信息如下:
```s 20220215 19:20:40.301126 INFO [runMe.py:356] +==================== [ Summary Information ] ====================+ 20220215 19:20:40.301184 INFO [runMe.py:357] | Task Name File Name File Size | 20220215 19:20:40.301222 INFO [runMe.py:358] | | 20220215 19:20:40.301260 INFO [runMe.py:360] | SCA_SESSION_SQL sca_sql_information.dat 3.65 KB | 20220215 19:20:40.301294 INFO [runMe.py:360] | SCA_SESSION_SQL_PERF sca_sql_performance.dat 3.29 KB | 20220215 19:20:40.301326 INFO [runMe.py:360] | SCA_MYSQL_USER_HOST sca_mysql_user_host.dat 1815 B | 20220215 19:20:40.301357 INFO [runMe.py:360] | SCA_DATABASE sca_database.dat 163 B | 20220215 19:20:40.301387 INFO [runMe.py:361] +=================================================================+ >>> Final Result is: >>> >>> /Users/hongyedba/Desktop/SCA_MySQL_test.zip ```
2. 分析报告
兼容性分析与 SQL 性能模拟均会生成对应的分析报告,分析报告默认位于指定的数据目录中,也可以使用 r 选项指定报告的输出目录。
3. 报告入口
分析报告目录中,index.html 为报告的入口,点击该文件,使用默认浏览器(推荐使用Chrome)打开,即可查看分析报告。
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result1.png)
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result2.png)
3. SQL 兼容度汇总
SQL 兼容度汇总页面展示本次兼容度分析的相关结果数据,页面表格中按照用户名,程序名,模块名汇总,展示系统中采集到的所有 SQL,以及这些 SQL 在MogDB 中的支持情况。
注意: 不同数据库中,该表格展示的内容也略有差异。
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result3.png)
4. SQL 改写规则
SQL 改写规则页面展示本次分析中涉及到的 SQL 改写相关的规则信息。
其中使用情况字段展示该条规则的触发情况:
Match 为规则在 SQL 中的命中数量
Count 为规则匹配的 SQL 数量
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result4.png)
5. SQL 复杂度分布
SQL 复杂度分布页面展示采集到的 SQL 的复杂度分布情况。 复杂度分布目前的评判标准如下:
SQL 涉及的表的数量,表数量越多,复杂度越高
SQL 中使用 connect by 语法的次数,使用 connect by 的次数越多,越有可能出现执行性能问题,对应 SQL 的复杂度越高
SQL 中使用自定义函数的数量,自定义函数中的逻辑复杂度不明,所以使用自定义函数越多,SQL 复杂度越高
SQL 在 Oracle 中的实际执行函数,执行耗时越高,则认为对应的 SQL 复杂度越高
最终每条 SQL 的复杂度则按照以上 4 个评判标准进行汇总。SQL 复杂度越高,在迁移后越需要关注 SQL 的执行性能,避免性能问题导致的业务故障。
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result5.png)
6. SQL 性能对比(性能对比汇总)
SQL 性能对比汇总页面展示两个信息:
性能对比的基础信息,性能对比的一些基础配置,以及对比时使用到的相关阈值设置
SQL 性能汇总,按照总体,提升,下降,不支持,超时等维度对 SQL 进行汇总,分析各类 SQL 对整体负载的影响
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result6.png)
7. SQL 性能对比(Top by Workload/SQL, Timeout)
SQL 性能对比中 Top by Workload, Top by SQL, Timeout 等页面内容格式较为相似,以 Top by Workload 为例进行说明。
该列表展示影响最大的 100 条 SQL,其中 SQL FMS 字段为超链接,点击可进一步查看对应 SQL 的分析详情。
SQL 的性能影响有两个评估维度:
SQL 影响: 当前 SQL 在单条 SQL 执行情况下的性能变化影响的比例
负载影响: 当前 SQL 参考其总执行次数,综合评估其对整个 SQL 负载的性能变化,以及对整体 SQL 性能的影响
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result7.png)
8. SQL 性能对比(SQL 详情)
SQL详情页面展示如下几个方面的内容:
SQL 执行信息: SQL 在Oracle 以及 MogDB 中的执行信息,其中Oracle 中的执行信息来源于动态性能视图,MogDB 中的执行信息来源于实际 SQL 执行。
SQL 文本: SQL 在Oracle 中的执行文本,以及在 MogDB 中的实际执行文本。
SQL 绑定变量: SQL 在Oracle 中的绑定变量信息,该绑定变量信息会应用到 MogDB 中执行的 SQL 文本内,使其能在 MogDB 中真实的模拟业务执行。
Oracle 执行计划: SQL 在 Oracle 中的执行计划,该执行计划来源于动态性能视图。
MogDB 执行计划: SQL 在 MogDB 中的执行计划,该执行计划来源于实际执行,程序会自动对 MogDB 中的执行计划进行初步分析,标识出其中潜在的性能问题点。
MogDB 对象信息: SQL 中涉及到的对象在 MogDB 中的相关结构,以及统计信息。
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result8.png)
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result9.png)
![](https://cdnmogdb.enmotech.com/docsmedia/sca/result10.png)
9. 数据报告
在报告的根目录中的SCA_Data_Report_<db_name>_<data_id>.xlsx 文件中记录了本次 SQL 兼容度评估涉及到的所有 SQL 的支持情况,SQL 支持情况的各维度汇总,以及部分 SQL 改写的汇总与列表。
Excel 数据报告中主要包含如下 sheet 页面:
封面页面: 作为 Excel 数据报告的第一页,记录报告的基础信息,名称,采集分析版本,数据编号等
汇总页面: 作为 Excel 数据报告的第二页,主要记录兼容信息汇总,不支持 SQL 的汇总,以及自动改写 SQL 的汇总
详细列表: 作为 Excel 数据报告的第三页,记录本次兼容性分析中涉及到的所有 SQL 的详细信息列表
改写列表: 从 Excel 数据报告的第四页开始,均为 SQL 改写列表,每一页对应一个改写规则,其中 SQL 中涉及到的改写部分均以红色加粗进行标识
文件中的字段内容主要根据数据库的不同,略有差异。
(1) Oracle
用户名: 执行 SQL 的 Schema 信息,在 Oracle 中一般对应于用户
SQL类型: SQL 类型,区分采集到的 SQL 是系统 SQL 还是用户的业务SQL,取值为: USER, SYSTEM_CATALOG, SYSTEM_COMMAND
支持类别: SQL 在MogDB 中的支持类别:直接支持,改写支持,不支持
应用模块: 执行 SQL 语句的客户端 module
应用操作: 执行 SQL 语句的客户端 action
MogDB异常代码: MogDB 中的 SQL 执行错误码
MogDB异常信息: MogDB 中的 SQL 执行报错信息
SQL_ID: Oracle 中的 SQL ID,用于从 Oracle 缓存视图中定位具体 SQL 信息
原始SQL: 原始 SQL文本
转换规则: SQL 满足的自动化改写规则
改写SQL: 经过自动化改写后的 SQL 文本
(2) MySQL
库名(schema): 执行 SQL 的 Schema 信息,在MySQL 中一般对应于数据库
SQL类型: SQL 类型,区分采集到的 SQL 是系统 SQL 还是用户的业务SQL,取值为: USER, SYSTEM_CATALOG, SYSTEM_COMMAND
支持类别: SQL 在MogDB 中的支持类别:直接支持,改写支持,不支持
用户主机: 执行 SQL 的 MySQL 客户端用户和对应的执行客户端主机信息
MySQL错误代码: SQL 在MySQL 中的执行情况,如果是 0 则表明 SQL 执行成功,非 0 表示在 MySQL 中执行报错
MogDB异常代码: MogDB 中的 SQL 执行错误码
MogDB异常信息: MogDB 中的 SQL 执行报错信息
原始SQL: 原始 SQL文本
转换规则: SQL 满足的自动化改写规则
改写SQL: 经过自动化改写后的 SQL 文本
(3) DB2
Schema: 执行 SQL 的Schema 信息
SQL类型: SQL 类型,区分采集到的 SQL 是系统 SQL 还是用户的业务SQL,取值为: USER, SYSTEM_CATALOG, SYSTEM_COMMAND
支持类别: SQL 在MogDB 中的支持类别:直接支持,改写支持,不支持
语句类型: DB2 中记录的 SQL 语句类型
MogDB异常代码: MogDB 中的 SQL 执行错误码
MogDB异常信息: MogDB 中的 SQL 执行报错信息
原始SQL: 原始 SQL文本
转换规则: SQL 满足的自动化改写规则
改写SQL: 经过自动化改写后的 SQL 文本
(4) PostgreSQL
Schema: 执行 SQL 的Schema 信息
SQL类型: SQL 类型,区分采集到的 SQL 是系统 SQL 还是用户的业务SQL,取值为: USER, SYSTEM_CATALOG, SYSTEM_COMMAND
支持类别: SQL 在MogDB 中的支持类别:直接支持,改写支持,不支持
MogDB异常代码: MogDB 中的 SQL 执行错误码
MogDB异常信息: MogDB 中的 SQL 执行报错信息
原始SQL: 原始 SQL文本
转换规则: SQL 满足的自动化改写规则
改写SQL: 经过自动化改写后的 SQL 文本
(5) Informix
用户名: 执行 SQL 的用户信息
SQL类型: SQL 类型,区分采集到的 SQL 是系统 SQL 还是用户的业务SQL,取值为: USER, SYSTEM_CATALOG, SYSTEM_COMMAND
支持类别: SQL 在MogDB 中的支持类别:直接支持,改写支持,不支持
语句类型: Informix 中记录的 SQL 语句类型
MogDB异常代码: MogDB 中的 SQL 执行错误码
MogDB异常信息: MogDB 中的 SQL 执行报错信息
原始SQL: 原始 SQL文本
转换规则: SQL 满足的自动化改写规则
改写SQL: 经过自动化改写后的 SQL 文本