数据库 DB Link(数据库链接)是会影响性能的,而且在某些场景下影响还比较明显。下面从原理、常见性能问题、优化建议几方面说明。
DB Link 本质是在两个数据库实例之间通过网络通信:
本地查询是毫秒级,跨机房 DB Link 可能是几十甚至上百毫秒
Oracle / MySQL / PostgreSQL 等数据库中:
例如:
SELECT *
FROM local_table l
JOIN remote_table@dblink r
ON l.id = r.id
WHERE r.status = 'ACTIVE';
如果 r.status='ACTIVE' 没在远端执行,就可能把 整张远程表拉到本地。
如果通过 DB Link 做 DML(INSERT/UPDATE/DELETE):
| 场景 | 问题 |
|---|---|
| 大表 JOIN DB Link | 远程数据全量拉取 |
| 远程表无索引 | 远端全表扫描 |
| 跨机房 DB Link | 网络延迟高 |
| 高频小查询 | 网络往返次数多 |
| 分布式事务 | 锁等待、提交慢 |
Oracle 示例:
SELECT *
FROM remote_table@dblink
WHERE status = 'ACTIVE';
避免:
SELECT * FROM remote_table@dblink;
然后在本地过滤。
DB Link 一定会影响性能,尤其是网络、执行计划和事务三方面;用得好是便利,用不好是性能杀手。
如果你愿意,可以告诉我:
我可以给你更具体的优化方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。