方便更快捷的说明问题,可以按需填写(可删除)
使用环境:生产
场景、问题:shardingsphere启动后,每天不定时加载元数据几十次。没有执行DDL语句和distsql。执行的元数据加载SQL:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_KEY, EXTRA, COLLATION_NAME, ORDINAL_POSITION FROM information_schema.columns WHERE TABLE_SCHEMA='库' ORDER BY ORDINAL_POSITION
中间没有操作DDL也没distsql,yaml配置如下
spring:
shardingsphere:
# 调试的时候可以开启SQL打印
props:
sql-show: true
# 同时可提供32条线程供sqlstatment执行
max:
connections:
size:
per:
query: 32
# 配置数据源
# 就算不分库,数据源也要配置两个,两个都是同数据源即可、
# 单数据源会导致加载全部表的元数据,导致启动超时
datasource:
ds-0:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url:
username:
password:
maxWait: 60000
maxActive: 1000
maxIdle: 20
initialSize: 20
removeAbandoned: true
validationQuery: SELECT 1
testOnBorrow: false
testOnReturn: false
testWhileIdle: true
names: ds-0
rules:
sharding:
tables:
# 分表,由于H2数据库大小写敏感,所以表名大写,如果是mysql则可以全部小写
t_user:
# 真实表的分片表达式
actualDataNodes: ds-0.t_user_$->{0..31}
# 主键id生成
keyGenerateStrategy:
column: user_id
props:
worker:
id: 100
keyGeneratorName: SNOWFLAKE
# 分表策略 自定义精确分片
tableStrategy:
standard:
shardingAlgorithmName: useralg
shardingColumn: user_id
sharding-algorithms:
useralg:
type: CLASS_BASED
props:
strategy: STANDARD
algorithmClassName: xxx.UserComplexKeysShardingAlgorithm
已进行操作:
现状:
每天不定时执行几十次元数据加载,元数据本来就比较慢了,还加载几十次