You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2021/08/26 12:15:48 UTC

[GitHub] [shardingsphere] TeslaCN opened a new issue #12032: Consider caching PreparedStatement in ShardingSpherePreparedStatement

TeslaCN opened a new issue #12032:
URL: https://github.com/apache/shardingsphere/issues/12032


   ## Feature Request
   
   
   ### Is your feature request related to a problem?
   
   The performance loss of readwrite-splitting in ShardingSphere 5 is larger than ShardingSphere 4.
   
   #### Sharding JDBC 4.1.1
   The performance of MasterSlave in Sharding-JDBC 4.1.1 is very close to native JDBC, because routed prepared statements are cached in `MasterSlavePreparedStatement` and each invoking `executeQuery` is invoking the native PreparedStatement.
   
   https://github.com/apache/shardingsphere/blob/96375f420074a8a4cba5307f1a308f3a87b3c7bf/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/MasterSlavePreparedStatement.java#L42-L47
   
   https://github.com/apache/shardingsphere/blob/96375f420074a8a4cba5307f1a308f3a87b3c7bf/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/MasterSlavePreparedStatement.java#L118-L122
   
   Flame graph of Sharding-JDBC 4.1.1
   ![image](https://user-images.githubusercontent.com/20503072/130960472-6fa9389d-25aa-4e9e-b92e-195e09f46616.png)
   
   #### ShardingSphere JDBC 5.0.0 (master)
   
   There is no `MasterSlavePreparedStatement` or `ReadWriteSplittingPreparedStatement` in ShardingSphere 5.0.0. `ShardingSpherePreparedStatement` can be used for different functions. 
   But the statements are not reused. Every time execute the PreparedStatement, `clearPrevious` will close all statements opened by the previous execution. And then create new PreparedStatements in prepare engine. This may be expensive, especially `useServerPrepStmts` is enabled and cache size is not large enough in MySQL JDBC driver.
   
   https://github.com/apache/shardingsphere/blob/ca07e82161d9448b7e3485d6e35b0d316ba6b9c2/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java#L174
   
   https://github.com/apache/shardingsphere/blob/ca07e82161d9448b7e3485d6e35b0d316ba6b9c2/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java#L400-L403
   
   Flame graph of ShardingSphere JDBC 5.0.0 (master)
   ![image](https://user-images.githubusercontent.com/20503072/130960494-d4534518-e37b-4ed8-8666-e90dd437cda1.png)
   
   ### Describe the feature you would like.
   
   Consider caching prepared statements for reuse if the rules only contains ReadWriteSplitting.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [shardingsphere] strongduanmu commented on issue #12032: Consider caching PreparedStatement in ShardingSpherePreparedStatement

Posted by GitBox <gi...@apache.org>.
strongduanmu commented on issue #12032:
URL: https://github.com/apache/shardingsphere/issues/12032#issuecomment-909816808


   This is a great suggestion, and I will try to optimize this problem. In addition to `ReadWriteSplitting`, we can even cache `Sharding` prepared statements in some scenario.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [shardingsphere] strongduanmu commented on issue #12032: Consider caching PreparedStatement in ShardingSpherePreparedStatement

Posted by GitBox <gi...@apache.org>.
strongduanmu commented on issue #12032:
URL: https://github.com/apache/shardingsphere/issues/12032#issuecomment-909816808


   This is a great suggestion, and I will try to optimize this problem. In addition to `ReadWriteSplitting`, we can even cache `Sharding` prepared statements in some scenario.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org