【发布时间】:2015-07-02 06:58:01
【问题描述】:
在昨天启动我们软件的促销活动后,我们的 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 托管上运行。我们确实将网站扩展到标准计划,它甚至使用了几个具有 2 个内核和 3.5 Gb 内存的实例。它没有解决错误。数据库当前具有 S2 性能的标准服务层。等级。 (它链接到网站)..
当没有高用户流量时,一切正常!
请帮助我们找到解决方案
【问题讨论】:
-
第一条信息很清楚。您正在尝试在 dbo.Users 的用户名列中添加相同的值。当您说在插入之前检查用户名时,您到底是做什么的?那是您的代码还是简化版本?第二条消息与连接的数量无关,而是与某些东西正在尝试使用连接而其他东西已经在使用它的事实有关。
-
出于好奇,您的用户是使用电子邮件地址还是用户名登录?
-
在您的代码中,我没有看到您检查现有用户名的位置?
-
@ughai 在调用上面的代码之前检查现有用户名。
标签: .net sql-server entity-framework azure