Skip to content

Commit feea06b

Browse files
committed
Reduce MySqlBulkCopy packet size to 1 MiB.
1 parent b0c98d4 commit feea06b

File tree

3 files changed

+26
-27
lines changed

3 files changed

+26
-27
lines changed

src/MySqlConnector/MySql.Data.MySqlClient/MySqlBulkCopy.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,7 @@ static void AddColumnMapping(List<MySqlBulkCopyColumnMapping> columnMappings, bo
262262

263263
internal async Task SendDataReaderAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
264264
{
265-
// rent a buffer that can fit in one packet
266-
const int maxLength = 16_777_200;
265+
const int maxLength = 1048575;
267266
var buffer = ArrayPool<byte>.Shared.Rent(maxLength + 1);
268267
var outputIndex = 0;
269268

@@ -307,7 +306,7 @@ await m_valuesEnumerator.MoveNextAsync().ConfigureAwait(false) :
307306
if (!wroteRow)
308307
{
309308
if (startOutputIndex == 0)
310-
throw new NotSupportedException("Total row length must be less than 16MiB.");
309+
throw new NotSupportedException("Total row length must be less than 1 MiB.");
311310
var payload = new PayloadData(new ArraySegment<byte>(buffer, 0, startOutputIndex));
312311
await m_connection.Session.SendReplyAsync(payload, ioBehavior, cancellationToken).ConfigureAwait(false);
313312
outputIndex = 0;

tests/SideBySide/BulkLoaderAsync.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ public async Task BulkLoadLocalMemoryStream()
396396
}
397397

398398
[Fact]
399-
public async Task BulkLoadDataReader()
399+
public async Task BulkCopyDataReader()
400400
{
401401
using var connection = new MySqlConnection(GetLocalConnectionString());
402402
using var connection2 = new MySqlConnection(GetLocalConnectionString());
@@ -442,7 +442,7 @@ public void BulkCopyNullDataTable()
442442
}
443443

444444
[Fact]
445-
public async Task BulkLoadDataTableWithLongData()
445+
public async Task BulkCopyDataTableWithLongData()
446446
{
447447
var dataTable = new DataTable()
448448
{
@@ -453,8 +453,8 @@ public async Task BulkLoadDataTableWithLongData()
453453
},
454454
Rows =
455455
{
456-
new object[] { 1, new byte[8388500] },
457-
new object[] { 12345678, new byte[8388500] },
456+
new object[] { 1, new byte[524200] },
457+
new object[] { 12345678, new byte[524200] },
458458
},
459459
};
460460

@@ -474,7 +474,7 @@ public async Task BulkLoadDataTableWithLongData()
474474
}
475475

476476
[Fact]
477-
public async Task BulkLoadDataTableWithTooLongData()
477+
public async Task BulkCopyDataTableWithTooLongData()
478478
{
479479
var dataTable = new DataTable()
480480
{
@@ -484,7 +484,7 @@ public async Task BulkLoadDataTableWithTooLongData()
484484
},
485485
Rows =
486486
{
487-
new object[] { new byte[8388700] },
487+
new object[] { new byte[524300] },
488488
}
489489
};
490490

@@ -590,7 +590,7 @@ public async Task BulkCopyAbort(int notifyAfter, int rowCount, int abortAfter, i
590590
{
591591
Columns = { new DataColumn("value", typeof(string)) },
592592
};
593-
var str = new string('a', 1_000_000);
593+
var str = new string('a', 62500);
594594
foreach (var x in Enumerable.Range(1, rowCount))
595595
dataTable.Rows.Add(new object[] { str });
596596

tests/SideBySide/BulkLoaderSync.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ public void BulkLoadLocalMemoryStream()
477477
}
478478

479479
[Fact]
480-
public void BulkLoadDataReader()
480+
public void BulkCopyDataReader()
481481
{
482482
using var connection = new MySqlConnection(GetLocalConnectionString());
483483
using var connection2 = new MySqlConnection(GetLocalConnectionString());
@@ -522,8 +522,8 @@ public void BulkCopyNullDataTable()
522522
Assert.Throws<ArgumentNullException>(() => bulkCopy.WriteToServer(default(DataTable)));
523523
}
524524

525-
[SkippableFact(ServerFeatures.LargePackets)]
526-
public void BulkLoadDataTableWithLongBlob()
525+
[Fact]
526+
public void BulkCopyDataTableWithLongBlob()
527527
{
528528
var dataTable = new DataTable()
529529
{
@@ -534,8 +534,8 @@ public void BulkLoadDataTableWithLongBlob()
534534
},
535535
Rows =
536536
{
537-
new object[] { 1, new byte[8388500] },
538-
new object[] { 12345678, new byte[8388500] },
537+
new object[] { 1, new byte[524200] },
538+
new object[] { 12345678, new byte[524200] },
539539
},
540540
};
541541

@@ -555,12 +555,12 @@ public void BulkLoadDataTableWithLongBlob()
555555

556556
using (var cmd = new MySqlCommand(@"select sum(length(b)) from bulk_load_data_table;", connection))
557557
{
558-
Assert.Equal(16_777_000m, cmd.ExecuteScalar());
558+
Assert.Equal(1_048_400m, cmd.ExecuteScalar());
559559
}
560560
}
561561

