Почему запрос 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, но кажется, что ЦП играет гораздо большую роль. Я прав или что-то еще происходит?
Несколько вопросов:
- Какие факторы на машине № 2 делают это так медленно?
- Может ли быть так, что SSD имеет огромное значение, но я не вижу его в iotop?
- Учитывая ограниченный бюджет... какие обновления я могу сделать для машины #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
- Использование сервера, на котором вы можете выполнять запросы к этой базе данных, или, по крайней мере, более мощная конфигурация рабочего стола