Почему запрос Postgres имеет совершенно разную производительность на двух современных машинах?

У меня есть две машины:

Машина № 1:

  • рабочий стол
  • Процессор Intel E5200 (2,5 ГГц)
  • 2 ГБ ОЗУ (DDR2)
  • Вращающийся жесткий диск (ОС) и SSD Hard drive (данные)

Машина № 2:

  • портативный компьютер
  • Процессор AMD E-300 (1,3 ГГц)
  • 8 ГБ ОЗУ (DDR3)
  • Вращающийся жесткий диск

Обе машины работают под управлением Ubuntu 11 и Postgres 9.1.

У меня есть большая база данных Postgres (>100 ГБ), и я выполняю расширенный запрос. Когда я наблюдаю за запросом, все, что я вижу, это 100% CPU на обеих машинах... похоже, используется только одно ядро. iotop показывает очень мало активности жесткого диска (возможно, 1 МБ / с).

Машина № 1 заканчивается через 20 минут. Машина № 2 все еще работает через 5 часов. Я подумал, что машина № 2 будет примерно вдвое медленнее, чем машина № 1 (1,3 ГГц против 2,5 ГГц)... может быть, немного лучше из-за большего объема оперативной памяти.

Я проверил это как быстрый тест, чтобы увидеть, будет ли покупка большего объема ОЗУ иметь огромное значение для Машины # 1, но кажется, что ЦП играет гораздо большую роль. Я прав или что-то еще происходит?

Несколько вопросов:

  1. Какие факторы на машине № 2 делают это так медленно?
  2. Может ли быть так, что SSD имеет огромное значение, но я не вижу его в iotop?
  3. Учитывая ограниченный бюджет... какие обновления я могу сделать для машины #2, чтобы сделать ее еще быстрее? В частности, лучше ли ОЗУ или ЦП?

1 ответ

Ваш процессор E-300 примерно в 3 раза медленнее в синтетических тестах по сравнению с E5200 ( http://www.cpubenchmark.net/cpu_lookup.php?cpu=AMD+E-300+APU против http://www.cpubenchmark.net/cpu_lookup.php?cpu=Pentium+Dual-Core+E5200+%40+2.50GHz)

Это одна из причин, почему запрос медленнее на второй машине. SSD-накопитель, на котором хранятся данные, может оказать огромное влияние, особенно если ваш вращающийся диск работает со скоростью 5400 об / мин вместо 7200, что, как я подозреваю, имеет место.

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

Поскольку у вас уже есть 8 ГБ ОЗУ, вы, вероятно, захотите обновить процессор на второй машине, но я чувствую, что вы все еще будете ждать дискового ввода-вывода.

Вы должны серьезно рассмотреть следующее:

  • Оптимизация вашего запроса
  • Настройка производительности Postgres
  • Использование сервера, на котором вы можете выполнять запросы к этой базе данных, или, по крайней мере, более мощная конфигурация рабочего стола
Другие вопросы по тегам