v6.0版本性能调优之JDBC连接参数疑问

总结 部分中建议jdbc配置:

  • TiDB 兼容 MySQL 协议的不同命令,最佳的性能表现来自于应用程序使用 Prepared Statement 接口,并设置以下 JDBC 连接参数:
useServerPrepStmts=true&cachePrepStmts=true&prepStmtCacheSize=1000&prepStmtCacheSqlLimit=20480&useConfigs=maxPerformance

问题:

  1. 此处的JDBC是特指java代码么
  2. golang 语言开发的配置是否适用上述参数,如果不适用,应如何配置类似参数。
  3. tidb 5.0版本是否有类似的jdbc参数推荐(除6.0版本新特性的参数)
  1. 此处的JDBC是特指java代码么

特指 Java 代码

  1. golang 语言开发的配置是否适用上述参数,如果不适用,应如何配置类似参数。

Golang 的 MySQL 驱动不支持自动缓存 prepared statement 对象,需要 go 程序代码自己实现,这里提供一个例子,大概需要客户端维护一个 二级 map,二级 key 分别是 连接 id 和 query 文本,value 是已经解析好的prepared statement对象

 func (s *bankState) refreshConn(ctx context.Context) error {
	conn, err := s.db.Conn(ctx)
	if err != nil {
		return err
	}
	s.conn = conn
	s.stmtCache = make(map[string]*sql.Stmt)
	return nil
}

func getBankState(ctx context.Context) *bankState {
	return ctx.Value(bankStateKey).(*bankState)
}

func (d *Driver) getAndCacheStmt(ctx context.Context, query string) (*sql.Stmt, error) {
	state := getBankState(ctx)

	if stmt, ok := state.stmtCache[query]; ok {
		return stmt, nil
	}
	stmt, err := state.conn.PrepareContext(ctx, query)
	if err != nil {
		return nil, err
	}
	state.stmtCache[query] = stmt
	return stmt, nil
}
  1. tidb 5.0版本是否有类似的jdbc参数推荐(除6.0版本新特性的参数)

JDBC 参数从v5.4.0 prepared-plan-cache GA 之后就推荐使用了

1 个赞

:+1:

:+1::+1::+1:

一般java的连接还是比较常见的

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。