Проблемы с блокировками

Использование MVCC позволяет PostgreSQL избежать большей части проблем с блокировками, например таких как недоступность строк для чтения во время записи в них. Однако система вынужде­на создавать блокировки при попытке одновременной записи в одну и ту же строку. При записи блокировка длится, пока не завершится транзакция, которая изменяет строку.
Соответственно, если многие запросы могут писать в одну строку, может возникнуть проблема блокировки. Простейший способ выяснить, многие ли сеансы ждут снятия бло­кировок, следующий:
Если запрос ничего не возвращает или возвращает одну-две стро­ки, то, вероятно, проблемы с блокировками нет. Чтобы увидеть, какие запросы ждут завершения других запросов, выполните следующее: Обычно проблемы связаны с неправильной оптимизацией запросов, но иногда просто не хватает мощности компьютера. Для быстрой проверки подходит утилита top. Наберите в команд­ной строке следующее: Прежде всего, обратите внимание на простаивание процессора. Если большую часть времени оно выражается в небольших величинах, то, вероятно, процессор недостаточно мощный. Если процессор недостаточно занят при высокой нагрузке, то, ве­роятно, не хватает пропускной способности дисковых устройств. Тог­да должно иметь место множество процессов postgres со статусом D. Помимо того что запрос возвращает слишком много строк, проблема усугубляется тем, что ненужные строки отправляются сервером кли­енту, особенно если сервер и клиент находятся наразных компьютерах. Вот несколько способов уменьшить объем передаваемых данных между сервером и клиентом. В таком случае пусть документы сортируются на сервере и запрос возвращает только первые 20: Постарайтесь выполнить максимум вычислений на сервере. Вместо того чтобы запросить Если средств SQL окажется недостаточно, прибегните к PL/ pgSQL или другому языку из поддерживаемых в PostgreSQL.



Рубрика: Женский интерес

30.08.2016