После запуска промо-акции нашего программного обеспечения вчера мы встретили некоторые странные проблемы с нашей базой данных SQL Server. Эта ошибка возникает, когда пользователи регистрируются на нашем сайте. Когда это был низкий пользовательский трафик, все выглядело нормально и работало правильно, но как только трафик увеличился до ~ 10 подписчиков за раз, все идет вниз. Как только он сбрасывает каждый следующий запрос в базу данных, возникает ошибка. Единственный способ исправить это - перезапустить веб-сайт (до следующего сбоя и т.д.).
Это ошибка:
Нарушение ограничения UNIQUE KEY 'AK_Users_Username. Невозможно вставить дубликат ключа в объект 'dbo.Users. Значение дублирующегося ключа (имя пользователя). Заявление было прекращено.
(Несмотря на то, что мы проверяем имя пользователя перед его добавлением)
Также произошла другая ошибка:
Новая транзакция не допускается, поскольку в сеансе есть другие потоки.
Это фрагмент кода, который добавляет User
и его License
в базу данных:
var db = new CBEntities();
var user = db.Users.Add(new User
{
Username = model.Username,
Firstname = model.FirstName,
Lastname = model.LastName,
Email = model.Email,
Password = model.Password,
EmailConfirmed = 0,
Country = model.Country,
EmailSubscribed = model.Newsletter != null && model.Newsletter.Value ? 1 : 0,
Role = "User",
SignUpDate = DateTime.UtcNow
});
db.SaveChanges();
//create a initial trial license for user
var lic = db.Licenses.Add(new License
{
ExpirationDate = DateTime.UtcNow.AddDays(21),
UserID = user.ID,
Key = "",
PackageID = coupon.ID,
Status = (int)LicenseStatus.Active,
Type = (int)LicenseTypes.TRIAL
});
db.SaveChanges();
user.LicenseID = lic.ID;
db.SaveChanges();
Сайт и база данных работают на Azure-хостинге. Мы действительно масштабировали сайт до плана STANDARD, и он использовал даже несколько экземпляров с 2 ядрами и 3,5 ГБ памяти. Это не решило ошибку. В настоящее время в базе данных имеется STANDARD уровень обслуживания с S2 perf. уровень. (Он связан с веб-сайтом).
Когда нет трафика с высокими пользователями, все работает нормально!
Пожалуйста, помогите нам найти решение