本章节为使用者介绍统一SQL运维监控相关内容。
6.1. SQL透传
6.1.1. 简介
sql透传的意思就是通过统一SQL执行的SQL不进行SQL语法解析转换,直接透传到目标端执行
6.1.2. 使用说明
目前统一SQL支持的透传方式有两种:
通过参数配置实现SQL透传
可以通过在配置文件 unisql.conf
中设置参数 unisql.error.skip
或 unisql.skip
两个参数来开启SQL透传功能。具体配置方式及功能描述可参考:unisql.conf文件说明
备注
通过配置的方式实现SQL透传的生效范围为系统全局,也就是整个系统所有的执行SQL都会透传,请谨慎使用。
通过添加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. 使用说明
项目中需要引入统一SQL
sql-convert-runtime
依赖包。业务系统中调用统一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 |
目标端数据库方言 |
注意
目标端已有元数据发生变化时(例如修改主键列,重建表等)需要重启服务,否则缓存元数据可能不准确导致SQL转换异常。
目前元数据缓存功能支持只能通过java应用调用,其他语言调用暂不支持。
6.3. 日志管理
6.3.1. 前言
日志管理功能主要用于统一SQL运行日志的收集、查询、分析、统计等。按统一SQL模块来分为以下两个部分:客户端日志和动态库日志,本章主要介绍动态库模块的日志管理。
6.3.2. 日志级别设置
统一SQL的日志级别分为四个级别:
DEBUG:调试级别,用于调试信息,一般用于开发阶段。
INFO:信息级别,用于正常运行信息,包括SQL执行信息等。
WARN:警告级别,用于警告信息,包括超长SQL,SQL执行超时等。
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. 使用说明
可以通过配置文件
unisql.conf
中的unisql.slowsql.length
和unisql.slowsql.duration
参数对超长SQL和慢SQL的监控阈值进行配置。具体配置请参考 unisql.conf文件说明 ;当SQL通过统一SQL转换时间超过阈值时,统一SQL会记录慢SQL日志,并在unisql.log文件中打印日志信息。
当SQL的长度超过阈值时,统一SQL会记录超长SQL日志,并在unisql.log文件中打印日志信息。
日志级别为dubug级别时,可以查看慢SQL和超长SQL的详细信息。
6.5. 配置信息热加载
6.5.1. 前言
统一SQL支持配置信息热加载功能,当配置信息发生变化时,可以自动加载新的配置信息,而无需重启服务。配置信息热加载功能可以提升统一SQL的运维效率,降低运维成本。
6.5.2. 使用说明
当需要动态更改
unisql.conf
中的配置项内容时,可以在unisql.conf
文件的同级目录下创建unisql.reload
文件,创建该文件后会触发系统更新操作。热加载结束之后,系统会自动删除
unisql.reload
文件。热加载成功之后会有日志打印,日志级别为INFO级别,日志信息打印在unisql.log文件中。
热加载功能目前只支持
unisql.conf
文件的修改,其他配置文件修改不会触发热加载。配置项
unisql.print.sysinfo
和unisql.print.logMemMinute
主要用于开发环境调试,因此不支持热加载功能。
注意
热加载过程中,系统可能还是读取原来的配置信息,只有热加载成功结束之后,新的配置项才会生效。
如果开启的统一SQL缓存功能,一些依赖配置项做转换的SQL可能还是走老的配置信息,因为会被缓存拦截导致新配置项失效(后期版本会优化)。
动态关闭统一SQL缓存配置并不会清空缓存内容,因此有些SQL还是会走缓存(后期版本会优化)。
服务第一次启动时如果unisql.conf同级目录下有
unisql.reload
文件,不会触发更新,也不会删除文件,需要手动删除再进行更新才会触发配置热加载。对于配置项
unisql.table.column.upper.case.print.sql.switch
设置为0的时候unisql.table.column.upper.case
配置有值的时候,执行热加载的时候有可能导致系统停机,不建议这样配置操作。具体配置请参考 unisql.conf文件说明