更新时间:2024-11-12 GMT+08:00
分享

JDBC常用参数参考

allowReadOnly

原理:是否可以通过setReadOnly来修改事务访问模式,如果为true则可以修改,如果为false则无法通过此接口来修改,修改语句为:SET SESSION CHARACTERISTICS AS TRANSACTION + READ ONLY / READ WRITE。

建议:保持默认值为true。

autoBalance

原理:设置为true或balance或roundrobin表示开启JDBC负载均衡功能,将应用程序的多个连接均衡到数据库集群中的各个可用CN。首次建连时通过jdbc连接串上配置的IP建连,只要其中有一个可以正常建连就会刷新内部的当前可用的CN列表,之后根据CN列表进行建连,不再依据jdbc连接串中的IP。

建议:建议值为true。

refreshCNIpListTime

原理:新连接建连时会检测当前时间距离上一次刷新时间间隔是否大于此参数的值,如果大于会查询数据库当前可用的CN列表并更新jdbc的CN列表,如果超过此数值但没有新的连接建立,则不会刷新。

建议:默认值10s,建议根据业务需要进行调整,需要配合autoBalance进行使用。

fetchsize

原理fetchsize在设置为n时,数据库服务器端在执行查询后,调用者在执行resultset.next()的时候,JDBC会先与服务器端进行通信,取n条数据到JDBC的客户端中,然后返回第一条给调用者。当调用者取到第n+1条数据的时候,会再次到数据库服务端去取数据。

作用避免了数据库同时把所有结果全部传输到客户端,导致客户端的内存资源不足。

建议:建议根据自身的业务查询数据数量和客户端机器内存情况来配置此参数,设置fetchsize时要关闭自动提交(autocommit=false)模式,否则会导致fetchsize无法生效。

defaultRowFetchSize

作用:fetchsize默认值为0,defaultRowFetchSize会修改fetchsize的默认值。

batchMode

作用:用于确定是否使用batch模式连接。默认值为on,开启后可以提升批量更新的性能,同时批量更新的返回值会发生改变。例如,批量插入三条数据,在开启时返回值为[3,0,0],在关闭后返回值为[1,1,1]。

建议:如果本身业务框架(例如hibernate)在批量更新时会检测返回值,可以通过调整此参数来解决。

loginTimeout

作用:控制与数据库建连时间,其中时间包括connectTimeout和socketTimeoutInConnecting,超过阈值则退出。计算方式为:loginTimeout=(connectTimeout+连接认证时间+初始化语句执行时间)*节点数量,默认值为0。

建议:配置后每次建连都会开启一个异步线程,在连接数较多的情况可能会导致客户端压力增大,可以根据业务酌情调整,建议配置为max(connectTimeout, socketTimeoutInConnecting) * 节点数。

  • 此参数设置后对于多IP而言,时间是尝试连接IP的时间,可能会出现因为设置的值较小导致后面的IP无法连接的问题。例如设置了三个IP,如果loginTimeout为5s,但前两个IP建连总共用了5s,第三个IP会无法进行连接。
  • 当CPU、内存、I/O负载中的任意一项接近100%时,会出现连接慢的现象,可能会导致连接时间超过阈值的问题,可通过以下方式进行问题排查:
    1. 登录连接慢的物理机或通过管理工具查询资源负载:可通过top命令等确认CPU使用率;通过free命令确认内存使用情况;通过iostat命令确认I/O负载;此外还可以通过cm_agent中的监控日志,以及数据库运维平台中的监测记录进行检查。
    2. 针对短时间内大量慢查询导致的峰值负载场景,可通过[数据库服务器的端口号+1]端口连接,查询pg_stat_activity视图;针对慢查询,可以使用系统函数pg_terminate_backend(pid int)进行查杀会话。
    3. 针对业务量长期超负载情况(即无明显慢查询,或慢查询查杀后但新的查询依然会变成慢查询),应考虑降低业务负载、增加数据库资源的方式进行优化。

cancelSignalTimeout

作用:发送取消消息本身可能会阻塞,此属性控制用于取消命令的“connect超时”和“socket超时”。超时时间单位为秒。主要为了防止连接超时取消时本身执行超时检测。

建议:默认值为10s,建议根据业务进行调整。

connectTimeout

作用:控制建立连接时套接字超时阈值(此时是JDBC通过socket连接到数据的时间,并不是返回connection对象的时间),超过阈值查找下一个IP。

建议:该参数决定了每个节点TCP连接建立的最大超时时间,如果某节点网络故障,与该节点建立连接时会等待connectTimeout超时,然后尝试连接下一个节点。考虑到网络抖动,时延等情况,建议设置为3s。

socketTimeout

作用:控制套接字操作超时阈值,如果业务语句执行或者从网络读取数据流超过此阈值,连接中断(即语句超过规定时间执行,没有数据返回的时候)。

建议:该参数限制单条SQL最长的执行时间,单语句执行超过该值则会超时报错退出,建议根据业务特征进行配置,如果未配置,默认为0,即不会超时。如果不配置该参数,在数据库进程异常情况下,会导致客户端出现长时间等待,建议根据业务可以接受的SQL执行时间进行配置。

socketTimeoutInConnecting

作用:控制建连阶段套接字操作超时值,在建连阶段,如果从网络中读取数据流超过此阈值,则尝试查找下一个节点建连。

建议:该参数仅影响建连阶段的socket超时时间,如果未配置,默认为5s。

autosave

作用:值为always时,可以在事务中每个语句前面设置一个savepoint点,在事务中语句执行报错时会返回到最近的上一个savepoint点,让事务中后续语句正常执行,最终正常提交。值为conservative时,每次查询都会设置保存点,但是只会在“statement XXX无效”等情况下回滚并重试。值为never时无保存点。

建议:不建议设置此参数,性能劣化严重。

currentSchema

作用:设置当前连接的schema,如果未设置,则默认schema为连接使用的用户名。

建议:建议配置此参数,业务数据所在的schema。如果schema名包含除字母、数字、下划线之外的特殊字符,建议在schema名上加引号,注意加引号后schema名大小写敏感。如需配置多个schema,要用“,”进行分隔,包含特殊字符的schema也需要加引号处理。

prepareThreshold

作用:默认值为5,如果一个会话连续多次执行同一个SQL,在达到prepareThreshold次数以上时,JDBC将不再对这个SQL发送parse命令,会将其缓存起来,提升执行速度。

建议:默认值为5,根据业务需要进行调整。

不建议通过JDBC,并且使用prepareStatement的方式执行涉及密码的语句(例如:CREATE USER user_name WITH PASSWORD '********';),原因是执行达到prepareThreshold指定次数时,数据库将SQL语句进行缓存,基于安全因素不会将密码进行缓存,该prepareStatement再次执行时会报错(Password must contain at least 8 characters.)。

preparedStatementCacheQueries

作用:确定每个连接中缓存的查询数,默认情况下是256。若在prepareStatement()调用中使用超过256个不同的查询,则最近最少使用的查询缓存将被丢弃。

建议:默认值为256,根据业务需要进行调整。配合prepareThreshold使用。

blobMode

作用:setBinaryStream方法为不同类型的数据赋值,设置为on时表示为blob类型数据赋值,设置为off时表示为bytea类型数据赋值,默认为on。例如在preparestatement和callablestatement对象中对参数进行赋值操作。

建议:默认值为on。

相关文档