MSSQL 多用户访问

Posted

技术标签:

【中文标题】MSSQL 多用户访问【英文标题】:MSSQL multi-user access 【发布时间】:2014-01-31 09:38:57 【问题描述】:

我在使用 MSSQL 实例时遇到问题,有时会出现死锁。我有一个表 A,其中包含温度测量值。我的应用程序包含 1-10 个工作线程,它们通过 TCP 从远程位置收集测量值,然后希望将它们存储在数据库中。当然,这些工人使用交易来执行他们的任务。事务的 IsolationLevel 设置为 ReadCommitted。仍然会发生死锁,并且数据库服务器的 CPU 负载达到 100%。谁能告诉我,我必须考虑什么才能让这个工作?我以为数据库系统会为我做多用户同步。至少这是我在大学学到的。

【问题讨论】:

该大学还教导说,死锁是数据库确保“多用户同步”的后果。阅读Detecting and Ending Deadlocks。您在 Table A 上缺少索引。 【参考方案1】:

我的建议是创建另一个线程来处理您对数据库的更新。因此,以线程安全的方式将信息添加到线程的集合中,并让 1 个工作线程对表进行更新/插入。您甚至可以连接 10-30 条这样的语句并一起执行。

这就是我们在 SMS Sender 上所做的,我们使用了多达 50 个线程,每个线程每 100 毫秒发送一条 SMS 一条 SMS。它对我们非常有效。

【讨论】:

这个完全一样,我想出来的。但我还有另一个应用程序将存储的数据作为网络服务提供服务...... 这很可能是你得到死锁的原因,因为你是从你更新的同一个表中选择的。当您从其他应用程序中进行选择时,添加WITH (NOLOCK) 或将您的隔离级别更改为未提交读。 (***.com/questions/686724/…)。如果您不从一侧回滚数据,并且在选择 web 服务时不从其他地方进行另一次更新,那么您应该没有问题。 考克斯,你不能两全其美。你必须决定什么是最重要的。您不必在编辑时锁定记录吗?工作线程是否再次更新这些相同的记录。如果没有,那么没有问题。阅读信息,对其进行操作,然后更新记录。否则,您需要围绕该问题重新考虑您的架构。 问题在于,我没有能力只锁定 想要的东西。正如我现在看到的情况,我只能提供一个带有 IsolationLevel 的事务,就是这样。锁由 NHibernate 或 .NET 魔术数据库框架获取。真的吗?在许多情况下,两个进程不会访问相同的数据,但是当他们访问时,我必须克服这个问题。如果 web 服务必须等待收集服务完成也没关系,但现在数据库系统只允许在这种情况下出现死锁。

以上是关于MSSQL 多用户访问的主要内容,如果未能解决你的问题,请参考以下文章

使用多用户 Web 界面的报告访问数据库

关于MSSQL用户高置的问题

附加了mssql2000数据库,怎么新建用户,而且要指定用户权限?

php+mssql 访问速度慢是啥原因?

数据库优势?访问、MySQL、msSQL 或任何其他? [关闭]

我服务器上安装完mssql数据库,本地无法访问,请问服务器上要如何设置