Почему PostgreSQL работает так медленно в Windows? - PullRequest
13 голосов
/ 22 июля 2009

У нас было приложение, работающее с использованием MySql. Мы обнаружили, что MySql не подходит для нашего приложения после того, как обнаружили, что оно не поддерживает некоторые возможности ГИС, которые есть в PostGIS (примечание: mysql поддерживает только поиск ГИС с минимальным ограничением прямоугольника).

Итак, мы изменили нашу БД на PostgreSQL. Затем мы обнаружили, что Postgresql 8.2, работающий в Windows, намного медленнее по сравнению с Mysql 5.1. Под медленным я имею в виду примерно в 4-5 раз медленнее.

Почему это? Есть ли в конфигурации что-то, что нам нужно изменить?

Я нашел некоторые комментарии от других сайтов, таких как this :

ОБНОВЛЕНИЕ: Мы обнаружили, что причина медлительности связана с BLOB, который мы вставляем в БД. Нам нужно иметь возможность вставлять BLOB с постоянной скоростью 10-15 МБ / с. Мы используем lo_read и lo_write в libpq для каждого BLOB, который мы вставляем / читаем. Это лучший способ? Кто-нибудь использовал Pgsql для вставки большого BLOB с высокой скоростью раньше?

РЕДАКТИРОВАТЬ: Я слышал, что PgSql недавно был перенесен на Windows. Может ли это быть одной из причин?

Ответы [ 3 ]

21 голосов
/ 22 июля 2009

Существуют случаи, когда PostgreSQL в Windows платит дополнительные издержки по сравнению с другими решениями из-за компромиссов, сделанных при его портировании.

Например, PostgreSQL использует процесс для каждого соединения, MySQL использует поток. В Unix это обычно не заметная разница в производительности, но в Windows создание новых процессов очень дорого (из-за отсутствия системного вызова fork ()). По этой причине использование постоянных подключений или пула подключений намного более важно в Windows при использовании PostgreSQL.

Другая проблема, с которой я столкнулся, заключается в том, что ранний PostgreSQL в Windows по умолчанию будет проверять, что его записи проходят через кэш записи - даже если он работает от батареи. AFAIK, MySQL не делает этого, и это сильно повлияет на производительность записи. Теперь это действительно требуется, если у вас небезопасное оборудование, например дешевый диск. Но если у вас есть кэш записи с батарейным питанием, вы хотите изменить его на обычный fsync. Современные версии PostgreSQL (конечно, 8.3) по умолчанию вместо этого используют open_datasync, что должно устранить эту разницу.

Вы также ничего не упоминаете о том, как вы настроили конфигурацию базы данных. По умолчанию файл конфигурации, поставляемый с PostgreSQL, является очень консервативным. Если вы ничего не меняли там, вам обязательно нужно взглянуть на это. В PostgreSQL wiki .

есть несколько советов по настройке.

Чтобы получить более подробную информацию, вам нужно будет предоставить гораздо больше информации о том, что именно работает медленно, и как вы настроили свою базу данных. Я бы предложил электронное письмо в список рассылки pgsql-general.

7 голосов
/ 22 июля 2009

Хотя порт Windows PostgreSQL относительно недавний, я понимаю, что он работает так же хорошо, как и другие версии. Но это определенно порт; почти все разработчики работают в основном или исключительно на Unix / Linux / BSD.

Вы действительно не должны запускать 8.2 в Windows. По моему мнению, 8.3 был первым выпуском Windows, который был действительно готов к работе; 8.4 еще лучше. В любом случае, версия 8.2 устарела, и вы сможете воспользоваться несколькими преимуществами, если сможете обновить ее.

Еще одна вещь, которую следует учитывать, это настройка. PostgreSQL требует больше настройки, чем MySQL для достижения оптимальной производительности. Вы можете рассмотреть возможность размещения в одном из списков рассылки для получения помощи по более простым настройкам.

0 голосов
/ 22 июля 2009

PostgreSQL уже работает медленнее, чем MySQL, до определенного момента (на самом деле он быстрее, если у вас смехотворно большая база данных). Просто к вашему сведению, это не вызывает ваших проблем, но имейте это в виду.

...