2015-08-24 4 views
3

У меня есть приложение, работающее на базе Postgres, иногда, когда у меня около 8-10 человек, работающих с приложением, загрузка процессора растет до 99-100%, приложение было построено на Framework Codeigniter, который, я полагаю, предусматривал закрытие соединений с базой данных каждый раз, когда это не требуется, что может быть решением этой проблемы. Буду признателен за любые предложения. СпасибоВысокое использование ЦП по процессу Postgres

В общем, что люди делают в приложении, это запускать запросы на вставку, но с очень высокой скоростью. Человек может запускать от 70 до 90 запросов на вставку через минуту.

+1

Это не особенно удивительно, если вы используете множество крошечных вставок, и у вас есть быстрое хранилище, поэтому узким местом является память/процессор. У вас много работы, поэтому есть много нагрузки. В чем проблема? –

ответ

3

Вам нужно выяснить, что делает PostgreSQL. Соответствующие ресурсы:

После того, как вы нашли то, что медленно или наиболее распространенные запросы использовать, use EXPLAIN чтобы убедиться, что они выполняются эффективно.

8

Я столкнулся с подобной проблемой. Причина в том, что некоторые транзакции застряли и работают с давних времен. Следовательно, загрузка процессора увеличилась до 100%. После команды помогли выяснить связи, работающие в течение самого долгого времени:

SELECT max(now() - xact_start) FROM pg_stat_activity 
          WHERE state IN ('idle in transaction', 'active'); 

Эта команда показывает время с момента, когда соединение работает. Это время не должно превышать часа. Так что убийство связи, которая длилась долго или застряла в любой момент, работала для меня. Я последовал за сообщением this для мониторинга и решения моей проблемы. Post содержит множество полезных команд для наблюдения за этой ситуацией.

Смежные вопросы