Доброе время суток!
Делаю запросы к БД (v 9.1) из PHP 5.2.12. Всё работает нормально. Но недавно заметил странность:
если выполняется "тяжёлый" запрос на обновление/вставку данных в таблицу A, то некоторые запросы к таблице B становятся в "очередь" и ожидают завершение "тяжёлого запроса".
Пример запроса к таблице B:
SELECT uid, name_pers AS name, uid_d_status AS STATUS FROM person WHERE ts_del IS NULL AND login = '$log' AND password = '$pass'
Таблицы А и B имеют внешнюю связь:
CONSTRAINT A_fk FOREIGN KEY (uid_ins) REFERENCES public.person(uid) ON DELETE NO ACTION ON UPDATE CASCADE NOT DEFERRABLE, CONSTRAINT A_fk1 FOREIGN KEY (uid_upd) REFERENCES public.person(uid) ON DELETE NO ACTION ON UPDATE CASCADE NOT DEFERRABLE,
особенно странно, что запросы на некоторые значения '$log' и '$pass' отрабатывают нормально, а некоторые "ждут". "Ждут" те, на которые имеется внешняя связь в A.
Подскажите, пожалуйста, куда копать или в чём я не прав.
Не владею темой достаточно
Не владею темой достаточно хорошо. Могу лишь посоветовать проштудировать вот этот раздел:
http://postgresql.ru.net/manual/mvcc.html
В нём подробно (но к сожалению на английском) расписываются виды блокировок, возникающих при работе PostgreSQL.
Судя по описанной вами ситуации, у вас срабатывает какой-то вид блокировки