Skip to content

Commit 663db6b

Browse files
fix: adjust benchmark parameters
1 parent ee6b876 commit 663db6b

29 files changed

Lines changed: 139 additions & 223 deletions

File tree

Drivers/SqliteDriver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ public override CommandGenCommands CreateSqlCommand(string sqlTextConstant)
273273
$"var {commandVar} = new SqliteCommand({sqlTextConstant}, {Variable.Connection.AsVarName()})",
274274
true),
275275
SetCommandText: string.Empty,
276-
PrepareCommand: $"{commandVar}.Prepare()"
276+
PrepareCommand: string.Empty
277277
);
278278
}
279279

benchmark/BenchmarkRunner/Benchmarks/BaseReadBenchmark.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33

44
public abstract class BaseReadBenchmark
55
{
6-
[Params(1000)]
7-
public int QueriesToRun { get; set; }
8-
9-
[Params(500)]
10-
public int CustomerCount { get; set; }
6+
protected const int CustomerCount = 500;
117

128
[Params(100, 500)]
139
public int Limit { get; set; }

benchmark/BenchmarkRunner/Benchmarks/BaseWriteBenchmark.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ public abstract class BaseWriteBenchmark
44
{
55
[Params(2000000)]
66
public int TotalRecords { get; set; }
7+
8+
[Params(500)]
9+
public int EFCoreBatchSize { get; set; }
710
public abstract Task Sqlc_AddOrderItems();
811
public abstract Task EFCore_AddOrderItems();
912
}

benchmark/BenchmarkRunner/Benchmarks/MysqlReadBenchmark.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ public class MysqlReadBenchmark : BaseReadBenchmark
1717
private static readonly string _connectionString = Config.GetMysqlConnectionString();
1818
private readonly QuerySql _sqlcImpl = new(_connectionString);
1919

20-
[Params(25, 100, 200)]
20+
[Params(3000)]
21+
public int QueriesToRun { get; set; }
22+
23+
[Params(200, 500)]
2124
public int ConcurrentQueries { get; set; }
2225

2326
[BenchmarkCategory("Read")]

benchmark/BenchmarkRunner/Benchmarks/MysqlWriteBenchmark.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ public class MysqlWriteBenchmark : BaseWriteBenchmark
2222

2323
/// <summary>
2424
/// MySQL batch size can be very large yet very performant in SQLC implementation due to
25-
/// CSV load usage, so we wish to examine exceptionally large batches as well.
25+
/// CSV load usage, so we wish to examine exceptionally large batches.
2626
/// </summary>
27-
[Params(500, 1000, 2000)]
28-
public int BatchSize { get; set; }
27+
[Params(1000, 5000, 20000)]
28+
public int SqlcBatchSize { get; set; }
2929

3030
[BenchmarkCategory("Write")]
3131
[Benchmark(Baseline = true, Description = "SQLC - AddOrderItems")]
3232
public override async Task Sqlc_AddOrderItems()
3333
{
34-
await Helpers.InsertInBatchesAsync(_testOrderItems, BatchSize, _sqlcImpl.AddOrderItemsAsync);
34+
await Helpers.InsertInBatchesAsync(_testOrderItems, SqlcBatchSize, _sqlcImpl.AddOrderItemsAsync);
3535
}
3636

3737
[BenchmarkCategory("Write")]
@@ -41,7 +41,7 @@ public override async Task EFCore_AddOrderItems()
4141
var args = _testOrderItems.Select(i => new Queries.AddOrderItemsArgs(
4242
i.OrderId, i.ProductId, i.Quantity, i.UnitPrice
4343
)).ToList();
44-
await Helpers.InsertInBatchesAsync(args, BatchSize, _efCoreImpl.AddOrderItems);
44+
await Helpers.InsertInBatchesAsync(args, EFCoreBatchSize, _efCoreImpl.AddOrderItems);
4545
}
4646

4747
public static Func<Task> GetSeedMethod()

