sql改写
shardingsphere会对执行的sql进行改写,比如一下两种场景
max.connections.size.per.query
max.connections.size.per.query的意义
执行sql的时候,对每一个数据库进行操作的时候的connection数量
场景一,多库场景
当我们不带分片键的sql:select * from ap_alarm_live;那么就会被改写成两个sql,那么他们会分别去两个数据库查询;默认情况下,max.connections.size.per.query=1,那么执行引擎执行的时候,就是每个数据库都会有一个connection去查询。
场景二,一库多表
如果是一个数据库两个表ap_alarm_live_0和ap_alarm_live_1,那么max.connections.size.per.query=1就会导致查询是串行查询的,查询响应时间就会比较长。同时,第一次查询的全部结果会全部放在了内存里面等待第二次查询的结果然后再一起合并,这种就会导致内存占用比较多。
从下图可以看出,如果一个库需要执行的sql语句大于max.connections.size.per.query的时候,就会走CONNECTION_STRICTLY模式,也就是连接受限模式,那么就会串行执行sql,然后每次执行完的结果全部放到内存,然后再内存做归并,就不会走流式归并了。流式归并请看归并引擎