суббота, 6 февраля 2016 г.

Сводка базовых итогов бенчмарка

Всё теперь происходит на пхп7. Раз уж под него вышел профилировщик.

Симфони3 без базы

Concurrency Level:      1
Time taken for tests:   4.300 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      406000 bytes
HTML transferred:       198000 bytes
Requests per second:    232.57 [#/sec] (mean)
Time per request:       4.300 [ms] (mean)
Time per request:       4.300 [ms] (mean, across all concurrent requests)
Transfer rate:          92.21 [Kbytes/sec] received


Concurrency Level:      50
Time taken for tests:   12.224 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      4060000 bytes
HTML transferred:       1980000 bytes
Requests per second:    818.05 [#/sec] (mean)
Time per request:       61.121 [ms] (mean)
Time per request:       1.222 [ms] (mean, across all concurrent requests)
Transfer rate:          324.34 [Kbytes/sec] received





Уии2 без базы

Concurrency Level:      1
Time taken for tests:   1.856 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      336000 bytes
HTML transferred:       200000 bytes
Requests per second:    538.66 [#/sec] (mean)
Time per request:       1.856 [ms] (mean)
Time per request:       1.856 [ms] (mean, across all concurrent requests)
Transfer rate:          176.75 [Kbytes/sec] received



Concurrency Level:      50
Time taken for tests:   3.366 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      3360000 bytes
HTML transferred:       2000000 bytes
Requests per second:    2970.70 [#/sec] (mean)
Time per request:       16.831 [ms] (mean)
Time per request:       0.337 [ms] (mean, across all concurrent requests)
Transfer rate:          974.76 [Kbytes/sec] received



Цепляемся через через баунсер

pgbench -S -U postgres  -p6432 -U tmp -C -c1 -T 10 -h 192.168.1.103 tmp
latency average: 21.692 ms
tps = 46.032208 (including connections establishing)
tps = 52.081821 (excluding connections establishing)

В 50 потоков. Это базовые цифры.
latency average: 541.126 ms
tps = 87.958383 (including connections establishing)
tps = 97.724345 (excluding connections establishing)


Теперь тоже на симфони3 - простые селекты

Concurrency Level:      1
Time taken for tests:   6.507 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      469000 bytes
HTML transferred:       261000 bytes
Requests per second:    153.67 [#/sec] (mean)
Time per request:       6.507 [ms] (mean)
Time per request:       6.507 [ms] (mean, across all concurrent requests)
Transfer rate:          70.38 [Kbytes/sec] received




Concurrency Level:      50
Time taken for tests:   20.924 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      4690000 bytes
HTML transferred:       2610000 bytes
Requests per second:    477.92 [#/sec] (mean)
Time per request:       104.621 [ms] (mean)
Time per request:       2.092 [ms] (mean, across all concurrent requests)
Transfer rate:          218.89 [Kbytes/sec] received


Теперь тоже на уии2

Concurrency Level:      1
Time taken for tests:   6.421 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      398000 bytes
HTML transferred:       262000 bytes
Requests per second:    155.74 [#/sec] (mean)
Time per request:       6.421 [ms] (mean)
Time per request:       6.421 [ms] (mean, across all concurrent requests)
Transfer rate:          60.53 [Kbytes/sec] received


Concurrency Level:      50
Time taken for tests:   8.837 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      3980000 bytes
HTML transferred:       2620000 bytes
Requests per second:    1131.63 [#/sec] (mean)
Time per request:       44.184 [ms] (mean)
Time per request:       0.884 [ms] (mean, across all concurrent requests)
Transfer rate:          439.83 [Kbytes/sec] received

понедельник, 1 февраля 2016 г.

pm.max_children - вот что еще нужно!

Ну конечно. Еще один важный параметр - сколько у нас php-fpm потоков для обработки запросов. По умолчанию - 5. Всего лишь 5. Это значит, что запросы на обработку php запросов будут вставать в очередь.


Concurrency Level:      50
Time taken for tests:   25.787 seconds
Complete requests:      10000
Requests per second:    387.80 [#/sec] (mean)
Time per request:       128.933 [ms] (mean)
Time per request:       2.579 [ms] (mean, across all concurrent requests)
Transfer rate:          153.76 [Kbytes/sec] received


Поднимем же и это число до 50 и проверим и его на скорость:
Concurrency Level:      50
Time taken for tests:   27.193 seconds
Complete requests:      10000
Requests per second:    367.75 [#/sec] (mean)
Time per request:       135.964 [ms] (mean)
Time per request:       2.719 [ms] (mean, across all concurrent requests)
Transfer rate:          145.81 [Kbytes/sec] received

На самом деле стало чутка хуже, т.к. нагрузка на проц возросла сильнее и переключение между потоками создало дополнительную нагрузку. Т.е. хорошо иметь быстрые запросы, чтобы они сильно не успевали загрузить систему. Поэтому вернёмся к тесту pgbouncer с новыми данными и попробуем нагрузить базу по полной!

воскресенье, 31 января 2016 г.

Бенч symfony3 с базой данных

Обновим наше приложение - на получение записи из базы.

Итого получим. Без базы как обычно (50 юзеров)
Concurrency Level:      50
Time taken for tests:   27.157 seconds
Complete requests:      10000
Failed requests:        0
Requests per second:    368.23 [#/sec] (mean)
Time per request:       135.786 [ms] (mean)


С базой уже
Concurrency Level:      50
Time taken for tests:   63.509 seconds
Complete requests:      10000
Failed requests:        0
Requests per second:    157.46 [#/sec] (mean)
Time per request:       317.547 [ms] (mean)
Time per request:       6.351 [ms] (mean, across all concurrent requests)
Transfer rate:          72.12 [Kbytes/sec] received

Это ужасно. Одно приложение, которое коннектится на одну базу, без баунсера.

Добавим баунсер
Concurrency Level:      50
Time taken for tests:   40.391 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      4690000 bytes
HTML transferred:       2610000 bytes
Requests per second:    247.58 [#/sec] (mean)
Time per request:       201.957 [ms] (mean)
Time per request:       4.039 [ms] (mean, across all concurrent requests)
Transfer rate:          113.39 [Kbytes/sec] received

Стало быстрее, но всё равно очень медленно. pg_stat_activity не выдаёт того, что база работает на полную. В отличие от pgbench запросов

Если в одного юзера только селекты база отдаёт. Каждый запрос - одно соединение (-C):
tps = 470.757538 (including connections establishing)
tps = 900.448771 (excluding connections establishing)

Для 50 пользователей это будет (только селекты -S) и новые коннекты (-C)
tps = 1401.415031 (including connections establishing)
tps = 39028.763458 (excluding connections establishing)

На этом, пожалуй и закончим. Слишком много новых вопросов появилось при работе с базой данных. И с параллельными запросами.