562-
[SkippableFact(ServerFeatures.LargePackets)]
563-
public void BulkLoadDataTableWithLongString()
562+
[Fact]
563+
public void BulkCopyDataTableWithLongString()
564564
{
565565
var dataTable = new DataTable()
566566
{
@@ -571,8 +571,8 @@ public void BulkLoadDataTableWithLongString()
571571
},
572572
Rows =
573573
{
574-
new object[] { 1, new string('a', 16_777_000) },
575-
new object[] { 2, new string('b', 16_777_000) },
574+
new object[] { 1, new string('a', 1_048_500) },
575+
new object[] { 2, new string('b', 1_048_500) },
576576
},
577577
};
578578

@@ -592,12 +592,12 @@ public void BulkLoadDataTableWithLongString()
592592

593593
using (var cmd = new MySqlCommand(@"select sum(length(b)) from bulk_load_data_table;", connection))
594594
{
595-
Assert.Equal(33_554_000m, cmd.ExecuteScalar());
595+
Assert.Equal(2_097_000m, cmd.ExecuteScalar());
596596
}
597597
}
598598

599599
[Fact]
600-
public void BulkLoadDataTableWithSpecialCharacters()
600+
public void BulkCopyDataTableWithSpecialCharacters()
601601
{
602602
var dataTable = new DataTable()
603603
{
@@ -640,7 +640,7 @@ public void BulkLoadDataTableWithSpecialCharacters()
640640
}
641641

642642
[Fact]
643-
public void BulkLoadDataTableWithTooLongBlob()
643+
public void BulkCopyDataTableWithTooLongBlob()
644644
{
645645
var dataTable = new DataTable()
646646
{
@@ -650,7 +650,7 @@ public void BulkLoadDataTableWithTooLongBlob()
650650
},
651651
Rows =
652652
{
653-
new object[] { new byte[8388700] },
653+
new object[] { new byte[524300] },
654654
}
655655
};
656656

@@ -670,7 +670,7 @@ public void BulkLoadDataTableWithTooLongBlob()
670670
}
671671

672672
[Fact]
673-
public void BulkLoadDataTableWithTooLongString()
673+
public void BulkCopyDataTableWithTooLongString()
674674
{
675675
var dataTable = new DataTable()
676676
{
@@ -680,7 +680,7 @@ public void BulkLoadDataTableWithTooLongString()
680680
},
681681
Rows =
682682
{
683-
new object[] { new string('a', 16_777_400) },
683+
new object[] { new string('a', 1_048_700) },
684684
}
685685
};
686686

@@ -775,7 +775,7 @@ public void BulkCopyAbort(int notifyAfter, int rowCount, int abortAfter, int exp
775775
{
776776
Columns = { new DataColumn("value", typeof(string)) },
777777
};
778-
var str = new string('a', 1_000_000);
778+
var str = new string('a', 62500);
779779
foreach (var x in Enumerable.Range(1, rowCount))
780780
dataTable.Rows.Add(new object[] { str });
781781

0 commit comments

Comments
 (0)