Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
Привет. Есть большое приложение Apache + Postgres 8.2 Веб сервер и сервер БД работают на отдельных серверах. На сервере БД, кроме postgres ничего нет. Ситуация заключается в том, что postgres использует все 4 процессора почти под 100%, в результате чего медленно работает приложение. Необходимо его оптимизировать. БД содержит 94 таблицы общим размером 5 Гб, 186 хранимых процедуры, 114 триггерных функций, 13 представлений. Приложение состоит из 128 модулей и 57 функций, вызываемых как в модулях, так и в других функциях. При этом каждый модуль и функция вызывает в среднем 5-10 запросов SELECT. Это может быть вызов хранимой процедуры или выбор данных из таблиц. Характер запросов к БД - это SELECT, INSERT, UPDATE. В основном SELECT и UPDATE. Запросы INSERT и UPDATE выполняются только в хранимых процедурах. Так вот, задача заключает в ускорении работы приложения, т.е. снижении нагрузки на процессор. Как можно определить, что его нагружает больше всего, с чего начать оптимизацию запросов? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 09:19 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
DDT Ситуация заключается в том, что postgres использует все 4 процессора почти под 100%, в результате чего медленно работает приложение. Необходимо его оптимизировать. БД содержит 94 таблицы общим размером 5 Гб, 186 хранимых процедуры, 114 триггерных функций, 13 представлений. Приложение состоит из 128 модулей и 57 функций, вызываемых как в модулях, так и в других функциях. При этом каждый модуль и функция вызывает в среднем 5-10 запросов SELECT. Это может быть вызов хранимой процедуры или выбор данных из таблиц. Характер запросов к БД - это SELECT, INSERT, UPDATE. В основном SELECT и UPDATE. Запросы INSERT и UPDATE выполняются только в хранимых процедурах. Так вот, задача заключает в ускорении работы приложения, т.е. снижении нагрузки на процессор. Как можно определить, что его нагружает больше всего, с чего начать оптимизацию запросов? Спасибо. 1. Кусочек доки , но это злобненько так... 2. Попроще, и для начала, можно выставить log_duration в какое-нить число, и Вы получите тормозящие запросы, а дальше можно думать куда крутить. 3. По скольку ничего ни про сервер (железо), ни про ОС, ни про детали версии ПГ не видно, то можно "дефолтно" посоветовать обновить версию ПГ до последней, как минимум, в линейке 8.2. 4. Надеюсь VACUUM FULL ANALYZE; был сделан, и тормоза остались? (если не был сделан - то нужно сделать обязательно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 10:09 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
Andrey Daeron 2. Попроще, и для начала, можно выставить log_duration в какое-нить число, и Вы получите тормозящие запросы, а дальше можно думать куда крутить. В документации для 8.2 сказано, что log_duration типа bool. В него можно поставить число? Если поставлю число, то что оно будет означать и где будут отображаться тормозящие запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 10:25 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
Скорее всего надо выставить log_min_duration_statement в какое-то число. Наколько я понял - кол-во милисекунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 10:28 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
DDTСкорее всего надо выставить log_min_duration_statement в какое-то число. Наколько я понял - кол-во милисекунд. Ага, именно так, а потом мониторить и выбирать самые "яркие" представители запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 10:38 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
DDT БД содержит 94 таблицы общим размером 5 Гб, 186 хранимых процедуры, 114 триггерных функций, 13 представлений. Запросы INSERT и UPDATE выполняются только в хранимых процедурах. Спасибо.Какие характеристики сервера? Если запросы на вставку и изменение выполняются в ХП, то зачем используются триггеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 10:49 |
|
||
|
Нужен совет: как построить план оптимизации приложения
|
|||
|---|---|---|---|
|
#18+
Несколько советов из того, что сходу приходит в голову. 1. http://pgfouine.projects.postgresql.org/tutorial.html Смотрите секцию про PostgreSQL 8.x и делайте, как там сказано. После того, как образовался лог с временами выполнения запросов -- пропустить через pgfouine (см. http://pgfouine.projects.postgresql.org/reports.html) и смотреть на самые долгие (в сумме) запросы. 2. Мониторить PostgreSQL, как было сказано выше. Активно используйте системные средства (iostat, vmstat, mpstat). Разберитесь, не iowait ли у вас занимает CPU. Для этого хотя бы посмотрите top -d1 в моменты наибольшей загрузки. 3. Узнайте размер базы, сравните его с размером RAM. Изучите вывод free -m, чтобы понять, хватает ли серверу памяти. Узнайте размер самых больших таблиц. 4. Сколько бакендов постгреса запущено? Попробуйте использовать pgbouncer на машине с СУБД, если еще не используете никакого менеджера/пула соединений. Советов, рекомендованных в постах выше и этих пунктов достаточно, чтобы начать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 12:28 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=53&tid=2004294]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 369ms |

| 0 / 0 |
