8000 Improve performance when using findIfExists · Issue #2131 · shlinkio/shlink · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Improve performance when using findIfExists #2131
Closed as not planned
Closed as not planned
@marijnvandevoorde

Description

@marijnvandevoorde

Shlink version

4.1.0

PHP version

8.2

How do you serve Shlink

Self-hosted RoadRunner

Database engine

MicrosoftSQL

Database version

2022

Current behavior

``We did performance tests without and with this param turned to true.

          /\      |‾‾| /‾‾/   /‾‾/   
     /\  /  \     |  |/  /   /  /    
    /  \/    \    |     (   /   ‾‾\  
   /          \   |  |\  \ |  (‾)  | 
  / __________ \  |__| \__\ \_____/ .io

     execution: local
        script: script.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 40s max duration (incl. graceful stop):
              * default: 10 looping VUs for 10s (gracefulStop: 30s)


     data_received..................: 341 kB 34 kB/s
     data_sent......................: 265 kB 26 kB/s
     http_req_blocked...............: avg=16.33µs  min=2µs     med=5µs      max=911µs    p(90)=7µs      p(95)=10µs    
     http_req_connecting............: avg=7.75µs   min=0s      med=0s       max=572µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=159.74ms min=96.56ms med=149.79ms max=528.73ms p(90)=191.99ms p(95)=210.66ms
       { expected_response:true }...: avg=159.74ms min=96.56ms med=149.79ms max=528.73ms p(90)=191.99ms p(95)=210.66ms
     http_req_failed................: 0.00%  ✓ 0        ✗ 630 
     http_req_receiving.............: avg=90.68µs  min=31µs    med=80µs     max=751µs    p(90)=128.1µs  p(95)=168.74µs
     http_req_sending...............: avg=40.05µs  min=13µs    med=37µs     max=381µs    p(90)=52µs     p(95)=62.54µs 
     http_req_tls_handshaking.......: avg=0s       min=0s      med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=159.61ms min=96.46ms med=149.7ms  max=528.6ms  p(90)=191.85ms p(95)=210.53ms
     http_reqs......................: 630    62.13345/s
     iteration_duration.............: avg=160ms    min=96.78ms med=150.01ms max=529.87ms p(90)=192.15ms p(95)=210.85ms
     iterations.....................: 630    62.13345/s
     vus............................: 10     min=10     max=10
     vus_max........................: 10     min=10     max=10

So 62 per second. At times reaching 80, so solid!

When we set it to true...


          /\      |‾‾| /‾‾/   /‾‾/   
     /\  /  \     |  |/  /   /  /    
    /  \/    \    |     (   /   ‾‾\  
   /          \   |  |\  \ |  (‾)  | 
  / __________ \  |__| \__\ \_____/ .io

     execution: local
        script: script.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 40s max duration (incl. graceful stop):
              * default: 10 looping VUs for 10s (gracefulStop: 30s)


     data_received..................: 13 kB 928 B/s
     data_sent......................: 10 kB 718 B/s
     http_req_blocked...............: avg=327.7µs  min=3µs   med=9µs     max=810µs p(90)=794.1µs p(95)=805.2µs 
     http_req_connecting............: avg=194.95µs min=0s    med=0s      max=522µs p(90)=490.8µs p(95)=497.1µs 
     http_req_duration..............: avg=5.78s    min=4.29s med=5.74s   max=7.33s p(90)=7.1s    p(95)=7.13s   
       { expected_response:true }...: avg=5.78s    min=4.29s med=5.74s   max=7.33s p(90)=7.1s    p(95)=7.13s   
     http_req_failed................: 0.00% ✓ 0        ✗ 24  
     http_req_receiving.............: avg=147.45µs min=53µs  med=121.5µs max=381µs p(90)=231.4µs p(95)=294.49µs
     http_req_sending...............: avg=45.7µs   min=18µs  med=44µs    max=86µs  p(90)=65µs    p(95)=68.4µs  
     http_req_tls_handshaking.......: avg=0s       min=0s    med=0s      max=0s    p(90)=0s      p(95)=0s      
     http_req_waiting...............: avg=5.78s    min=4.29s med=5.74s   max=7.33s p(90)=7.1s    p(95)=7.13s   
     http_reqs......................: 24    1.714676/s
     iteration_duration.............: avg=5.78s    min=4.29s med=5.74s   max=7.33s p(90)=7.09s   p(95)=7.13s   
     iterations.....................: 24    1.714676/s
     vus............................: 10    min=10     max=10
     vus_max........................: 10    min=10     max=10

Expected behavior

The expecation is that the param only marginally influences the performance. Now, it's terrible.

Minimum steps to reproduce

  • Run shlink with a MS SQL database in the back
  • fill it with 1M unique long urls.
  • Run a performance test with the flag turned on.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0