Mysql vs Postges

Димон

Новичок
Mysql vs Postges

По работе сейчас делаем выбор базы данных. Обязательно с поддержкой транзакций. С MySQL знакомы хорошо, т.к. давно с ней работаем. Postgres знаем хуже, т.к. работали с ней меньше. Поискав по интернету объективные бенчмарки этих баз, в принципе, ничего путного не нашли, т.к. всегда одна из баз превозносилась над другой по желанию автора. И так решили сами потестить. Сделали первый поверхностные тест.

Платформа: Kubuntu 9.10
MySQL: 5.1.45
Postgres: 8.4
PHP: 5.2.12
Драйвер: PDO
Железо: обычная девелоперская машина (3Ггц, 2Гб ОЗУ)

Для теста создали простые таблицы в обоих базах:

id INT,
name VARCHAR(255),
field_1 INT,
field_2 INT,

id - primary key, остальные поля - key

В mysql, так для интереса прогнали и таблицы типа myisam и heap.

Результаты:

1) Вставка 1 000 000 строк ( здесь INSERT ... VALUES (...) по 10 000 строк ), общее время в сек (меньше - лучше):


Mysql engine=MyIsam ....114.40 sec.
Mysql engine=InnoDB .... 573.16
Mysql engine=Heap ....... 33.04
Postgres ....................... 131.62


2) Apache bench: ab -n 1000 -c 100 http:// ...
Здесь цифры - это кол-во запросов в секунду (больше - лучше).
Кол-во строк в таблицах: 1 000 000.

SELECT * FROM <table> WHERE id = '%s', здесь %s = rand(999000 - 999999):

Mysql engine=MyIsam .... 551.00 requests per sec.
Mysql engine=InnoDB .... 559.03
Mysql engine=Heap ....... 545.26
Postgres ....................... 56.54


UPDATE <table> SET field_1 = '%s' WHERE id = '%s'

Mysql engine=MyIsam ....445.61 requests per sec.
Mysql engine=InnoDB .... 72.18
Mysql engine=Heap ....... 480.61
Postgres ....................... 52.22


Что получилось:

Получилось что по первому тесту Postgres существенно обогнала транзакционные таблицы MySQL. Это хорошо.
А вот во втором тесте селект из таблицы оказался в 10 раз медленней чем у MySQL. Это очень странно, т.к. селект выполняется по primary key. Здесь id намеренно берется из конечного диапазона близкого к 1 000 000, чтобы увеличить время поиска.

Кто что думает по этому поводу? Очень заманчивая скорость инсертов у постгрес, но селект ни в какие ворота не лезет. Возможно постгрес надо где-то подкрутить? Да, еще у постгрес есть очень важная фича - это язык хранимок plpgsql, который намного мощнее языка хранимок в MySQL. А это очень весомый аргумент в пользу выбора.
 

dimagolov

Новичок
-- Mysql -- -- Postgres --
MyIsam | InnoDb | Heap |
-------------------------------------------------------
114.40 | 573.16 | 33.04 | 131.62
как можно понять что обозначают циферки? БД 2, типов таблиц 3, циферок 4...

-~{}~ 12.04.10 15:58:

кстати, кеш отключали при тестировании? хотя даже это не всегда помогает от него избавиться
 

Димон

Новичок
.

-~{}~ 12.04.10 23:55:

Автор оригинала: dimagolov
как можно понять что обозначают циферки? БД 2, типов таблиц 3, циферок 4...

-~{}~ 12.04.10 15:58:

кстати, кеш отключали при тестировании? хотя даже это не всегда помогает от него избавиться
Изменил форматирование, полагаю что сейчас понятнее. Кеш не отключали. Здесь это не критично и если смазало результаты, то несильно, т.к. запросы разные генерились.
 

Mols

Новичок
Re: Mysql vs Postges

Автор оригинала: Димон
А вот во втором тесте селект из таблицы оказался в 10 раз медленней чем у MySQL. Это очень странно, т.к. селект выполняется по primary key. Здесь id намеренно берется из конечного диапазона близкого к 1 000 000, чтобы увеличить время поиска.
Ну вывод довольно поверхностный. Сколько из этого времени уходит на подключение и прочие особенности неизвестно.
Понятно, что связка Апач + ПХП + ПГ отработала медленнее. Но то, что именно селект настолько медленнее вывод преждевременный.
 

