接上篇:https://developer.aliyun.com/article/1223104?spm=a2c6h.13148508.setting.15.44ec4f0eNvAByn
Deparesing是将执行计划做反解析,变为SQL语句。
FDW从本地将语句传到远程,远程执行完以后再将数据传回到本地。
上图为远程服务器上的日志。执行外部的SQL语句时,会将事务变为repeatable read隔离模式,然后声明一个游标,绑定游标执行,执行后将数据返回,关闭游标,结束事务。
发请求时,远程服务器有可能被修改,因此我们将事务变为可重复读的隔离级别。
随着版本的更新,FDW的功能越来越强大,性能越来越好。
FDW最早在PG9.3版本推出。
PG9.6新增了以下特性:如果SQL语句带有排序,则会在远程排序以后将数据返回到本地,省去本地排序的操作,提高了性能;如果两张表的连接都为远程,则会在远程将两张表的数据进行连接,连接后将处理结果传到本地;如果数据库是PolarDB对PolarDB,则可支持DML操作;可以根据网络带宽的情况设置返回的行数,减少对网络带宽的占用。
PG10版本中,新增的特性为:如果操作里带有聚簇函数的操作,则聚簇的计算在远程完成,将结果返回到本地,省去了将元数据传到本地再排序所占据的网络带宽。
如果两个数据库支持update,比如PolarDB对PolarDB,用FDW对远程的表进行更新时,可以实现不同事务修改同一张表的同一行。而按照以往的情况,该种场景下会造成死锁。
FDW9.5之前的版本中,多表扫描需要从远程服务器扫描数据,然后传到本地,在本地做连接操作。
而FDW9.5以后,打开use_remote_estimate,计划器将通过执行EXPLAIN命令向远程服务器查询计划的成本。做多表连接时,连接操作在远程服务器执行,执行完以后将数据传到本地,极大减少了数据在网络之间的传输。
接下篇:https://developer.aliyun.com/article/1223102?groupCode=polardbforpg