Benchmark nil context execution
This commit is contained in:
+43
-13
@@ -14,9 +14,14 @@ func BenchmarkConnect(b *testing.B) {
|
|||||||
benchmarks := []struct {
|
benchmarks := []struct {
|
||||||
name string
|
name string
|
||||||
env string
|
env string
|
||||||
|
ctx context.Context
|
||||||
}{
|
}{
|
||||||
{"Unix socket", "PGX_TEST_UNIX_SOCKET_CONN_STRING"},
|
// The first benchmark in the list sometimes executes faster, no matter how
|
||||||
{"TCP", "PGX_TEST_TCP_CONN_STRING"},
|
// you reorder it. Nil context is still faster on average.
|
||||||
|
{"Unix socket", "PGX_TEST_UNIX_SOCKET_CONN_STRING", context.Background()},
|
||||||
|
{"TCP", "PGX_TEST_TCP_CONN_STRING", context.Background()},
|
||||||
|
{"Unix socket nil context", "PGX_TEST_UNIX_SOCKET_CONN_STRING", nil},
|
||||||
|
{"TCP nil context", "PGX_TEST_TCP_CONN_STRING", nil},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, bm := range benchmarks {
|
for _, bm := range benchmarks {
|
||||||
@@ -28,10 +33,10 @@ func BenchmarkConnect(b *testing.B) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
conn, err := pgconn.Connect(context.Background(), connString)
|
conn, err := pgconn.Connect(bm.ctx, connString)
|
||||||
require.Nil(b, err)
|
require.Nil(b, err)
|
||||||
|
|
||||||
err = conn.Close(context.Background())
|
err = conn.Close(bm.ctx)
|
||||||
require.Nil(b, err)
|
require.Nil(b, err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -39,16 +44,26 @@ func BenchmarkConnect(b *testing.B) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkExec(b *testing.B) {
|
func BenchmarkExec(b *testing.B) {
|
||||||
conn, err := pgconn.Connect(context.Background(), os.Getenv("PGX_TEST_CONN_STRING"))
|
expectedValues := [][]byte{[]byte("hello"), []byte("42"), []byte("2019-01-01")}
|
||||||
|
benchmarks := []struct {
|
||||||
|
name string
|
||||||
|
ctx context.Context
|
||||||
|
}{
|
||||||
|
{"background context", context.Background()},
|
||||||
|
{"nil context", nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, bm := range benchmarks {
|
||||||
|
bm := bm
|
||||||
|
b.Run(bm.name, func(b *testing.B) {
|
||||||
|
conn, err := pgconn.Connect(bm.ctx, os.Getenv("PGX_TEST_CONN_STRING"))
|
||||||
require.Nil(b, err)
|
require.Nil(b, err)
|
||||||
defer closeConn(b, conn)
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
expectedValues := [][]byte{[]byte("hello"), []byte("42"), []byte("2019-01-01")}
|
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
mrr := conn.Exec(context.Background(), "select 'hello'::text as a, 42::int4 as b, '2019-01-01'::date")
|
mrr := conn.Exec(bm.ctx, "select 'hello'::text as a, 42::int4 as b, '2019-01-01'::date")
|
||||||
|
|
||||||
for mrr.NextResult() {
|
for mrr.NextResult() {
|
||||||
rr := mrr.ResultReader()
|
rr := mrr.ResultReader()
|
||||||
@@ -80,6 +95,8 @@ func BenchmarkExec(b *testing.B) {
|
|||||||
b.Fatal(err)
|
b.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkExecPossibleToCancel(b *testing.B) {
|
func BenchmarkExecPossibleToCancel(b *testing.B) {
|
||||||
@@ -130,19 +147,30 @@ func BenchmarkExecPossibleToCancel(b *testing.B) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkExecPrepared(b *testing.B) {
|
func BenchmarkExecPrepared(b *testing.B) {
|
||||||
conn, err := pgconn.Connect(context.Background(), os.Getenv("PGX_TEST_CONN_STRING"))
|
expectedValues := [][]byte{[]byte("hello"), []byte("42"), []byte("2019-01-01")}
|
||||||
|
|
||||||
|
benchmarks := []struct {
|
||||||
|
name string
|
||||||
|
ctx context.Context
|
||||||
|
}{
|
||||||
|
{"background context", context.Background()},
|
||||||
|
{"nil context", nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, bm := range benchmarks {
|
||||||
|
bm := bm
|
||||||
|
b.Run(bm.name, func(b *testing.B) {
|
||||||
|
conn, err := pgconn.Connect(bm.ctx, os.Getenv("PGX_TEST_CONN_STRING"))
|
||||||
require.Nil(b, err)
|
require.Nil(b, err)
|
||||||
defer closeConn(b, conn)
|
defer closeConn(b, conn)
|
||||||
|
|
||||||
_, err = conn.Prepare(context.Background(), "ps1", "select 'hello'::text as a, 42::int4 as b, '2019-01-01'::date", nil)
|
_, err = conn.Prepare(bm.ctx, "ps1", "select 'hello'::text as a, 42::int4 as b, '2019-01-01'::date", nil)
|
||||||
require.Nil(b, err)
|
require.Nil(b, err)
|
||||||
|
|
||||||
expectedValues := [][]byte{[]byte("hello"), []byte("42"), []byte("2019-01-01")}
|
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
rr := conn.ExecPrepared(context.Background(), "ps1", nil, nil, nil)
|
rr := conn.ExecPrepared(bm.ctx, "ps1", nil, nil, nil)
|
||||||
|
|
||||||
rowCount := 0
|
rowCount := 0
|
||||||
for rr.NextRow() {
|
for rr.NextRow() {
|
||||||
@@ -165,6 +193,8 @@ func BenchmarkExecPrepared(b *testing.B) {
|
|||||||
b.Fatalf("unexpected rowCount: %d", rowCount)
|
b.Fatalf("unexpected rowCount: %d", rowCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkExecPreparedPossibleToCancel(b *testing.B) {
|
func BenchmarkExecPreparedPossibleToCancel(b *testing.B) {
|
||||||
|
|||||||
Reference in New Issue
Block a user