请教多进程访问数据库的问题

csgo 2011-05-16 05:58:34
现有一项目,有多个服务器共同访问一个数据库,担心会造成多服务器共同操作数据库,造成数据的异常,请问此种问题如何结果。大致说说想法也可,谢谢诸位!
...全文
287 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
obuntu 2011-05-16
  • 打赏
  • 举报
回复
搞好事务就可以了。。

在数据一致性和并发中间做个权衡。

不是三言两语说得清,自己在实际中多测测吧。
--小F-- 2011-05-16
  • 打赏
  • 举报
回复
按同一顺序访问对象。 

避免事务中的用户交互。

保持事务简短并在一个批处理中。

使用低隔离级别。

使用绑定连接。


按同一顺序访问对象

如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序。

避免事务中的用户交互

避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。

保持事务简短并在一个批处理中

在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。

保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。

使用低隔离级别

确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺。

使用绑定连接

使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/12/24/5071970.aspx
快溜 2011-05-16
  • 打赏
  • 举报
回复
多个服务器共同访问一个数据库...
估计你的访问频率很高。
bihai 2011-05-16
  • 打赏
  • 举报
回复
用"锁"
AcHerat 2011-05-16
  • 打赏
  • 举报
回复
你说的就是数据库的并发问题,个人看法是程序里加事务控制或者在数据库里用事务 隔离级别 等来控制,再担心你就加表锁 行锁呗!

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