diff --git a/bench_test.go b/bench_test.go index 9377fa91..aa545172 100644 --- a/bench_test.go +++ b/bench_test.go @@ -407,6 +407,34 @@ func benchmarkWriteNRowsViaInsert(b *testing.B, n int) { } } +func benchmarkWriteNRowsViaBatchInsert(b *testing.B, n int) { + conn := mustConnect(b, mustParseConfig(b, os.Getenv("PGX_TEST_DATABASE"))) + defer closeConn(b, conn) + + mustExec(b, conn, benchmarkWriteTableCreateSQL) + _, err := conn.Prepare(context.Background(), "insert_t", benchmarkWriteTableInsertSQL) + if err != nil { + b.Fatal(err) + } + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + src := newBenchmarkWriteTableCopyFromSrc(n) + + batch := &pgx.Batch{} + for src.Next() { + values, _ := src.Values() + batch.Queue("insert_t", values...) + } + + err = conn.SendBatch(context.Background(), batch).Close() + if err != nil { + b.Fatal(err) + } + } +} + type queryArgs []any func (qa *queryArgs) Append(v any) string { @@ -560,6 +588,22 @@ func benchmarkWriteNRowsViaCopy(b *testing.B, n int) { } } +func BenchmarkWrite2RowsViaInsert(b *testing.B) { + benchmarkWriteNRowsViaInsert(b, 2) +} + +func BenchmarkWrite2RowsViaMultiInsert(b *testing.B) { + benchmarkWriteNRowsViaMultiInsert(b, 2) +} + +func BenchmarkWrite2RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 2) +} + +func BenchmarkWrite2RowsViaCopy(b *testing.B) { + benchmarkWriteNRowsViaCopy(b, 2) +} + func BenchmarkWrite5RowsViaInsert(b *testing.B) { benchmarkWriteNRowsViaInsert(b, 5) } @@ -567,6 +611,9 @@ func BenchmarkWrite5RowsViaInsert(b *testing.B) { func BenchmarkWrite5RowsViaMultiInsert(b *testing.B) { benchmarkWriteNRowsViaMultiInsert(b, 5) } +func BenchmarkWrite5RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 5) +} func BenchmarkWrite5RowsViaCopy(b *testing.B) { benchmarkWriteNRowsViaCopy(b, 5) @@ -579,6 +626,9 @@ func BenchmarkWrite10RowsViaInsert(b *testing.B) { func BenchmarkWrite10RowsViaMultiInsert(b *testing.B) { benchmarkWriteNRowsViaMultiInsert(b, 10) } +func BenchmarkWrite10RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 10) +} func BenchmarkWrite10RowsViaCopy(b *testing.B) { benchmarkWriteNRowsViaCopy(b, 10) @@ -591,6 +641,9 @@ func BenchmarkWrite100RowsViaInsert(b *testing.B) { func BenchmarkWrite100RowsViaMultiInsert(b *testing.B) { benchmarkWriteNRowsViaMultiInsert(b, 100) } +func BenchmarkWrite100RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 100) +} func BenchmarkWrite100RowsViaCopy(b *testing.B) { benchmarkWriteNRowsViaCopy(b, 100) @@ -604,6 +657,10 @@ func BenchmarkWrite1000RowsViaMultiInsert(b *testing.B) { benchmarkWriteNRowsViaMultiInsert(b, 1000) } +func BenchmarkWrite1000RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 1000) +} + func BenchmarkWrite1000RowsViaCopy(b *testing.B) { benchmarkWriteNRowsViaCopy(b, 1000) } @@ -615,6 +672,9 @@ func BenchmarkWrite10000RowsViaInsert(b *testing.B) { func BenchmarkWrite10000RowsViaMultiInsert(b *testing.B) { benchmarkWriteNRowsViaMultiInsert(b, 10000) } +func BenchmarkWrite10000RowsViaBatchInsert(b *testing.B) { + benchmarkWriteNRowsViaBatchInsert(b, 10000) +} func BenchmarkWrite10000RowsViaCopy(b *testing.B) { benchmarkWriteNRowsViaCopy(b, 10000)