( Mcsiv | 2021. 02. 05., p – 02:06 )

Gondoltam tesztelek egy picit én is, direkt elkövettem az összes dolgot amit mindenki említett, hogy szar, vagyis:

  • http
  • Hálózat (magyar mobilnet -> németország) - 30-50ms ping a két végpont között
  • Nem egy kövér vas, faék VPS (1 mag / 1GB ram / MySQL és fut egy csomó dolog még, szóval nem mind volt az övé)
  • ab -vel terhelve (mert tökéletes példája a szar kliens oldalnak :D, ennél csak jobb benchmark eszköz létezik)

Endpoint: szimpla get hívás, last_insert_id -vel tér vissza, egy hívás egy insert

Tábla: InnoDB BIGINT id (autoincrement, primary uniqe btree index, hogy a MySQL se unatkozzon), BIGINT count, DATETTIME date

Minden teszt 10000 request, különböző concurrency level-el, a tesztek között direkt nem nyomtam truncate-et, hogy hízzon az index:

- Concurrency level: 15 / Requests per second: 159.89 / Time per request: 93.815

- Concurrency level: 25 / Requests per second: 255.94 / Time per request: 97.680

- Concurrency level: 50 / Requests per second: 413.43 / Time per request: 120.939

- Concurrency level: 100 / Requests per second: 741.91 / Time per request: 134.787

- Concurrency level: 250 / Requests per second: 661.94 / Time per request: 377.678

Ugyanez, faék táblával, autoincrement és index nélkül:

- Concurrency level: 15 / Requests per second: 157.48 / Time per request: 95.249

- Concurrency level: 25 / Requests per second: 263.22 / Time per request: 97.411

- Concurrency level: 50 / Requests per second: 458.19 / Time per request: 109.124

- Concurrency level: 100 / Requests per second: 706.84 / Time per request: 141.476

- Concurrency level: 250 / Requests per second: 647.78 / Time per request: 385.933

Érdekes hogy index nélkül picit lassabb.

Pici kiegészítéssel (1 másodpercnyi request-et összevárva):

- Concurrency level: 50 / Requests per second: 468.19 / Time per request: 106.744

- Concurrency level: 250 / Requests per second: 1309.52 / Time per request: 190.909

De hogy megnézzük mit megy az SQL ha picit gondosabban nyúlok hozzá:

  • 1 query = 1 insert / összesen 1000 insert
  • connection pool (30 connection-el)
  • a mért időben benne van a csatlakozás is

Eredmény:

real    0m2.018s
user    0m0.069s
sys     0m0.086s


Az előbbi kód, csak minimális cache-t szimulálva, 1 query = 50 insert, összesen 1000 query (50000 insert), eredmény:

real    0m3.310s
user    0m0.105s
sys     0m0.076s

Ugyan ez, csak 1 query = 500 insert, összesen 1000 query (500000 insert), eredmény

real    0m11.249s
user    0m0.162s
sys     0m0.211s

Beraktam 6000000 sort a táblába és az előbbi teszt újra:

real    0m12.124s
user    0m0.176s
sys     0m0.221s