PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Настройка на производителността на Rails за производство?

Прекарах известно време в настройка на приложението си на heroku и прекарах известно време в работа по настройка на производителността на Rails приложения в различни настройки.

Когато стартирам ab -n 300 -c 75 ...myapp.com.... # което е резервно копие на основния ми сайт и е на безплатния план cedar с unicorn

Requests per second:    132.11 [#/sec] (mean)
Time per request:       567.707 [ms] (mean)
Time per request:       7.569 [ms] (mean, across all concurrent requests)

(това е срещу начална страница, която не прави нищо интензивно, така че го предоставям само като пример „колко бърз би могъл да бъде heroku на безплатния план с много проста страница?“, а не като „вашите приложения трябва да бъдат толкова бързо")

Ето моя списък за проверка на Rails Performance Tuning 101:

  1. Първо измерете времето за зареждане на браузъра/страницата (браузърът прави много заявки, ab ви казва само за една от тях и обикновено заявката ви за главната страница не е проблемът), вземете изходните числа за зареждане на страницата от инструменти като www.webpagetest.org или www.gtmetrix.com за публичните страници или инструментите на браузъра Yslow, скоростта на страницата на Google или dynatrace за частните страници. Ако погледнете диаграмата на каскадата за зареждане на страницата (панела „Net“ в chrome/firefox), тя обикновено показва, че вашият html се зарежда бързо (под секунда), но след това всичко останало отнема 1-3 секунди, за да се зареди. Следвайте препоръките за Yslow/скорост на страницата за това как да се подобрите (уверете се, че използвате в пълна степен материалите за конвейера на активите на Rails 3.1)

  2. Прочетете вашите регистрационни файлове/нова реликва, за да намерите най-доброто място на „най-бавната/най-често срещаната“ заявка и профилирайте какво се случва с тази заявка (бавно ruby/много използване на mem ли е, или много заявки?) Имате нужда да имате надежден начин за откриване и наблюдение на проблеми с производителността, а не просто да променяте нещата на случаен принцип. След като идентифицирате някои целеви области, създайте тестови скриптове, за да помогнете с тестването преди/след и докажете, че вашата промяна помага, и открийте дали се прокрадва регресия.

  3. Липсата на индекси на db колони е един от най-често срещаните проблеми и най-лесният за разрешаване. Стартирайте обяснение на целевите заявки или прегледайте дневника на вашите бавни заявки, за да видите какво прави инструментът за планиране на заявки. Добавете индекси за външни ключове, колони за търсене или първични данни (покриващ индекс), според случая. Тествайте отново с действителни производствени данни, за да докажете, че има значение. (можете да стартирате обяснение в heroku, както и да стартирате заявки за липсващи или неизползвани индекси)

  4. Повечето Rails приложения с лоша производителност страдат от N+1 заявки, защото е толкова лесно да се напише order.owner.address.city и да не се мисли какво се случва, когато това е в цикъл. Заявките N+1 не са непременно бавни заявки, така че не се показват в регистъра на бавните заявки, просто има много от тях и е по-ефективно да се направи всичко наведнъж. Използвайте :include или .includes() за нетърпеливо зареждане на тези данни или погледнете да направите заявката си по друг начин.

  5. Анализирайте потока на вашето приложение и потърсете възможности за кеширане. Ако потребителят скача напред-назад между индексната страница и страницата с подробности и обратно, може би ajax изглед на детайлите, без да напуска индексната страница, ще му даде данните, от които се нуждаят, по по-бърз начин. Написах някои още мисли за това в моя блог

Изнесох презентация за тези техники и други идеи в Чикаго на тазгодишната конференция WindyCityRails. Можете да видеото тук на моя www.RailsPerformance .com блог Това, което харесвам в heroku е, че трябва да сте мащабируеми от самото начало. Когато погледнете дискусиите в пощенския списък, виждате, че повечето хора са наясно с най-добрите практики за производителност и как да извлекат максимума от сървъра. Харесва ми също как, ако искате да останете евтини, научавате как триковете за настройка на производителността, които ще ви донесат най-много.

Успех!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apache Cayenne / PostgreSQL:твърде много клиенти вече имат грешка

  2. Как да извършите едно и също агрегиране на всяка колона, без да изброявате колоните?

  3. Намерете възможни дубликати в две колони, като игнорирате малки и големи букви и специални знаци

  4. Postgresql, актуализиране или вмъкване според регистъра

  5. Postgresql, извлича стойност за конкретен ключ от json масив