版本:5.0.0 release
对接的数据库类型:mysql,版本 5.7
shardingsphere 启动模式:proxy 模式。
问题描述:ShardingSphere proxy 查询 底层数据库的 information_schema.schemata 表,只能查询出 501 条记录,实际有 1266 条记录。
配置:只配置了读写分离
图 1.
config-root-information_schema.yaml 文件 配置:
图 2.
其他几个配置文件,除了红框中更不一样,其他都一样。
(information_schema、mysql、performance_schema、sys 是mysql中的几个系统库)
启动后,执行 sql 查询:
SELECT
schema_name,
catalog_name as encoding,
default_character_set_name AS encoding
FROM
information_schema.schemata
ORDER BY 1
debug 跟踪代码,proxy执行进入到:AbstractSelectInformationExecutor的getSourceData方法:
图 3.
上面查询得到的 ResultSet 传入到 callback处理,就是AbstractSelectInformationExecutor的 execute 中的代码,如下:
图 4.
问题就是,这个 resultset 总是只能遍历出 501 条记录,实际数据库中执行这个 sql 查询,是能查询出 1266 条的(单独写过程序查询过)。
另外,如果把 图 3. 中的 conn 变量,改成通过 DriverManager.getConnection 方式自己创建,而不是从连接池拿,就能查询出来全部数据,这个我改程序测试过。
注:图4 中我修改了 for 循环中部分代码,和这个问题没关系,请忽略改动。