From bfa57b5cabd9480b1484f88ca00b849b77a54a31 Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Wed, 26 Jun 2024 09:56:00 +0800 Subject: [PATCH] [improvement](mysql catalog) disable mysql AbandonedConnectionCleanup Thread (#36655) When using mysql catalog, mysql jdbc driver will generate an `AbandonedConnectionCleanupThread` for each database connection. This is a virtual reference, which will accumulate over time as database connections are constantly created, eventually causing OOM. Therefore, in our usage scenario, we need to turn off this thread because our database connection recycling depends on the connection pool. But please note that this switch is only for MySQL JDBC Driver versions greater than 8.0.22 --- .../src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java | 1 + .../apache/doris/datasource/jdbc/client/JdbcMySQLClient.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java index 6a7e2affd58e3b..5cdd30a9751594 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java @@ -48,6 +48,7 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor { public MySQLJdbcExecutor(byte[] thriftParams) throws Exception { super(thriftParams); + System.setProperty("com.mysql.cj.disableAbandonedConnectionCleanup", "true"); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java index efb69d8003fe08..f58753bccee03d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java @@ -45,6 +45,8 @@ public class JdbcMySQLClient extends JdbcClient { protected JdbcMySQLClient(JdbcClientConfig jdbcClientConfig) { super(jdbcClientConfig); + // Disable abandoned connection cleanup + System.setProperty("com.mysql.cj.disableAbandonedConnectionCleanup", "true"); convertDateToNull = isConvertDatetimeToNull(jdbcClientConfig); Connection conn = null; Statement stmt = null;