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

Как да настроите приложение Ruby on Rails, работещо на Heroku, което използва производствено ниво Heroku Postgres?

Специално разбрах проблема.

Първо, запомнете моя код в изгледа:

<% @episodes.each do |t| %>
<% if !t.episode_image.blank? %>
<li><%= image_tag(t.episode_image.image(:thumb)) %></li>
<% end %>
<li><%= t.episode_urls.first.mas_path if !t.episode_urls.first.blank?%></li>
<li><%= t.title %></li>
<% end %>

Тук получавам всеки епизод episode_image в моята итерация. Въпреки че използвам includes в моя контролер имаше голяма грешка в схемата на таблицата ми. Нямах индекс за episode_id в моите episode_images маса! . Това причиняваше изключително дълго време за заявка. Намерих го с помощта на отчетите на базата данни на New Relic. Всички други времена на заявка бяха 0,5 ms или 2-3 ms, но episode.episode_image причиняваше почти 6500ms!

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

За хора, които може да се сблъскат със същия проблем, бих искал да ви разкажа за някои от моите открития за връзката между Heroku web dynos, Unicorn работници и Postgresql активни връзки:

По принцип Heroku ви предоставя dyno, което е някакъв вид малка виртуална машина с 1 ядро ​​и 512MB ram. Вътре в тази малка виртуална машина работи вашият Unicorn сървър. Unicorn има главен процес и работни процеси. Всеки от вашите служители на Unicorn има своя собствена постоянна връзка към вашия съществуващ Postgresql сървър (не забравяйте да проверите това ) Това основно означава, че когато имате дино Heroku с 3 Unicorn работници, работещи върху него, имате поне 4 активни връзки. Ако имате 2 уеб динамометрични устройства, имате поне 8 активни връзки.

Да приемем, че имате стандартен Tengu Postgres с ограничение от 200 едновременни връзки. Ако имате проблемни заявки с лош дизайн на db, нито db, нито повече dynos могат да ви спасят без кеш... Мисля, че ако имате дълго изпълняващи се заявки, нямате друг избор освен кеширане.

Всичко по-горе е мое собствено откритие, ако има нещо нередно с тях, моля, предупредете ме чрез вашите коментари.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL изпълнява ли някои оптимизации на производителността за транзакции само за четене

  2. кодирането UTF8 не съответства на локала en_US; избраната настройка LC_CTYPE изисква кодиране LATIN1

  3. Извлечете всички стойности от json в sql таблица

  4. Връща редове, които са максимум една колона в Postgresql

  5. Как да получа подниз от sql таблица?