• INADA Naoki's avatar
    database/sql: reduce lock contention in Stmt.connStmt · 1b61a978
    INADA Naoki authored
    Previouslly, Stmt.connStmt calls DB.connIfFree on each Stmt.css.
    Since Stmt.connStmt locks Stmt.mu, a concurrent use of Stmt causes lock
    contention on Stmt.mu.
    Additionally, DB.connIfFree locks DB.mu which is shared by DB.addDep and
    DB.removeDep.
    
    This change removes DB.connIfFree and makes use of a first unused
    connection in idle connection pool to reduce lock contention
    without making it complicated.
    
    Fixes #9484
    
    On EC2 c3.8xlarge (E5-2680 v2 @ 2.80GHz * 32 vCPU):
    
    benchmark                           old ns/op     new ns/op     delta
    BenchmarkManyConcurrentQuery-8      40249         34721         -13.73%
    BenchmarkManyConcurrentQuery-16     45610         40176         -11.91%
    BenchmarkManyConcurrentQuery-32     109831        43179         -60.69%
    
    benchmark                           old allocs     new allocs     delta
    BenchmarkManyConcurrentQuery-8      25             25             +0.00%
    BenchmarkManyConcurrentQuery-16     25             25             +0.00%
    BenchmarkManyConcurrentQuery-32     25             25             +0.00%
    
    benchmark                           old bytes     new bytes     delta
    BenchmarkManyConcurrentQuery-8      3980          3969          -0.28%
    BenchmarkManyConcurrentQuery-16     3980          3982          +0.05%
    BenchmarkManyConcurrentQuery-32     3993          3990          -0.08%
    
    Change-Id: Ic96296922c465bac38a260018c58324dae1531d9
    Reviewed-on: https://go-review.googlesource.com/2207Reviewed-by: 's avatarMikio Hara <mikioh.mikioh@gmail.com>
    1b61a978
Name
Last commit
Last update
..
driver Loading commit data...
convert.go Loading commit data...
convert_test.go Loading commit data...
doc.txt Loading commit data...
example_test.go Loading commit data...
fakedb_test.go Loading commit data...
sql.go Loading commit data...
sql_test.go Loading commit data...