2015-12-02 12 views
5

Mam instancję amazon ec2 (SAY S1) (pamięć 4core-7GB) przy użyciu Ubuntu 12.04, która jest uruchomiona moja aplikacja internetowa z postgresql 9.1. Wszystkie dane PostgreS są przechowywane na innym woluminie ssd (nie root) 100 GB. (Zapisz teraz tylko obecnie 26% pełnej).Postgres tworzenie/przywracanie zajmuje dużo czasu na amazon ec2

Nagle od dnia lub dwóch kilka działań postgresowych zaczęło zabierać dużo czasu. Utwórz komendę (52 sekundy) i przywróć db (teraz 9 minut, maks. 50 sekund).

Uruchomienie iostat podczas uruchamiania komend PostgreSQL Potwierdzam, że jego IOPS woluminu ec2, który osiągnął swój limit (3 IOPS/GB równa się 300 IOPS dla woluminu 100GB). Widać to poniżej po uruchomieniu tego polecenia: iostat -d 5 -x -p xvdf.

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.35  2.28 1.20 298.99 19.65 13082.19 87.29 23.42 78.03 64.19 78.09 3.29 98.75 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.40  0.00 13067.20 87.88 126.47 420.75 0.00 420.75 3.35 99.76 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.40  0.00 13067.20 87.88 126.32 417.95 0.00 417.95 3.35 99.76 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  1.80 0.00 297.80  0.00 13093.60 87.94 131.70 440.82 0.00 440.82 3.36 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  0.00 0.00 301.00  0.00 13225.60 87.88 129.36 422.97 0.00 422.97 3.32 99.84 

IO characteristics na AWS mówi, że każdy IOPS zajmuje prośbę 256KiB lub mniej jest postgres użyciu mniejszych bloków danych odpisać wynikające z większej liczby życzenie IOPS?

Podczas gdy mam kolejną instancję ec2 (Say S2) z 100 GB woluminu (teraz pełne 95%) z danymi postgresowymi na woluminie root i ich wydajnością. Więc rozmiar tomu jest czymś, co na pewno nie ma znaczenia.

Podlegający tom S1 przechowuj tylko dane postgresowe Wciąż mogę zobaczyć poniższe statystyki przez iostat. Nie wiem, dlaczego statystyki są takie i jak mogę zmniejszyć czas komend postgres bez zwiększania rozmiaru woluminu. (Podczas wszystkich operacji pamięć 3GB jest zawsze za darmo)

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.34  2.29 1.23 298.93 20.10 13079.03 87.28 26.19 87.26 66.96 87.34 3.29 98.78 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  2.40 0.60 299.00  4.80 13020.80 86.95 132.22 434.48 108.00 435.14 3.34 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  3.20 4.40 295.20 43.20 12866.40 86.18 122.18 417.09 142.00 421.20 3.34 100.00 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  2.80 2.40 297.20 23.20 12940.00 86.54 122.70 401.11 124.00 403.34 3.34 99.92 

Device:   rrqm/s wrqm/s  r/s  w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 
xvdf    0.00  3.40 4.80 294.80 46.40 12840.00 86.02 127.43 433.15 161.67 437.57 3.34 99.92 

Uwaga: dotknięte objętość PostgreSQL zawiera 100 różnych Postgres dB przy przeciętnej wielkości 110 MB/db (ale szczerze mówiąc nie sądzę, jest to w żadnym wypadku problem)

Odpowiedz

0

W końcu problem został rozwiązany. Okazało się, że był to postgres statistics collector, który działał w tle i wydawał dużo małych (mniej niż 256 KB) wniosków o io (jako że mamy ponad 100 dbs), jedząc wszystkie 300 IOPS na 100GB dysku. W rezultacie wszystkie akcje PostgreSy zostały zaplanowane w kolejce i zajmowały dużo czasu.

dokument

Postgres mówi

Kolektor statystyki przekazuje zebrane informacje do backendów (w tym autovacuum) poprzez pliki tymczasowe. Pliki te są przechowywane w podkatalogu . Kiedy postmaster zamyka się, stała kopia danych statystycznych jest przechowywana w globalnym podkatalogu . Aby zwiększyć wydajność, parametr katalog_główny_temps można wskazać na system plików oparty na pamięci RAM, zmniejszający fizyczne wymagania we/wy.

Wskazałem plik pg_stats_tmp, aby wypalić zamiast dysku, montując pg_stats_tmp w systemie plików tmpfs. Ten blog wyjaśnia, jak to zrobić krok po kroku.

Powiązane problemy