@@ -104,6 +104,10 @@ JDBC 实现通常通过 JDBC URL 参数的形式来提供实现相关的配置
104104
105105和上一条类似,在监控中通过 ** Query Summary** > ** CPS By Instance** 查看请求中 ` COM_STMT_EXECUTE ` 数目是否远远多于 ` COM_STMT_PREPARE ` 来确认是否正常。
106106
107+ #### ` readOnlyPropagatesToServer `
108+
109+ 请禁用 ` readOnlyPropagatesToServer ` 参数。启用该参数时,JDBC 驱动会向服务器发送 ` SET SESSION TRANSACTION READ ONLY ` 语句。TiDB 不支持该语句。此外,发送该语句也没有必要,因为所有 TiDB 节点都支持读写连接。
110+
107111#### Batch 相关参数
108112
109113在进行 batch 写入处理时推荐配置 ` rewriteBatchedStatements = true ` ,在已经使用 ` addBatch ` 或 ` executeBatch ` 后默认 JDBC 还是会一条条 SQL 发送,例如:
@@ -120,8 +124,6 @@ pstmt.executeBatch();
120124
121125虽然使用了 batch 但发送到 TiDB 语句还是单独的多条 insert:
122126
123- {{< copyable "sql" >}}
124-
125127``` sql
126128insert into t(a) values (10 );
127129insert into t(a) values (11 );
@@ -130,16 +132,12 @@ insert into t(a) values(12);
130132
131133如果设置 ` rewriteBatchedStatements = true ` ,发送到 TiDB 的 SQL 将是:
132134
133- {{< copyable "sql" >}}
134-
135135``` sql
136136insert into t(a) values (10 ),(11 ),(12 );
137137```
138138
139139需要注意的是,insert 语句的改写,只能将多个 values 后的值拼接成一整条 SQL,insert 语句如果有其他差异将无法被改写。例如:
140140
141- {{< copyable "sql" >}}
142-
143141``` sql
144142insert into t (a) values (10 ) on duplicate key update a = 10 ;
145143insert 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;
148146
149147上述 insert 语句将无法被改写成一条语句。该例子中,如果将 SQL 改写成如下形式:
150148
151- {{< copyable "sql" >}}
152-
153149``` sql
154150insert into t (a) values (10 ) on duplicate key update a = values (a);
155151insert 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);
158154
159155即可满足改写条件,最终被改写成:
160156
161- {{< copyable "sql" >}}
162-
163157``` sql
164158insert into t (a) values (10 ), (11 ), (12 ) on duplicate key update a = values (a);
165159```
166160
167161批量更新时如果有 3 处或 3 处以上更新,则 SQL 语句会改写为 multiple-queries 的形式并发送,这样可以有效减少客户端到服务器的请求开销,但副作用是会产生较大的 SQL 语句,例如这样:
168162
169- {{< copyable "sql" >}}
170-
171163``` sql
172164update t set a = 10 where id = 1 ; update t set a = 11 where id = 2 ; update t set a = 12 where id = 3 ;
173165```
0 commit comments