Krishna

Продался Java
Да, еще у постгрес есть очень важная фича - это язык хранимок plpgsql, который намного мощнее языка хранимок в MySQL. А это очень весомый аргумент в пользу выбора.
У вас что, толстый клиент? Нах вам хранимки?
 

Adelf

Administrator
Команда форума
>> толстый клиент
>> хранимки

Где связь?
 

Димон

Новичок
Автор оригинала: Krishna
У вас что, толстый клиент? Нах вам хранимки?
Да, хранимки нам очень нужны. Очень важна скорость.

-~{}~ 13.04.10 00:26:

Автор оригинала: Mols
Ну вывод довольно поверхностный. Сколько из этого времени уходит на подключение и прочие особенности неизвестно.
Понятно, что связка Апач + ПХП + ПГ отработала медленнее. Но то, что именно селект настолько медленнее вывод преждевременный.
Понятно, что на коннект уходят ресурсы. Но ведь обе БД находятся в равных условиях. В любом случае надо понять, что с селектом у постгреса. Попробуем 8.3 потестить. Или более старую версию.

-~{}~ 13.04.10 00:28:

Автор оригинала: Krishna
У вас что, толстый клиент? Нах вам хранимки?
Хранимки это очень хороший стиль. Можешь поинтересоваться у любого нормального разработчика баз данных. Да и вообще я уже давно отвык писать трехэтажные вложенные селекты. Очень тяжело их править, когда проходит месяца три или больше, да и еще если писал не сам.
 

Dovg

Продвинутый новичок
Димон
Понятно, что на коннект уходят ресурсы. Но ведь обе БД находятся в равных условиях.
Тут подсказывают, что у psql коннект - очень тяжелая операция.
Попробуйте померять с pconnect или через pgbouncer, цифры должны быть другими.
 

fixxxer

К.О.
Партнер клуба
Покажи настройки MySQL и PostgreSQL.

Если тестируешь с дефолтами, то могу сразу посоветовать сферическую СУБД в вакууме и не заморачиваться. ;) У обеих СУБД дефолты на уровне "записная книжка на zx spectrum".
 

Krishna

Продался Java
Хранимки это очень хороший стиль. Можешь поинтересоваться у любого нормального разработчика баз данных. Да и вообще я уже давно отвык писать трехэтажные вложенные селекты. Очень тяжело их править, когда проходит месяца три или больше, да и еще если писал не сам.
Угу. Только разработчик баз данных ничего не понимает в разработке маломальски масштабных приложений, ровно как и в ООП.
"Хороший стиль" - это ORM (хоть он и не всегда доступен из-за ограничений производительности). А хранимки - это несопровождаемая и с трудом отлаживаемая говнолапша, которая приводит к децентрализации логики и только, и которая оправдана лишь в исключительных случаях, если речь не о толстом клиенте.
 

fixxxer

К.О.
Партнер клуба
Ну я в принципе могу понять подход, когда _ваще все_ делается в хранимках, а клиентский код их только вызывает - на все остальное при этом вооще права почиканы.

Но зачем это надо, кроме случаев, когда СУБД выполняет роль аппсервера, я хз.

А если спросить DBA - дык понятное дело: дескать, вы там понапишете говнозапросов, а вот я не понапишу, я Д'Артаньян, а вы чудаки. ;) Вот только если заставить его действительно писать хранимку под каждый таск, он быстро передумает... ;)
 

Димон

Новичок
Смешной народ :) Пишите на чем хотите. Хоть на хранимках, хоть без них. Мне до ваших субъективных рассуждений, не подкрепленных фактами глубоко фиолетово. Не превращайтесь в детей и не тратьте зря время. Предлагаю не продолжать этот спор либо открыть для этого отдельную тему.

А по поводу времени коннекта постгрес, да скорее всего здесь узкое место. Надо копать.

-~{}~ 13.04.10 14:13:

Да коннект постгреса, что-то хандрит. Простой коннект у мускула занимает примерно 0.008 сек у постгреса 0.06.
 

