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