Как проанализировать низкую производительность в Azure PostGreSQL-PaaS
Я испытываю низкую производительность в Azure PostGreSQL-PaaS и мне нужна помощь, чтобы продолжить.
Я пробую Azure PostGreSQL-PaaS в проекте. Я испытываю невыносимую производительность от базы данных (или, по крайней мере, кажется, что проблема в базе данных).
Наше приложение работает на виртуальной машине Azure, а виртуальная машина и база данных расположены в Западной Европе. Сеть между виртуальной машиной и базой данных работает нормально. (Используя psping (от Sysinternals) на порту базы данных 5432, я получаю задержку от 2 мс до 4 мс) PostGreSQL включает в себя инструмент для тестирования производительности, называемый pgbench. Этот инструмент запускает последовательность простых операторов sql в тестовом наборе данных и обеспечивает синхронизацию. Я запустил pgbench на виртуальной машине против базы данных. Pgbench сообщает о задержке от 800 мс до 1600 мс. Если я выполняю тот же тест с внутренней pgbench в нашей локальной сети в отношении внутренней базы данных, то обычно у меня задержка меньше 10 мс.
Я пытался связаться со службой поддержки Microsoft по этому поводу, но мне в основном сказали, что, поскольку сеть, кажется, работает нормально, это должно быть проблемой программного обеспечения PostGreSQL и не связано с Microsoft. Поскольку база данных - PostGreSQL-Paas, у меня ограниченный доступ к журналам и метрикам.
Может кто-нибудь, пожалуйста, помогите или посоветуйте мне, как поступить с этим?
2 ответа
Производительность предложения PaaS Azure PostgreSQL зависит от конфигурации сервера и клиента, включая SKU, предоставляемый вместе с IOPS хранилища. Корпорация Microsoft engineering опубликовала серию блогов, посвященных производительности, которая помогает заказчикам получать ощутимые и эмпирические выгоды, выполняя эти шаги в зависимости от своей рабочей нагрузки. Пожалуйста, просмотрите эти сообщения в блоге:
Рекомендации по повышению производительности для Azure PostgreSQL
Настройка производительности Azure PostgreSQL
Быстрые советы по производительности для Azure PostgreSQL
Ваш собственный Postgres настроен так же, как в Azure?
Я была такая же проблема. Мы перешли с выделенной виртуальной машины (Ubuntu, размер Standard B2s 2 vcpus, 4 ГиБ памяти, ~35 евро в час), на которой работает PostgreSQL, на управляемый Azure экземпляр PostgreSQL (общего назначения, один сервер, 2 виртуальных процессора, 10 ГБ памяти, ~130 евро в минуту).
Я впервые заметил плохую производительность, когда основной запрос API нашего веб-приложения внезапно занял 3 секунды вместо 1,7 / 2 секунды.
Я провел несколько очень простых тестов времени на моей старой настройке с выделенной виртуальной машиной:
select count(*) from mytable;
count
-------
4686
Time: 0.940 ms
И это сроки новой настройки с PostgreSQL, управляемым Azure:
select count(*) from mytable;
count
-------
4686
Time: 21,353 ms
Думаю, мне не нужно объяснять эти цифры :)
Я создал заявку в службу поддержки и получил некоторые сведения:
« В отдельном сервере Azure PostgreSQL у нас есть шлюз для управления и маршрутизации подключений, и всегда есть 3 копии данных, чтобы гарантировать, что ваши данные не будут потеряны, и все это приведет к задержке ».
Я также спросил, каковы преимущества управляемой базы данных:
О: Будучи экземпляром, работающим на лазурном сервере, вы получаете следующие преимущества:
-Автоматическая установка исправлений, ваш экземпляр автоматически обновляется.
-Сбой восстановления: в случае, если наша система обнаруживает, что экземпляр не запущен, она пытается выполнить перезапуск / переключение на новый хост. Если все это не удается, активируется инженер по вызову, который вручную восстанавливает экземпляр.
-Автоматическое резервное копирование и восстановление в один момент времени. -Избыточность данных. "
Они предложили мне переключиться с одиночного сервера на гибкий сервер, где шлюз отключен, и производительность, по-видимому, должна быть лучше, но не так хороша, как на управляемом экземпляре:
« В нескольких проведенных нами тестах производительность по сравнению с одиночным сервером намного лучше. Но если правильно настроить ожидания, вы не получите производительность 1 к 1, как если бы PostgreSQL работал на выделенной виртуальной машине ».
Я попросил результаты этих тестов, я выложу их здесь, как только получу.
Я думаю, вам нужно решить, настолько ли высоки упомянутые выше преимущества, что вы готовы платить как минимум в 4 раза больше по сравнению с выделенной виртуальной машиной, и можете ли вы жить с худшей производительностью. Теперь мы вернемся к конфигурации главный / подчиненный с двумя выделенными виртуальными машинами.