...

Source file src/github.com/jackc/pgx/v4/pgxpool/bench_test.go

Documentation: github.com/jackc/pgx/v4/pgxpool

     1  package pgxpool_test
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/jackc/pgx/v4"
     9  	"github.com/jackc/pgx/v4/pgxpool"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func BenchmarkAcquireAndRelease(b *testing.B) {
    14  	pool, err := pgxpool.Connect(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.ConnectConfig(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.ConnectConfig(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