Назад | Перейти на главную страницу

Странно высокое ожидание ввода-вывода процессора на сервере postgresql

В настоящее время я действительно борюсь с проблемой производительности, когда все мои запросы к базе данных занимают в 1000 раз больше, чем обычно, когда мой сервер базы данных находится под «большой» нагрузкой.

У меня есть сервер, на котором работает ubuntu 12.04 и размещается моя база данных postgresql 9.2. Сервер находится на Hetzner.de и представляет собой EX6s (8-ядерный ксенон с оперативной памятью 32 ГБ и два жестких диска 3T в конфигурации RAID1 с использованием программного рейда ubuntus). Когда я запускаю большое количество запросов (которые я часто выполняю ночью), я вижу, что почти все использование ЦП тратится на ожидание ввода-вывода ЦП. У меня установлен новый мониторинг реликвий, и я не могу найти никаких других указаний на то, что может быть основной причиной этого ожидания ввода-вывода ЦП, что явно является узким местом для моей производительности и пропускной способности.

Итак, вопрос в том, что это за ожидание ввода-вывода процессора и чего он ждет?

Я добавил все обзорные диаграммы, которые я могу получить от новой реликвии внизу. Что я упускаю из виду? Должно быть очевидное узкое место? Куда мне нырнуть?

Использование ЦП сервера базы данных - злой, который говорит мне, что что-то не так https://rpm.newrelic.com/public/charts/cEdIvvoQZCr

Средняя загрузка сервера базы данных https://rpm.newrelic.com/public/charts/cMNdrYW51QJ

Физическая память сервера баз данных https://rpm.newrelic.com/public/charts/c3dZBntNpa1

Утилизация дискового ввода-вывода сервера базы данных - как видите, диск не используется очень сильно (почти ничего) https://rpm.newrelic.com/public/charts/9YEVw6RekFG

Сетевой ввод-вывод сервера базы данных (Мбит / с) - сеть представляет собой гигабитную внутреннюю сеть, в которой выполняются все коммуникации. https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7

5 основных операций с базами данных по времени настенных часов https://rpm.newrelic.com/public/charts/dCt45YH12FK

Пропускная способность базы данных https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI

Время ответа базы данных https://rpm.newrelic.com/public/charts/fPcNL8WA6xx

ОБНОВИТЬ:

После выполнения sudo iostat -k 1 Я начинаю подозревать. Я получаю много таких выводов, которых не вижу в NR:

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
sdb               0.00         0.00         0.00          0          0
sdc             546.00      2296.00      6808.00       2296       6808
sdd             593.00      1040.00      7416.00       1040       7416
md1               0.00         0.00         0.00          0          0
md0               0.00         0.00         0.00          0          0
md2            1398.00      3328.00     13064.00       3328      13064
md3               0.00         0.00         0.00          0          0

Короче, вам нужны более быстрые диски.

Когда процессы находятся в iowait, это означает, что они выпустили запрос ввода-вывода и ждут результатов этого запроса. При достаточном объеме ОЗУ большая часть вашего рабочего набора будет кэшироваться в ОЗУ, и, как таковые, операции чтения не будут способствовать большей части этого конфликта ввода-вывода, поэтому обычно виноваты записи.

Что касается графа ввода-вывода вашего диска, я подозреваю, что New Relic по какой-то причине неправильно собирает метрики ввода-вывода. Я бы порекомендовал, возможно, изучить вторичную систему сбора данных, такую ​​как Munin. Если не считать этого, вы можете наблюдать за дисковым вводом-выводом в реальном времени, введя следующую команду:

$ iostat -k 1

Будет выведено чтение и запись на диск в реальном времени в кбит / с. Я подозреваю, что вы заметите там довольно много активности, которую не видит New Relic.