benchmark/BenchmarkRunner/Benchmarks/PostgresqlReadBenchmark.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ public class PostgresqlReadBenchmark : BaseReadBenchmark
1717
private static readonly string _connectionString = Config.GetPostgresConnectionString();
1818
private readonly QuerySql _sqlcImpl = new(_connectionString);
1919

20-
[Params(10, 20, 50)]
20+
[Params(1000)]
21+
public int QueriesToRun { get; set; }
22+
23+
[Params(20, 50)]
2124
public int ConcurrentQueries { get; set; }
2225

2326
[BenchmarkCategory("Read")]

benchmark/BenchmarkRunner/Benchmarks/PostgresqlWriteBenchmark.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ public class PostgresqlWriteBenchmark : BaseWriteBenchmark
2020
private List<QuerySql.AddOrderItemsArgs> _testOrderItems = null!;
2121

2222
/// <summary>
23-
/// PostgreSQL batch size can be larger in SQLC implementation due to using binary import.
23+
/// PostgreSQL batch size can be larger in SQLC implementation due to using COPY FROM syntax.
2424
/// </summary>
25-
[Params(200, 500, 1000)]
26-
public int BatchSize { get; set; }
25+
[Params(500, 1000)]
26+
public int SqlcBatchSize { get; set; }
2727

2828
[BenchmarkCategory("Write")]
2929
[Benchmark(Baseline = true, Description = "SQLC - AddOrderItems")]
3030
public override async Task Sqlc_AddOrderItems()
3131
{
32-
await Helpers.InsertInBatchesAsync(_testOrderItems, BatchSize, _sqlcImpl.AddOrderItemsAsync);
32+
await Helpers.InsertInBatchesAsync(_testOrderItems, SqlcBatchSize, _sqlcImpl.AddOrderItemsAsync);
3333
}
3434

3535
[BenchmarkCategory("Write")]
@@ -39,7 +39,7 @@ public override async Task EFCore_AddOrderItems()
3939
var args = _testOrderItems.Select(i => new Queries.AddOrderItemsArgs(
4040
i.OrderId, i.ProductId, i.Quantity, i.UnitPrice
4141
)).ToList();
42-
await Helpers.InsertInBatchesAsync(args, BatchSize, _efCoreImpl.AddOrderItems);
42+
await Helpers.InsertInBatchesAsync(args, EFCoreBatchSize, _efCoreImpl.AddOrderItems);
4343
}
4444

4545
public static Func<Task> GetSeedMethod()

benchmark/BenchmarkRunner/Benchmarks/SqliteReadBenchmark.cs

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using BenchmarkDotNet.Jobs;
44
using BenchmarkRunner.Utils;
55
using EndToEndTests;
6-
using Microsoft.Data.Sqlite;
76
using SqliteEFCoreImpl;
87
using SqliteSqlcImpl;
98

@@ -19,10 +18,10 @@ public class SqliteReadBenchmark : BaseReadBenchmark
1918
private static readonly string _connectionString = Config.GetSqliteConnectionString();
2019
private readonly QuerySql _sqlcImpl = new(_connectionString);
2120

22-
/// <summary>
23-
/// SQLite supports read concurrency, but less so then other relational databases.
24-
/// </summary>
25-
[Params(5, 10, 25)]
21+
[Params(800)]
22+
public int QueriesToRun { get; set; }
23+
24+
[Params(10, 25)]
2625
public int ConcurrentQueries { get; set; }
2726

2827
[BenchmarkCategory("Read")]
@@ -45,20 +44,13 @@ public override async Task EFCore_NoTracking_GetCustomerOrders()
4544
{
4645
await ExecuteConcurrentlyAsync(QueriesToRun, ConcurrentQueries, async _ =>
4746
{
48-
try
49-
{
50-
await using var dbContext = new SalesDbContext(_connectionString);
51-
var queries = new Queries(dbContext, useTracking: false);
52-
return await queries.GetCustomerOrders(new Queries.GetCustomerOrdersArgs(
53-
CustomerId: Random.Shared.Next(1, CustomerCount),
54-
Offset: 0,
55-
Limit: Limit
56-
));
57-
}
58-
catch (SqliteException e)
59-
{
60-
throw new Exception($"Sqlite connection string: {_connectionString}, error: {e.Message}", e);
61-
}
47+
await using var dbContext = new SalesDbContext(_connectionString);
48+
var queries = new Queries(dbContext, useTracking: false);
49+
return await queries.GetCustomerOrders(new Queries.GetCustomerOrdersArgs(
50+
CustomerId: Random.Shared.Next(1, CustomerCount),
51+
Offset: 0,
52+
Limit: Limit
53+
));
6254
});
6355
}
6456

