github.com/jackc/pgx/v5@v5.5.5/pgxpool/bench_test.go (about) 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 }