database/sql 测试stmt

2019-12-24  本文已影响0人  不存在的里皮
func execAndPrepare()  {
    // create a connection (e.g. "postgres", "mysql", or "sqlite3")
    usr := "root"
    pwd := "shen6508"
    address := "localhost"
    dbName := "test"
    dbLink := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",
        usr, pwd, address, dbName)

    if Db, err := sql.Open("mysql", dbLink); err != nil {
        print(err.Error())
    } else {
        Db.SetMaxOpenConns(300)

        // Prepare stmt and exec 1000 times.
        var err error
        var stmt *sql.Stmt
        SQL := "select * from tn where id = 70"
        stmt, err = Db.Prepare(SQL)
        if err != nil {
            log.Println(err.Error())
            return
        }
        defer stmt.Close()

        timeCount := 120
        // stmt exec 1000 times.
        stmtSt := time.Now() // get current time
        for i := 0; i < timeCount; i++ {
            _, err = stmt.Query()
            if err != nil {
                log.Printf("stmt %d %v", i, err.Error())
                return
            }
        }
        log.Printf("%v\n", time.Since(stmtSt))

        dbExecSt := time.Now()
        // Exec 1000 times.
        for i := 0; i < timeCount; i++ {
            _, err = Db.Exec(SQL)
            if err != nil {
                log.Printf("dbExec %d %v", i, err.Error())
                return
            }
        }
        log.Printf("%v\n", time.Since(dbExecSt))


    }

}

输出

2019/12/24 15:55:30 174.5317ms
2019/12/24 15:55:30 15.9565ms

timeCount为150时会报错Too Many Connections

上一篇下一篇

猜你喜欢

热点阅读