SQL Server 上的插入/更新表锁

发布于 2024-12-10 01:55:57 字数 265 浏览 0 评论 0原文

我在 SQL Server 2008 中有一个包含大约 70 列的大表。一个多线程 .NET 应用程序正在调用数据库上的存储过程来插入/更新该表。频率约为每秒 3 次。

我每周对表进行分区,因为几乎每个查询在表上都有一个日期时间 约束。

有时插入/更新表需要很长时间。我怀疑有时 INSERTION 会使 UPDATE 等待;有时 UPDATE 会使 INSERTION 等待。是否可以?

我该如何设计表来避免此类锁定?性能是这里的主要问题。

I have a big table with around 70 columns in SQL Server 2008. A multithreaded .NET application is calling a stored proc on database to insert into / update the table. Frequency is around 3 times a second.

I have made weekly partitions on table since almost every query has a datetime constraint on the table.

Sometimes it takes a long time to insert/update the table. I am suspicious that sometimes INSERTION makes UPDATE wait; sometimes UPDATE makes INSERTION wait. Is it possible?

How can I design the table to avoid such locks? Performance is the main issue here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

踏雪无痕 2024-12-17 01:55:57

你是对的,你可能陷入僵局导致事情等待。首先需要检查几件事;

  1. 你的索引正确吗?
  2. 如果您的数据库处于“完整”恢复模式,您是否需要它?简单的恢复确实可以加快插入/更新的速度,但是您会失去备份的时间点恢复。
  3. 您是否可能有多个线程写入同一条记录?如果没有,NOLOCK 可能是您的朋友,但这意味着您的数据有时可能会出现一两秒钟的不一致。

You're right that you're probably hitting deadlocks causing things to wait. A couple things to check first;

  1. Are your indexes correct?
  2. If your DB is in 'Full' recovery mode do you need it? Simple recovery really speeds up inserts/updates, but you loose point-in-time restores for backups.
  3. Are you likely to have multiple threads writing the same record? If not, NOLOCK might be your friend here, but that would mean your data might be inconsitent for a second or two on occasion.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文