diff --git a/develop/java-app-best-practices.md b/develop/java-app-best-practices.md index 3660b6421d42..16ed259867ea 100644 --- a/develop/java-app-best-practices.md +++ b/develop/java-app-best-practices.md @@ -104,6 +104,10 @@ JDBC 实现通常通过 JDBC URL 参数的形式来提供实现相关的配置 和上一条类似,在监控中通过 **Query Summary** > **CPS By Instance** 查看请求中 `COM_STMT_EXECUTE` 数目是否远远多于 `COM_STMT_PREPARE` 来确认是否正常。 +#### `readOnlyPropagatesToServer` + +请禁用 `readOnlyPropagatesToServer` 参数。启用该参数时,JDBC 驱动会向服务器发送 `SET SESSION TRANSACTION READ ONLY` 语句。TiDB 不支持该语句。此外,该语句也没有必要,因为所有 TiDB 节点都支持读写连接。 + #### Batch 相关参数 在进行 batch 写入处理时推荐配置 `rewriteBatchedStatements = true`,在已经使用 `addBatch` 或 `executeBatch` 后默认 JDBC 还是会一条条 SQL 发送,例如: @@ -120,8 +124,6 @@ pstmt.executeBatch(); 虽然使用了 batch 但发送到 TiDB 语句还是单独的多条 insert: -{{< copyable "sql" >}} - ```sql insert into t(a) values(10); insert into t(a) values(11); @@ -130,16 +132,12 @@ insert into t(a) values(12); 如果设置 `rewriteBatchedStatements = true`,发送到 TiDB 的 SQL 将是: -{{< copyable "sql" >}} - ```sql insert into t(a) values(10),(11),(12); ``` 需要注意的是,insert 语句的改写,只能将多个 values 后的值拼接成一整条 SQL,insert 语句如果有其他差异将无法被改写。例如: -{{< copyable "sql" >}} - ```sql insert into t (a) values (10) on duplicate key update a = 10; insert into t (a) values (11) on duplicate key update a = 11; @@ -148,8 +146,6 @@ insert into t (a) values (12) on duplicate key update a = 12; 上述 insert 语句将无法被改写成一条语句。该例子中,如果将 SQL 改写成如下形式: -{{< copyable "sql" >}} - ```sql insert into t (a) values (10) on duplicate key update a = values(a); insert into t (a) values (11) on duplicate key update a = values(a); @@ -158,16 +154,12 @@ insert into t (a) values (12) on duplicate key update a = values(a); 即可满足改写条件,最终被改写成: -{{< copyable "sql" >}} - ```sql insert into t (a) values (10), (11), (12) on duplicate key update a = values(a); ``` 批量更新时如果有 3 处或 3 处以上更新,则 SQL 语句会改写为 multiple-queries 的形式并发送,这样可以有效减少客户端到服务器的请求开销,但副作用是会产生较大的 SQL 语句,例如这样: -{{< copyable "sql" >}} - ```sql update t set a = 10 where id = 1; update t set a = 11 where id = 2; update t set a = 12 where id = 3; ```