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