Realicé una consulta sql que se ejecuta en una base de datos remota (usando la extensión postgres_fdw) y combina información de 2 tablas diferentes en la base de datos remota. El tiempo de ejecución de la consulta tarda unos 5 minutos, aunque he creado el servidor remoto con la opción de use_remote_estimate como verdadero. Cuando ejecuto la misma consulta directamente en la base de datos remota, se tarda menos de 5 segundos en obtener los resultados. ¿Puedo hacer algo para mejorar el rendimiento? ¿Hay alguna configuración disponible para un mejor rendimiento? Cuando la consulta se ejecuta desde mi base de datos a la base de datos remota, ¿utiliza las claves externas y los índices o no? No estoy seguro de eso. He buscado en la red una solución pero ninguna respuesta cubre mis necesidades. Gracias
Cuando ejecuto EXPLAIN (ANALYZE BUFFER) en la base de datos remota, obtengo esos resultados:
QUERY PLAN Merge Join (cost=2920.60..6345984.84 rows=56546 width=440) (actual time=5874.882..834358.774 rows=3338 loops=1) Merge Cond: (str.store_id = prf.store_id) -> Sort (cost=1221.49..1229.84 rows=3338 width=18) (actual time=2835.745..2840.122 rows=3338 loops=1) Sort Key: str.store_id Sort Method: quicksort Memory: 314kB -> Foreign Scan on store str (cost=100.00..1026.14 rows=3338 width=18) (actual time=158.809..2832.790 rows=3338 loops=1) -> Sort (cost=1699.11..1707.58 rows=3388 width=23) (actual time=2882.143..2891.705 rows=3338 loops=1) Sort Key: prf.store_id Sort Method: quicksort Memory: 350kB -> Foreign Scan on store_profile prf (cost=100.00..1500.47 rows=3388 width=23) (actual time=166.818..2878.937 rows=3338 loops=1) SubPlan 1 -> Foreign Scan on store_profile p (cost=100.29..112.16 rows=1 width=19) (actual time=165.285..165.287 rows=1 loops=3338) Planning time: 495.796 ms Execution time: 834678.186 ms