Не удалось выделить место для объекта «dbo.SORT временное хранилище запуска: 140737501921280» в базе данных «tempdb», поскольку файловая группа «PRIMARY» заполнена . Освободите дисковое пространство, удалив ненужные файлы, удалив объекты в файловой группе, добавив в файловую группу дополнительные файлы или включив автоматическое увеличение для существующих файлов в файловой группе.\r\nЖурнал транзакций для базы данных tempdb заполнен из-за "ACTIVE_TRANSACTION" и задержанный lsn равен (41:136:347)
Я вижу, что объем памяти для раздела «C» уменьшается, когда я выполнил эту функцию:< /p>

Когда я перезапускаю SQL Server, свободное пространство становится около 30 ГБ. Я пытался использовать многопоточность (параллельную) со вставкой без заметного изменения времени, так что вы порекомендуете или есть ли какие-либо проблемы в коде, показанном здесь?
Примечание: цикл for не занимает слишком много времени, даже если он содержит 2 миллиона записей.
public static async Task AddOrUpdateBulkByTransactionAsync(this DbContext _myDatabaseContext, List data) where TEntity : class
{
using (var transaction = await _myDatabaseContext.Database.BeginTransactionAsync())
{
try
{
_myDatabaseContext.Database.SetCommandTimeout(0);
var currentTime = DateTime.Now;
// Disable change tracking
_myDatabaseContext.ChangeTracker.AutoDetectChangesEnabled = false;
// Set CreatedDate and UpdatedDate for each entity
foreach (var entity in data)
{
var createdDateProperty = entity.GetType().GetProperty("CreatedDate");
if (createdDateProperty != null && (createdDateProperty.GetValue(entity) == null || createdDateProperty.GetValue(entity).Equals(DateTime.MinValue)))
{
// Set CreatedDate only if it's not already set
createdDateProperty.SetValue(entity, currentTime);
}
var updatedDateProperty = entity.GetType().GetProperty("UpdatedDate");
if (updatedDateProperty != null)
{
updatedDateProperty.SetValue(entity, currentTime);
}
}
// Bulk insert or update
var updateByProperties = GetUpdateByProperties();
var bulkConfig = new BulkConfig()
{
UpdateByProperties = updateByProperties,
CalculateStats = true,
SetOutputIdentity = false
};
// Batch size for processing
int batchSize = 50000;
for (int i = 0; i < data.Count; i += batchSize)
{
var batch = data.Skip(i).Take(batchSize).ToList();
await _myDatabaseContext.BulkInsertOrUpdateAsync(batch, bulkConfig);
}
// Commit the transaction if everything succeeds
await transaction.CommitAsync();
return new OperationResultDto
{
OperationResult = bulkConfig.StatsInfo
};
}
catch (Exception ex)
{
// Handle exceptions and roll back the transaction if something goes wrong
transaction.Rollback();
return new OperationResultDto
{
Error = new ErrorDto
{
Details = ex.Message + ex.InnerException?.Message
}
};
}
finally
{
// Re-enable change tracking
_myDatabaseContext.ChangeTracker.AutoDetectChangesEnabled = true;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... extensions
Мобильная версия