錯誤原因
當緩存的預編譯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()
}