пятница, 29 января 2016 г.

Потестируем pbouncer. Сессионный режим

Начнём прогрев. От чистой базы однопоточный режим выдаёт 112тпс. Отлично

Вернёмся к нашим предыдущим бенчмаркам. Очень неравномерные значения.
pgbench -c 80 -U postgres -T 30

1000-1400 тпс выдало. Повторить этот результат даже не удалось. Всё время грузился диск.

Теперь тоже с параметром -С - чтобы создавались каждый раз новый подключения.
latency average: 640.854 ms
tps = 124.538621 (including connections establishing)
tps = 5205.394150 (excluding connections establishing)
Очень мало. Очень!

Итак. Даём начальные данные.
Число коннектов активных в постгрес - 100
Число активных коннектов в баунсере - 80
Режим баунсера - сессионный.

Команда маленько поменяется
pgbench -U postgres -p6432 -U tmp -T 10
115 тпс! Прекрасно!

Теперь добавим юзеров - в 80 коннектов
1000-1300тпс. Наверно нелпохо. Т.к. всё очень скачет

Самое важное - попробуем теперь каждый раз создавать новый коннект!
tps = 598.120886 (including connections establishing)
tps = 1282.184457 (excluding connections establishing)

В целом неплохо. Как раз результат такой же, только коннекты теперь в приложении можно открывать/закрывать как новые. Плохо только что статистика показывает большой статус по простаиванию.

Попробуем 200 коннектов!
latency average: 197.485 ms
tps = 1004.205619 (including connections establishing)
tps = 1011.058380 (excluding connections establishing)

И это прекрасно! Имея всего 80 коннектов максимально доступных в постгрес мы можем обслуживать и 200 клиентов!
С установлением нового коннекта
latency average: 352.464 ms
tps = 562.867521 (including connections establishing)
tps = 1095.836196 (excluding connections establishing)

Подготовим инфу для селект запросов для дальнейшего теста веб приложения.
400-600 селектов через баунсер в один поток

1700-1800 селектов через баунсер в 50 потоков
latency average: 26.319 ms
tps = 1829.153870 (including connections establishing)
tps = 1838.549638 (excluding connections establishing)

среда, 27 января 2016 г.

symfony2, yii2 и теперь rails. Часть 3.

Сейчас после установки назад php-5.6 (чтобы работал blackfire) и возврата симфонии к дефолтной конфигурации (вернул доктрину и твиг) имеем следующий итог. Запомним эти цифры для дальнейших исследований.

symfony2
Concurrency Level:      50
Time taken for tests:   27.298 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      4050000 bytes
HTML transferred:       1970000 bytes
Requests per second:    366.33 [#/sec] (mean)
Time per request:       136.488 [ms] (mean)
Time per request:       2.730 [ms] (mean, across all concurrent requests)
Transfer rate:          144.89 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0      10
Processing:    17  136   6.5    136     161
Waiting:       17  136   6.5    136     161
Total:         17  136   6.5    136     161

Percentage of the requests served within a certain time (ms)
  50%    136
  66%    138
  75%    139
  80%    140
  90%    143
  95%    145
  98%    148
  99%    150
 100%    161 (longest request)


yii2
Concurrency Level:      50
Time taken for tests:   7.543 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      3350000 bytes
HTML transferred:       1990000 bytes
Requests per second:    1325.71 [#/sec] (mean)
Time per request:       37.716 [ms] (mean)
Time per request:       0.754 [ms] (mean, across all concurrent requests)
Transfer rate:          433.70 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       3
Processing:     7   37   2.5     37      47
Waiting:        7   37   2.5     37      47
Total:          8   38   2.5     37      48

Percentage of the requests served within a certain time (ms)
  50%     37
  66%     38
  75%     38
  80%     39
  90%     41
  95%     43
  98%     44
  99%     45
 100%     48 (longest request)


И встречаем нового игрока - rails!
Concurrency Level:      50
Time taken for tests:   6.809 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      6230000 bytes
HTML transferred:       1400000 bytes
Requests per second:    1468.59 [#/sec] (mean)
Time per request:       34.046 [ms] (mean)
Time per request:       0.681 [ms] (mean, across all concurrent requests)
Transfer rate:          893.49 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:    12   34   2.7     33      57
Waiting:       12   34   2.6     33      52
Total:         12   34   2.7     34      57

Percentage of the requests served within a certain time (ms)
  50%     34
  66%     35
  75%     35
  80%     36
  90%     37
  95%     39
  98%     41
  99%     43
 100%     57 (longest request)

Явный победитель! - rails

Конечно вся эта синтетика - далека от реальностей. Но чем легко обёртка для задач - тем лучше. Следующий этап - подключим базу данных (постгрес + баунсер) и посмотрим как изменится время обработки запроса.