本章节为使用者介绍统一SQL运维监控相关内容。

6.1. SQL透传

6.1.1. 简介

sql透传的意思就是通过统一SQL执行的SQL不进行SQL语法解析转换,直接透传到目标端执行

6.1.2. 使用说明

目前统一SQL支持的透传方式有两种:

  1. 通过参数配置实现SQL透传

可以通过在配置文件 unisql.conf 中设置参数 unisql.error.skipunisql.skip 两个参数来开启SQL透传功能。具体配置方式及功能描述可参考:unisql.conf文件说明

备注

通过配置的方式实现SQL透传的生效范围为系统全局,也就是整个系统所有的执行SQL都会透传,请谨慎使用。

  1. 通过添加SQL标识 /*skipTransform*/ 实现SQL透传:

可以在想要透传执行的SQL最前面添加标识 /*skipTransform*/ 来实现SQL的透传执行

示例SQL:

String sql = /*skipTransform*/select * from dual;

备注

标识: /*skipTransform*/ 必须要放在透传SQL的最前面并保证SQL完整,不能放在SQL中间或者后面否则不生效。

6.2. 元数据管理

6.2.1. 简介

统一SQL支持采集目标端数据库元数据并缓存到本地,一些SQL转换场景会依赖元数据信息进行转换。 缓存元数据信息内容包括:表名,列名,列数据类型,主键标识,唯一索引标识,自增键标识。

6.2.2. 使用说明

  1. 项目中需要引入统一SQL sql-convert-runtime 依赖包。

  2. 业务系统中调用统一SQL元数据缓存启动API,开启元数据缓存功能,调用方式如下:(调用时保证目标端库表已创建完毕)

ConnectionConfig config = new ConnectionConfig();
config.setHost();
config.setPort();
config.setDbname();
config.setUser();
config.setPassword();
config.setSchemas();
config.setTargetDialect(DbType.GAUSSDB_ORACLE.name());
Transformer.initTableColumnMetas(config);

ConnectionConfig 类中参数说明

参数

说明

host

目标数据库IP地址

port

目标端数据库端口号

dbName

目标端数据库名称

user

目标端数据库用户名

password

目标端数据库密码

Schemas

目标端数据库schema信息,schema需要用单引号括起来,多个schema用逗号分隔,例如:’schema1’,’schema2’

targetDialect

目标端数据库方言

注意

  1. 目标端已有元数据发生变化时(例如修改主键列,重建表等)需要重启服务,否则缓存元数据可能不准确导致SQL转换异常。

  2. 目前元数据缓存功能支持只能通过java应用调用,其他语言调用暂不支持。

6.3. 日志管理

6.3.1. 前言

日志管理功能主要用于统一SQL运行日志的收集、查询、分析、统计等。按统一SQL模块来分为以下两个部分:客户端日志和动态库日志,本章主要介绍动态库模块的日志管理。

6.3.2. 日志级别设置

统一SQL的日志级别分为四个级别:

  1. DEBUG:调试级别,用于调试信息,一般用于开发阶段。

  2. INFO:信息级别,用于正常运行信息,包括SQL执行信息等。

  3. WARN:警告级别,用于警告信息,包括超长SQL,SQL执行超时等。

  4. ERROR:错误级别,用于错误信息,包括SQL转换异常等。

默认情况下,统一SQL的日志级别为ERROR级别,可以通过配置文件 unisql.conf 中的 unisql.log.level 参数进行修改。具体配置请参考 unisql.conf文件说明 ;

6.3.3. SQL转换配置项日志打印

SQL转换关联配置项日志打印,当一个SQL语法转换跟unisql.conf中的配置有关时,会打印debug级别的日志信息标识此SQL的转换配置

6.4. SQL监控

6.4.1. 前言

统一SQL目前支持慢SQL监控和超长SQL监控功能,通过监控SQL的执行时间和SQL的长度,可以帮助用户发现慢SQL和超长SQL,并进行优化。

6.4.2. 使用说明

  1. 可以通过配置文件 unisql.conf 中的 unisql.slowsql.lengthunisql.slowsql.duration 参数对超长SQL和慢SQL的监控阈值进行配置。具体配置请参考 unisql.conf文件说明 ;

  2. 当SQL通过统一SQL转换时间超过阈值时,统一SQL会记录慢SQL日志,并在unisql.log文件中打印日志信息。

  3. 当SQL的长度超过阈值时,统一SQL会记录超长SQL日志,并在unisql.log文件中打印日志信息。

  4. 日志级别为dubug级别时,可以查看慢SQL和超长SQL的详细信息。

6.5. 配置信息热加载

6.5.1. 前言

统一SQL支持配置信息热加载功能,当配置信息发生变化时,可以自动加载新的配置信息,而无需重启服务。配置信息热加载功能可以提升统一SQL的运维效率,降低运维成本。

6.5.2. 使用说明

  1. 当需要动态更改 unisql.conf 中的配置项内容时,可以在 unisql.conf 文件的同级目录下创建 unisql.reload 文件,创建该文件后会触发系统更新操作。

  2. 热加载结束之后,系统会自动删除 unisql.reload 文件。

  3. 热加载成功之后会有日志打印,日志级别为INFO级别,日志信息打印在unisql.log文件中。

  4. 热加载功能目前只支持 unisql.conf 文件的修改,其他配置文件修改不会触发热加载。

  5. 配置项 unisql.print.sysinfounisql.print.logMemMinute 主要用于开发环境调试,因此不支持热加载功能。

注意

  1. 热加载过程中,系统可能还是读取原来的配置信息,只有热加载成功结束之后,新的配置项才会生效。

  2. 如果开启的统一SQL缓存功能,一些依赖配置项做转换的SQL可能还是走老的配置信息,因为会被缓存拦截导致新配置项失效(后期版本会优化)。

  3. 动态关闭统一SQL缓存配置并不会清空缓存内容,因此有些SQL还是会走缓存(后期版本会优化)。

  4. 服务第一次启动时如果unisql.conf同级目录下有 unisql.reload 文件,不会触发更新,也不会删除文件,需要手动删除再进行更新才会触发配置热加载。

  5. 对于配置项 unisql.table.column.upper.case.print.sql.switch 设置为0的时候 unisql.table.column.upper.case 配置有值的时候,执行热加载的时候有可能导致系统停机,不建议这样配置操作。具体配置请参考 unisql.conf文件说明