Repository: apache/shardingsphere
Issue: ShardingSphere-Proxy will be blocked when query big blob data

### Which version of ShardingSphere did you use?
Shardingsphere-ui-4.1.1
Previous version 4.0.0-RC1 also has the same issue.
### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
ShardingSphere-Proxy
### Expected behavior
ShardingSphere-Proxy can receive connection and process sql statements.
### Actual behavior
ShardingSphere-Proxy continues to receive connections, and the connections all logined successfully.
But it stops here. It doesn't process the following sql statements.

Following is part of the outputs(We modified according our purpose). 
```
[INFO ] 19:49:41.596 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xd66b03e6, L:/0.0.0.0:3307] READ: [id: 0x60558169, L:/192.168.1.46:3307 - R:/192.168.1.46:44510]
[INFO ] 19:49:41.597 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xd66b03e6, L:/0.0.0.0:3307] READ COMPLETE
[INFO ] 19:49:41.601 [epollEventLoopGroup-3-2] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Username: amRiYzpteXNxbDovLzE5Mi4xNjguMC4xMDg6MzMwNi90ZXN0P3VzZXI9cm9vdCZwYXNzd29yZD10ZXN0JnNlcnZlclRpbWV6b25lPVVUQyZ1c2VTU0w9ZmFsc2U=
[INFO ] 19:49:41.601 [epollEventLoopGroup-3-2] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Auth  connection url=jdbc:mysql://192.168.0.108:3306/test?user=root&password=test&serverTimezone=UTC&useSSL=false
[INFO ] 19:49:41.602 [epollEventLoopGroup-3-2] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Login succeed
[INFO ] 19:49:44.597 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xd66b03e6, L:/0.0.0.0:3307] READ: [id: 0xafd94de4, L:/192.168.1.46:3307 - R:/192.168.1.46:44512]
[INFO ] 19:49:44.597 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xd66b03e6, L:/0.0.0.0:3307] READ COMPLETE
[INFO ] 19:49:44.601 [epollEventLoopGroup-3-3] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Username: amRiYzpteXNxbDovLzE5Mi4xNjguMC4xMDg6MzMwNi90ZXN0P3VzZXI9cm9vdCZwYXNzd29yZD10ZXN0JnNlcnZlclRpbWV6b25lPVVUQyZ1c2VTU0w9ZmFsc2U=
[INFO ] 19:49:44.602 [epollEventLoopGroup-3-3] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Auth  connection url=jdbc:mysql://192.168.0.108:3306/test?user=root&password=test&serverTimezone=UTC&useSSL=false
[INFO ] 19:49:44.602 [epollEventLoopGroup-3-3] o.a.s.s.f.m.a.MySQLAuthenticationEngine - ===Login succeed
```
After the client application is killed. The blocked sql statement will be processed.
```
[INFO ] 19:50:06.662 [ShardingSphere-Command-1] o.a.s.s.b.c.j.w.StatementExecutorWrapperJustep - ===Modified Sql:SELECT * FROM sa_taskrelation
[INFO ] 19:50:06.662 [ShardingSphere-Command-2] o.a.s.s.f.m.c.MySQLCommandExecutorFactory - Execute packet type: COM_QUERY, value: MySQLComQueryPacket(sql=select * from sa_sign)
[INFO ] 19:50:06.662 [ShardingSphere-Command-2] o.a.s.s.b.c.j.w.StatementExecutorWrapperJustep - ===Modified Sql:SELECT * FROM sa_sign
[INFO ] 19:50:06.662 [ShardingSphere-Command-0] o.a.s.s.f.m.c.MySQLCommandExecutorFactory - Execute packet type: COM_QUERY, value: MySQLComQueryPacket(sql=select * from document_subscriptions)
[INFO ] 19:50:06.663 [ShardingSphere-Command-0] o.a.s.s.b.c.j.w.StatementExecutorWrapperJustep - ===Modified Sql:SELECT * FROM document_subscriptions
[INFO ] 19:50:06.663 [ShardingSphere-Command-3] o.a.s.s.f.m.c.MySQLCommandExecutorFactory - Execute packet type: COM_QUERY, value: MySQLComQueryPacket(sql=select * from selectionlist_data)
[INFO ] 19:50:06.664 [ShardingSphere-Command-1] o.a.s.s.f.m.c.MySQLCommandExecutorFactory - Execute packet type: COM_QUERY, value: MySQLComQueryPacket(sql=select * from sa_remindactionparameter)
[INFO ] 19:50:06.664 [ShardingSphere-Command-3] o.a.s.s.b.c.j.w.StatementExecutorWrapperJustep - ===Modified Sql:SELECT * FROM selectionlist_data
```