Dovg

Продвинутый новичок
он не хандрит. На каждое новое подключение он создает отдельный процесс. Отсюда и такая скорость подключения.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если нужны хранимые процедуры, транзакции, подзапросы, сложные конструкции - выбор предопределен

по субьективному опыту использования обоих - я еще ни разу не жалел о Postgres, и много раз плевался, натыкаясь на чудачества MySQL (как минимум, включаю strict)

А еще я фигею со всех этих ваших говнотестов, в которых у MySQL включено кеширование.
Погоняйте на 10 или 20 млн записей без кеширования, "немного" иначе будет :)
Еще у mysql "интересное" поведение, когда индекс в оперативку не влазит.
 

Димон

Новичок
И так, поставили демон pgpool (пул соединений Postgres). Да, теперь, скрипт отрабатывается даже быстрее, чем у MySQL. Время подключения сократилось до 0.002 с 0.06 (у мускула 0.008).

Но прогнали через ab -n 1000 -c 100, и опять та же картина: 50 - 55 запросов в секунду.

-~{}~ 13.04.10 21:50:

Запустили тест в одном скрипте на 100 повторений: мускул в 5 раз быстрее.

-~{}~ 13.04.10 21:52:

Походу пацаны реально над драйвером для мускула постарались, заточили, заоптимизировали :)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Димон
Походу пацаны реально над драйвером для мускула постарались, заточили, заоптимизировали :)
Скажем точнее: драйвер мыскля действительно оптимизированный, а драйвер pgsql в PDO --- полный кал. :[

Так что имеет смысл тестировать с родным интерфейсом. Впрочем, возможно, косяк ещё где-то в организации тестов, с трудом верится, что включение pgpool не прибавляет производительности.
 

Димон

Новичок
Впрочем, возможно, косяк ещё где-то в организации тестов, с трудом верится, что включение pgpool не прибавляет производительности.
Я тоже думаю что здесь не все чисто. Прирост должен быть.
 

korchasa

LIMB infected
Лучше возьмите список запросов с реального приложения, побейте по соединениям и проиграйте с нужной конкурентностью. А этот тест к реальности не имеет ровно никакого отношения. Ну и базку нормальная настроить надо.
 

fixxxer

К.О.
Партнер клуба
Да я вообще поражаюсь.

Вон на всяких мыскль-перфонманс-блогах показывают, как от одной строчки в конфиге скорости на порядок меняются на определенных запросах, а тут apt-get install mysql-server и понеслась, гы.
 

Димон

Новичок
Автор оригинала: fixxxer
а тут apt-get install mysql-server и понеслась, гы.
Это все умные мысли, которые есть в голове? По делу что-нибудь есть? Если повнимательнее почитаешь первый пост, то там написано, что это поверхностное, первичное тестирование. Более глубокий анализ с настройками будем делать позже.

-~{}~ 14.04.10 11:42:

Если разделить "публику" на этом форуме, то можно выделить две группы: первая группа, которой не больше трети, пишет по делу, дает хорошие осмысленные комментарии, советы и замечания, а из второй группы сочатся бесполезные обрывки мыслей, мнений, подколы или как писал Крылов "ужимки и прыжки". Подумайте прежде чем отвечать. Нужен ли ваш ответ тем людям которые читают этот форум? Есть ли в ответе что-то полезное? Зачем засорять форум ерундой? Может быть иногда лучше промолчать? Ведь есть несметное кол-во сайтов где люди спорят, ругаются, доказывают свое мнение. Может быть вам лучше там высказываться?

-~{}~ 14.04.10 11:47:

Автор оригинала: korchasa
Лучше возьмите список запросов с реального приложения, побейте по соединениям и проиграйте с нужной конкурентностью. А этот тест к реальности не имеет ровно никакого отношения. Ну и базку нормальная настроить надо.
Про настройки согласен. А вот про запросы с реального приложения, нет. Да, тесты могут к реальности имеет немного отношения. Но, как я уже писал, это первичный тест. Чем не показатель простой select, insert, update? Если эти тесты хорошо проходят, то можно перейти к более сложным.
 
Сверху