одновременные запросы внешней оболочки данных

Как postgreSQL обрабатывает несколько одновременных запросов к внешним таблицам?

Если два потребителя данных хотят получить доступ к одной и той же внешней таблице, должны ли они ждать и выполнять запрос последовательно, или поддерживается параллелизм запросов?


person SillyPerson    schedule 15.03.2017    source источник


Ответы (1)


Следующий ответ в основном относится к внешней оболочке данных для PostgreSQL, postgres_fdw.

Если вам нужна информация о других оболочках сторонних данных, это зависит от реализации оболочки сторонних данных и возможностей базового хранилища данных. Например, чтобы иметь одновременные (чтение) запросы с file_fdw, вам нужна файловая система, которая позволяет двум процессам одновременно открывать файл для чтения.

Параллелизм запросов к одной и той же внешней таблице аналогичен локальным таблицам. Это удаленный сервер, который обрабатывает операторы SQL, блокирует измененные строки до завершения транзакции и тому подобное.

Таким образом, может быть произвольно много одновременных читателей, и читатели не будут блокировать писателей, и наоборот.

Если вы запускаете UPDATEs или DELETEs с WHERE условиями, которые не могут быть переданы на внешний сервер (проверьте план выполнения), может случиться так, что у вас будет больше блокировок, чем при использовании локальной таблицы.

Представьте такой запрос:

UPDATE remote_tab SET col = 0 WHERE <complicated condition that is true for only one row>;

В локальной таблице это заблокирует только одну строку.

Если условие слишком сложное, чтобы его можно было передать на внешний сервер, postgres_fdw сначала выполнит такой запрос:

SELECT ctid, col FROM remote_tab FOR UPDATE;

Это позволит получить и заблокировать все строки таблицы.

Затем условие WHERE будет применено локально, а результирующая строка будет обновлена ​​на внешнем сервере:

UPDATE remote_tab SET col = 0 WHERE ctid = ...;

Так что в этом случае параллелизм и производительность могут сильно пострадать.

person Laurenz Albe    schedule 15.03.2017
comment
Спасибо, это действительно четкий ответ Lauernz. А как насчет других fdw, таких как www_fdw или file_fdw? - person SillyPerson; 15.03.2017
comment
Это зависит от реализации и источника данных. Я добавил абзац к ответу. - person Laurenz Albe; 15.03.2017