...
1 package pgxpool_test
2
3 import (
4 "context"
5 "os"
6 "testing"
7
8 "github.com/jackc/pgx/v5"
9 "github.com/jackc/pgx/v5/pgxpool"
10 "github.com/stretchr/testify/require"
11 )
12
13 func BenchmarkAcquireAndRelease(b *testing.B) {
14 pool, err := pgxpool.New(context.Background(), os.Getenv("PGX_TEST_DATABASE"))
15 require.NoError(b, err)
16 defer pool.Close()
17
18 b.ResetTimer()
19 for i := 0; i < b.N; i++ {
20 c, err := pool.Acquire(context.Background())
21 if err != nil {
22 b.Fatal(err)
23 }
24 c.Release()
25 }
26 }
27
28 func BenchmarkMinimalPreparedSelectBaseline(b *testing.B) {
29 config, err := pgxpool.ParseConfig(os.Getenv("PGX_TEST_DATABASE"))
30 require.NoError(b, err)
31
32 config.AfterConnect = func(ctx context.Context, c *pgx.Conn) error {
33 _, err := c.Prepare(ctx, "ps1", "select $1::int8")
34 return err
35 }
36
37 db, err := pgxpool.NewWithConfig(context.Background(), config)
38 require.NoError(b, err)
39
40 conn, err := db.Acquire(context.Background())
41 require.NoError(b, err)
42 defer conn.Release()
43
44 var n int64
45
46 b.ResetTimer()
47 for i := 0; i < b.N; i++ {
48 err = conn.QueryRow(context.Background(), "ps1", i).Scan(&n)
49 if err != nil {
50 b.Fatal(err)
51 }
52
53 if n != int64(i) {
54 b.Fatalf("expected %d, got %d", i, n)
55 }
56 }
57 }
58
59 func BenchmarkMinimalPreparedSelect(b *testing.B) {
60 config, err := pgxpool.ParseConfig(os.Getenv("PGX_TEST_DATABASE"))
61 require.NoError(b, err)
62
63 config.AfterConnect = func(ctx context.Context, c *pgx.Conn) error {
64 _, err := c.Prepare(ctx, "ps1", "select $1::int8")
65 return err
66 }
67
68 db, err := pgxpool.NewWithConfig(context.Background(), config)
69 require.NoError(b, err)
70
71 var n int64
72
73 b.ResetTimer()
74 for i := 0; i < b.N; i++ {
75 err = db.QueryRow(context.Background(), "ps1", i).Scan(&n)
76 if err != nil {
77 b.Fatal(err)
78 }
79
80 if n != int64(i) {
81 b.Fatalf("expected %d, got %d", i, n)
82 }
83 }
84 }
85
View as plain text