2013-03-06 4 views
0

У меня есть приложение Rails 3.2.12, локально установленное на DotCloud. Я вижу очень медленно ActiveRecord (Postgres) производительность на Dotcloud и не может понять, почему:ActiveRecord Postgres 8-10x медленнее на производстве DotCloud (EC2) против разработки Macbook Air

Page Load Macbook Air (рельсы приложение в режиме разработки):

Completed 200 OK in 617ms (Views: 361.3ms | ActiveRecord: 39.1ms) 

загрузки страницы DotCloud (рельсы приложения в режиме производства, идентичных DB и странице):

Completed 200 OK in 796ms (Views: 315.3ms | ActiveRecord: 329.4ms) 

Это не беспорядочное время, но стандарт производительность дельта на всех загрузках страницы. Моя база данных составляет всего 16 МБ, поэтому она невелика. Объем памяти в службе postgres достаточен (128 МБ), при этом используется только 30 МБ. Я проверил свой локальный postgres.conf, и настройки были по умолчанию, отключены параметры postgresql.app.

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

Был бы очень благодарен за мысли о том, как отлаживать & исправить это!

+1

Что такое аппаратное обеспечение в облаке? У Air нет супер быстрых SSD? – AdamT

+0

Dotcloud находится на EC2, так что это то, на чем они были. Но с базой данных 16 МБ postgres должны использовать память и кэшировать все это, не полагаясь на диск ... Любой способ настроить это? – n8vision

+0

Первое, что вам нужно сделать, это включить ведение журнала запросов в PostgreSQL на обеих машинах, а затем сравнить длительность запросов. Посмотрите, является ли это проблемой уровня БД или что-то более высокое. Также: Каково общее состояние памяти машины? Загрузка дискового ввода-вывода? –

ответ

1

Как сотрудник dotCloud, я должен сказать вам, что если вы хотите внимательно изучить ваше приложение, чтобы понять, почему оно не оправдывает ваших ожиданий, вы должны file a support ticket. Я также должен сказать вам, что если вы находитесь в режиме песочницы, вы можете ожидать меньшую производительность по сравнению с тем, что вы были в одном из уровней оплаты (например, Live или Enterprise).

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

  1. Ваше окружение DEV работает СУБД (PostgreSQL) и ваши рельсы приложения на тот же хост, что исключает какую-либо заметная задержку, вызванную круглыми поездками в базу данных. С dotCloud они, вероятно, будут находиться на отдельных хостах и, возможно, даже в отдельных центрах обработки данных.

  2. В вашей среде разработки, возможно, используется твердотельный накопитель (SSD) (в зависимости от возраста вашего MacBook Air), и вы просто перешли в EBS (Amazon Elastic Block Store), в виде хранилища, подключенного к сети (на жестком диске Дисковый привод).

Между этими двумя пересадками, я не совсем в шоке от увеличения времени отклика, но мое любопытство задето вашей ActiveRecord время увеличивается на 290ms в то время как ваше общее время отклика увеличилось только на звука 180 мс.

Я не хочу размышлять о том, когда ваше время ответа съедается, поэтому я рекомендую вам как можно скорее file a support ticket at support.dotcloud.com, чтобы мы могли поближе познакомиться. Если и когда вы это делаете, укажите мое имя или этот поток StackOverflow и укажите URL-адрес вашего приложения.

+0

Спасибо, Чарлз. Приложение работает в режиме реального времени. Я предполагаю, что с таким маленьким db он должен быть в основном в кеше. RAM и дисковая емкость ввода-вывода не должны иметь значения. В любом случае, если локальный работает в режиме dev, который не кэширует классы и т. Д., Вы ожидаете, что увеличение производительности на производстве, по крайней мере, будет. Я подал билет Джону. – n8vision