总结 部分中建议jdbc配置:
- TiDB 兼容 MySQL 协议的不同命令,最佳的性能表现来自于应用程序使用 Prepared Statement 接口,并设置以下 JDBC 连接参数:
useServerPrepStmts=true&cachePrepStmts=true&prepStmtCacheSize=1000&prepStmtCacheSqlLimit=20480&useConfigs=maxPerformance
问题:
- 此处的JDBC是特指java代码么
- golang 语言开发的配置是否适用上述参数,如果不适用,应如何配置类似参数。
- tidb 5.0版本是否有类似的jdbc参数推荐(除6.0版本新特性的参数)
dbsid
(Dbsid)
2
- 此处的JDBC是特指java代码么
特指 Java 代码
- 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
}
- tidb 5.0版本是否有类似的jdbc参数推荐(除6.0版本新特性的参数)
JDBC 参数从v5.4.0 prepared-plan-cache GA 之后就推荐使用了
1 个赞
system
(system)
关闭
6
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。