错误原因
当缓存的预编译SQL数量超过默认最大值时 就会产生如上错误 导致数据库直接无法使用
检查
查询数据库预编译SQL创建次数
show global status like 'com_stmt%';
每个连接创建的预编译语句有限, 需要着重检查是否出现动态
测试代码:
func TestPrepare(t *testing.T) {
var wg sync.WaitGroup
txn := sql.TxOptions{sql.LevelDefault,false}
tx, err := db.BeginTx(context.Background(),&txn)
painc_err(err)
for i := 0; i < 100000; i++ {
wg.Add(1)
go func() {
stmt, err :=tx.Prepare("insert into actor(date,name) values(?,?)")
painc_err(err)
defer stmt.Close()
time.Sleep(time.Second)
wg.Done()
}()
}
wg.Wait()
}