### Reason analyze (If you can)

### Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.
The test client application is a multi-thread application.
In a thread, it does following work.
1. connection to shardingsphere-proxy
2. get all table names of the database.
3. for each table, executeQuery("select * from " + tablename) and print the result set, sleep 2 seconds.
4. close the connection
5. goto 1

100 threads are created to test.
when shardingsphere-proxy is blocked, part of the client outputs:
```
Fri Jul 10 19:49:27 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
```
It seems client is connecting to server, but cannot get response.
### Example codes for reproduce this issue (such as a github link).


Changed files:
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/ResourceSynchronizer.java
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java

diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/ResourceSynchronizer.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/ResourceSynchronizer.java
index 2778c64082d..238197fdd1a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/ResourceSynchronizer.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/ResourceSynchronizer.java
@@ -33,26 +33,12 @@ public final class ResourceSynchronizer {
     
     private final Condition condition = lock.newCondition();
     
-    /**
-     * Do await.
-     *
-     */
-    public void doAwait() {
-        lock.lock();
-        try {
-            condition.await();
-        } catch (final InterruptedException ignore) {
-        } finally {
-            lock.unlock();
-        }
-    }
-    
     /**
      * Do await until default timeout milliseconds.
      *
      * @throws InterruptedException interrupted exception
      */
-    void doAwaitUntil() throws InterruptedException {
+    public void doAwaitUntil() throws InterruptedException {
         lock.lock();
         try {
             condition.await(DEFAULT_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
index f3a7f9035e4..806483fbd94 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecuteEngine.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.frontend.mysql.command;
 
 import io.netty.channel.ChannelHandlerContext;
+import lombok.SneakyThrows;
 import org.apache.shardingsphere.db.protocol.mysql.packet.command.MySQLCommandPacket;
 import org.apache.shardingsphere.db.protocol.mysql.packet.command.MySQLCommandPacketFactory;
 import org.apache.shardingsphere.db.protocol.mysql.packet.command.MySQLCommandPacketType;
@@ -70,6 +71,7 @@ public final class MySQLCommandExecuteEngine implements CommandExecuteEngine {
     }
     
     @Override
+    @SneakyThrows
     public void writeQueryData(final ChannelHandlerContext context,
                                final BackendConnection backendConnection, final QueryCommandExecutor queryCommandExecutor, final int headerPackagesCount) throws SQLException {
         if (!queryCommandExecutor.isQuery() || !context.channel().isActive()) {
@@ -82,7 +84,7 @@ public final class MySQLCommandExecuteEngine implements CommandExecuteEngine {
             count++;
             while (!context.channel().isWritable() && context.channel().isActive()) {
                 context.flush();
-                backendConnection.getResourceSynchronizer().doAwait();
+                backendConnection.getResourceSynchronizer().doAwaitUntil();
             }
             DatabasePacket dataValue = queryCommandExecutor.getQueryData();
             context.write(dataValue);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
index dc1673316db..f9888f9b7c3 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngine.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.frontend.postgresql.command;
 
 import io.netty.channel.ChannelHandlerContext;
+import lombok.SneakyThrows;
 import org.apache.shardingsphere.db.protocol.packet.CommandPacket;
 import org.apache.shardingsphere.db.protocol.packet.CommandPacketType;
 import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
@@ -73,6 +74,7 @@ public final class PostgreSQLCommandExecuteEngine implements CommandExecuteEngin
     }
     
     @Override
+    @SneakyThrows
     public void writeQueryData(final ChannelHandlerContext context,
                                final BackendConnection backendConnection, final QueryCommandExecutor queryCommandExecutor, final int headerPackagesCount) throws SQLException {
         if (queryCommandExecutor.isQuery() && !context.channel().isActive()) {
@@ -90,7 +92,7 @@ public final class PostgreSQLCommandExecuteEngine implements CommandExecuteEngin
             count++;
             while (!context.channel().isWritable() && context.channel().isActive()) {
                 context.flush();
-                backendConnection.getResourceSynchronizer().doAwait();
+                backendConnection.getResourceSynchronizer().doAwaitUntil();
             }
             DatabasePacket resultValue = queryCommandExecutor.getQueryData();
             context.write(resultValue);