C#调用存储过程,过程里有DBLINK.物理分库会带来很大的性能影响吗?

[复制链接]
查看11 | 回复9 | 2007-9-26 18:42:10 | 显示全部楼层 |阅读模式
C#开发工程师 把业务逻辑写在存储过程里,在开发库已经通过SCHEMA准备分库.很多UPDATE语句都要更新对方库中的表记录.
UPDATE SCHEMA.TABLE@DBLINK_T1A
A.SARLY=A.SARLY*1.01
我隐约感觉将来分库后会带来很大的性能影响
这UPDATE 语句 和SELECT 语句 一般都是在 DBLINK _t1 的数据库上执行吧?
UPDATE 更新对方表的数据 涉及到行锁TX 会有什么具体性能影响?
如果有性能影响 C#或者数据库可有什么避免的方法? 比较有100万的插入,200万的查询!

回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
如果涉及的表都是在同一个库上,影响不大,CBO会选择在远端节点执行,不会出现把数据传到本地,处理后再传回去的问题。但如果涉及的表有远端库的,也有本地库的,这就不好说了。
这锁应该没什么差异,和在本地执行是一样的。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
bfc99 发表于 2015-7-2 15:30
如果涉及的表都是在同一个库上,影响不大,CBO会选择在远端节点执行,不会出现把数据传到本地,处理后再传回 ...

你意思说DBLINK 基本上没有什么问题. 更新语句都是在对方的数据库执行.
只要语句所涉及的表 两边都有的话 会很麻烦是吧?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
zengmuansha 发表于 2015-7-2 16:00
你意思说DBLINK 基本上没有什么问题. 更新语句都是在对方的数据库执行.
只要语句所涉及的表 两边都有的 ...

是的。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
bfc99 发表于 2015-7-2 16:05
是的。

尽量避免 出现两边的表同时参与DML !


回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
bfc99 发表于 2015-7-2 16:05
是的。

要是这样的语句 就是你说的情况
UPDATE MC_OPERATE_REQTOTAL_D@MC_OPERATE T1--更新远程表

SET (T1.PURCH_POQTY,T1.SHIPED_ROADQTY,T1.PURCH_NOPOQTY)=(

SELECT (T1.PURCH_POQTY+T2.PURCH_QTY),(T1.SHIPED_ROADQTY+T2.PURCH_QTY),(T1.PURCH_NOPOQTY-T2.PURCH_QTY) FROM MC_PURCH_PO_D@MC_GOODS T2 --数据来源本地库

WHERE T1.GOODS_ID=T2.GOODS_ID AND T2.REQTOTAL_ORDERID=T1.REQTOTAL_ORDERID AND T2.PURCH_ORDERID=IN_PURCH_ORDERID);

像这样会发生啥情况? 把本地的数数据传到远程 执行UPDATE?
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
Dblink永远是馊主意
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
wolfop 发表于 2015-7-18 09:51
Dblink永远是馊主意

那你有什么好主意?
我查了下 NET 也有分布式事务来的,不知道可好
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
zengmuansha 发表于 2015-7-18 08:30
要是这样的语句 就是你说的情况
UPDATE MC_OPERATE_REQTOTAL_D@MC_OPERATE T1--更新远程表
...

这种可能极大。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
bfc99 发表于 2015-7-18 20:34
这种可能极大。

我使用FORALL 方式 一次性 提交到运程执行 如何?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行