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

JDBC

  • JDBC实例必须指定数据库,一旦实例创建,无法切换数据库。
  • 单条SQL语句的长度不允许超过2G字节,业务应考虑通信成本,建议单条SQL语句不超过5K行。
  • 不支持对DDL使用Prepare Execute执行方式。
  • fetchsize必须要在autocommit关闭情况下使用,否则fetchsize配置无效。
  • 使用默认GUC参数,避免通过JDBC发送SET请求修改GUC参数。

    更多说明请参考GUC参数编程规范

  • 必须使用Prepare Execute方式执行查询语句,提高执行效率。
  • JDBC客户端所在主机时区、数据库集群所在主机时区和集群配置过程中的时区,三者应保持一致。
  • 如果在连接中创建了临时表,那么在将连接归还给连接池之前,必须将临时表删除,避免业务出错。
  • 合理设置prepareThreshold,如果query语句十分固定,建议设置为1。
  • 建议设置连接参数autobalance=true,开启CN负载均衡功能,并中设置多个CN连接地址(使用逗号分隔)。

    一旦开启autobalance,JDBC DRIVER会尝试将JDBC connection分配到不同的CN节点上。

    设置多个CN连接地址的目的是避免JDBC DRIVER在首次获取集群CN列表时,因所设置的CN节点故障而失败。

    一旦首次成功获取,便不会再依赖连接参数中指定的CN列表,而是根据实时获取的集群CN列表,每隔一段时间,选取连接其中有效的CN获取最新的CN列表。

  • 应根据业务上层请求超时时间合理设置JDBC连接超时时间,避免作业完成或常超作业持续占用数据库资源

    超时参数包括loginTimeout、connectTimeout、socketTimeout等。

    • loginTimeout:Integer类型。指建立数据库连接的等待时间。超时时间单位为秒。
    • connectTimeout:Integer类型。用于连接CN操作的超时值。如果连接到CN花费的时间超过此值,则连接断开。超时时间单位为秒,默认值为0,表示已禁用,timeout不发生。
    • socketTimeout:Integer类型。用于socket读取操作的超时值。如果从CN读取所花费的时间超过此值,则连接关闭。超时时间单位为秒,默认值为0,表示已禁用,timeout不发生。
    • cancelSignalTimeout:Integer类型。发送取消消息本身可能会阻塞,此属性控制用于取消命令的“connect超时”和“socket超时”。超时时间单位为秒,默认值为10秒。
    • tcpKeepAlive:Boolean类型。启用或禁用TCP保活探测功能。默认为false。

    以上参数可以在JDBC连接串或者property连接属性中配置,例如:

    1. 在连接串中配置:
      jdbc:postgresql://host:port/postgres?tcpKeepAlive=true
    1. 在property中配置:
      Properties info = new Properties();
      Info.setProperty("tcpKeepAlive", true);
分享:

    相关文档

    相关产品