DB Link性能优化实战指南
一、核心原则
二、SQL与执行计划优化
SELECT /*+ driving_site(t) */ t.*, s.*
FROM large_table@remote t
JOIN small_table s
ON s.id = t.id
WHERE t.status = 1;
若误把小表设为驱动侧,可能把大表全量拉到远端,性能急剧下降。-- 远端先聚合,只回传聚合结果
SELECT r.region, r.cnt
FROM (
SELECT /*+ driving_site(remote_tab) */
region, COUNT(*) AS cnt
FROM remote_tab@link
WHERE dt >= DATE '2025-01-01'
GROUP BY region
) r
WHERE r.cnt > 100;
三、索引、统计与数据访问策略
四、网络、超时与资源管理
Statement stmt = conn.createStatement();
stmt.setQueryTimeout(60); // 秒
同时配合服务端SQL 超时/资源限制策略,防止雪崩。五、场景化优化清单
| 场景 | 优化要点 | 示例/备注 |
|---|---|---|
| 大表 JOIN 小表 | 让大表所在库做驱动,小结果集推送过去 | Oracle 使用 DRIVING_SITE(大表) |
| 多表主要在远端 | 在远端建视图/封装逻辑,减少来回拉取 | 视图只暴露必要列与聚合结果 |
| 全部数据来自远端 | 在远端完成全部计算 | 避免把远端多表拉到本地 |
| 高频汇总查询 | 缓存/预取 + 远端聚合 | 降低重复跨库访问 |
| 应用侧超时 | 设置合理超时并优化 SQL/索引 | JDBC setQueryTimeout |
| 统计信息不准 | 及时收集统计信息 | 保证远端执行计划稳定 |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。