@@ -68,20 +60,13 @@ public override async Task EFCore_WithTracking_GetCustomerOrders()
6860
{
6961
await ExecuteConcurrentlyAsync(QueriesToRun, ConcurrentQueries, async _ =>
7062
{
71-
try
72-
{
73-
await using var dbContext = new SalesDbContext(_connectionString);
74-
var queries = new Queries(dbContext, useTracking: true);
75-
return await queries.GetCustomerOrders(new Queries.GetCustomerOrdersArgs(
76-
CustomerId: Random.Shared.Next(1, CustomerCount),
77-
Offset: 0,
78-
Limit: Limit
79-
));
80-
}
81-
catch (SqliteException e)
82-
{
83-
throw new Exception($"Sqlite connection string: {_connectionString}, error: {e.Message}", e);
84-
}
63+
await using var dbContext = new SalesDbContext(_connectionString);
64+
var queries = new Queries(dbContext, useTracking: true);
65+
return await queries.GetCustomerOrders(new Queries.GetCustomerOrdersArgs(
66+
CustomerId: Random.Shared.Next(1, CustomerCount),
67+
Offset: 0,
68+
Limit: Limit
69+
));
8570
});
8671
}
8772

benchmark/BenchmarkRunner/Benchmarks/SqliteWriteBenchmark.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,17 @@ public class SqliteWriteBenchmark : BaseWriteBenchmark
2121
private List<QuerySql.AddOrderItemsArgs> _testOrderItems = null!;
2222

2323
/// <summary>
24-
/// SQLite batch size for SQLC can be large but due to the plugin implementation of batch inserts
25-
/// for SQLite, there is a limitation of 1000 bind variables in the resulting SQL.
24+
/// SQLite batch size for SQLC there is a limitation of 1000 bind variables in the resulting SQL.
2625
/// e.g. If we insert to a table with 10 columns, the maximum batch size is 1000 / 10 = 100.
2726
/// </summary>
28-
[Params(50, 100, 200)]
29-
public int BatchSize { get; set; }
27+
[Params(50, 100)]
28+
public int SqlcBatchSize { get; set; }
3029

3130
[BenchmarkCategory("Write")]
3231
[Benchmark(Baseline = true, Description = "SQLC - AddOrderItems")]
3332
public override async Task Sqlc_AddOrderItems()
3433
{
35-
await Helpers.InsertInBatchesAsync(_testOrderItems, BatchSize, _sqlcImpl.AddOrderItemsAsync);
34+
await Helpers.InsertInBatchesAsync(_testOrderItems, SqlcBatchSize, _sqlcImpl.AddOrderItemsAsync);
3635
}
3736

3837
[BenchmarkCategory("Write")]
@@ -42,7 +41,7 @@ public override async Task EFCore_AddOrderItems()
4241
var args = _testOrderItems.Select(i => new Queries.AddOrderItemsArgs(
4342
i.OrderId, i.ProductId, i.Quantity, i.UnitPrice
4443
)).ToList();
45-
await Helpers.InsertInBatchesAsync(args, BatchSize, _efCoreImpl.AddOrderItems);
44+
await Helpers.InsertInBatchesAsync(args, EFCoreBatchSize, _efCoreImpl.AddOrderItems);
4645
}
4746

4847
public static Func<Task> GetSeedMethod()

benchmark/BenchmarkRunner/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.CommandLine;
1+
using System.CommandLine;
22

33
public class Program
44
{

0 commit comments

Comments
 (0)