dblink的關聯與本地關聯差異

xuexiaogang發表於2022-05-02

我的原創連線:

https://mp.weixin.qq.com/s/eHR4smuaxCYOYdMr4ADwKQ


首先申明,我反對不同主機之間的DBLink直接關聯。因為中間有網路層,這樣關聯效果較差。遇到這種場景和需求我通常會有如下幾個方案:

1、遷移到一起。

2、物化檢視。(需要透過DBLink)但是在本地落地。

3、OGG同步過來。

     如果在同一主機上呢?這個比較特殊了,就比如說PDB之間。因為一個CDB上的多個PDB沒有跨網路。那麼這個畢竟不是本地表,這兩個差多少?  


    今天實驗一下。在一個PDB上建立兩個表t6和t67.在另外一個PDB上建立t7連線名是con。

t6 1w條資料

t67和遠端的t7表都是12w的資料。

每個表的ID都有索引。

set autotrace on  開啟跟蹤,執行下面的比較。

首先看本地表關聯

select * from t6 a,t67 b where a.id=b.id and a.id<101;

dblink的關聯與本地關聯差異

26個一致性讀(在記憶體)

106行

網路返回有一些資料為綠色框。


下面來看跨主機的dblink

select * from t6 c,t7@con d where c.id=d.id and c.id<101;

dblink的關聯與本地關聯差異

看到行數一樣。一致性讀少了(在記憶體)。但是多了一個遞迴呼叫。這就是DBLink產生的。可見沒有什麼明顯的改變。


那麼如果連線多個PDB呢?

再找了一個PDB,建立一個w表, 連線名是con2

select * from t6 c,t7@con d, w@con2 e where c.id=d.id and c.id=e.id and  c.id<101;

dblink的關聯與本地關聯差異

發現一致性讀又少了,遞迴呼叫還是一個。這裡和我最初想的不一樣。我開始人為會有兩個。

    所以最後結論。PDB直接的dblink和本地幾乎沒有差別。(我不敢說一模一樣),但是就這些資料來說,如果SQL寫的好,那都一樣好,如果SQL寫的差,那就一樣的差。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2890235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章