Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Jira Legacy
serverSystem JiraJIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId01505d01-b853-3c2e-90f1-ee9b165564fc
keyPERF-37

...

In this workflow we are checking the performance of the check in items workflow running in the Fameflower release

Jira Legacy
serverSystem JiraJIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId01505d01-b853-3c2e-90f1-ee9b165564fc
keyPERF-37
.  We tested it with 1, 5, 8, and 20 virtual users for 30 minutes.  

...

Test

Virtual Users

Duration

OKAPI log level

Profiled

Ramp up (total time

in seconds)

1. 

1

30 min

WARNING

No

1

2. 

5

30 min

WARNING

No

50

3. 

8

30 min

WARNING

No

80

4. 

20

30 min

WARNING

No

200

5. 

8

30 min

WARNING

Yes

80

...

Results

  1. Overall check in items API workflow time in seconds

    For 30 minutesProfilerAverage 75th %tile
    1 userOFF379.88 ms379.88 ms
    5 usersOFF715.4 ms789.13 ms
    8 usersOFF781 ms822.02 ms
    20 usersOFF1127.57 ms1203.27 ms
    8 usersON1352.67 ms1415.58 ms


  2. Slow APIs taking more than 100 ms to return (Profiling OFF)

    API1 user (75th %tile)5 users (75th %tile)8 users (75th %tile)20 Users (75th %tile)

    POST checkin-by-barcode 

    379.88 ms470.19 ms508.61 ms750.88 ms
    Get inventory/items168.20 ms183.79 ms208.23 ms289.92 ms


...

Code Block
languagesql
linenumberstrue
WARNING: Doing SQL query without index for scheduled_notice.jsonb->>'nextRunTime', CQL >>> SQL: nextRunTime < 2020-07-01T06:06:52.364Z >>> scheduled_notice.jsonb->>'nextRunTime' <'2020-07-01T06:06:52.364Z'WARNING: Doing LIKE search without index for scheduled_notice.jsonb->'noticeConfig'->>'sendInRealTime', CQL >>> SQL: noticeConfig.sendInRealTime == true >>> lower(f_unaccent(scheduled_notice.jsonb->'noticeConfig'->>'sendInRealTime')) LIKE lower(f_unaccent('true'))
WARNING: Doing LIKE search without index for scheduled_notice.jsonb->>'triggeringEvent', CQL >>> SQL: triggeringEvent == "Hold expiration" >>> lower(f_unaccent(scheduled_notice.jsonb->>'triggeringEvent')) LIKE lower(f_unaccent('Hold expiration'))
WARNING: Doing LIKE search without index for scheduled_notice.jsonb->>'triggeringEvent', CQL >>> SQL: triggeringEvent == "Request expiration" >>> lower(f_unaccent(scheduled_notice.jsonb->>'triggeringEvent')) LIKE lower(f_unaccent('Request expiration'))
WARNING: Doing LIKE search without index for jsonb->>'requestId', CQL >>> SQL: requestId == 5a1739e3-e9e2-4fe9-82a2-1c8285252fc9 >>> lower(f_unaccent(jsonb->>'requestId')) LIKE lower(f_unaccent('5a1739e3-e9e2-4fe9-82a2-1c8285252fc9'))
2020-07-01T06:08:38.776Z WARNING: Doing LIKE search without index for  for patron_action_session.jsonb->>'requestIdpatronId', CQL >>> SQL: requestIdpatronId == 5a1739e32c5e835a-e9e2c12d-4fe945b4-82a2a949-1c8285252fc9262c0dc2f65d >>> lower(f_unaccent(patron_action_session.jsonb->>'requestIdpatronId')) LIKE lower(f_unaccent('5a1739e32c5e835a-e9e2c12d-4fe945b4-82a2a949-1c8285252fc9262c0dc2f65d'))
2020-07-01T06:08:38.776Z
WARNING: Doing LIKE search without index for patron_action_session.jsonb->>'patronIdactionType', CQL >>> SQL: patronIdactionType == 2c5e835a-c12d-45b4-a949-262c0dc2f65dCheck-in >>> lower(f_unaccent(patron_action_session.jsonb->>'patronIdactionType')) LIKE lower(f_unaccent('2c5e835a-c12d-45b4-a949-262c0dc2f65dCheck-in'))

Database Slow queries 
Anchor
slowQueries
slowQueries

Slowest queries which took the most of execution time were initiated by the mod-inventory-storage and mod_circulation_storage services presented in the following table:


Percent of total time

Average Time,ms

Calls

Module

Query

49%39 ms39,233mod_inventory_storage

SELECTCOUNT(*) FROM (SELECT jsonb,idFROM fs09000000_mod_inventory_storage.item WHERElower(f_unaccent(item.jsonb->>$1)) LIKElower(f_unaccent($2)) LIMIT $3) x

E.x.

SELECT COUNT(*) FROM (SELECT jsonb,id FROM fs09000000_mod_inventory_storage.item WHERE  lower(f_unaccent(item.jsonb->>'barcode')) LIKE lower(f_unaccent('090761167')) LIMIT 1 ) x

48%39 ms39,232mod_inventory_storage

SELECT jsonb,idFROM fs09000000_mod_inventory_storage.item WHERElower(f_unaccent(item.jsonb->>$1)) LIKElower(f_unaccent($2)) LIMIT $3OFFSET $4

E.x.

SELECT jsonb,idFROM fs09000000_mod_inventory_storage.item WHERE lower(f_unaccent(item.jsonb->>'barcode')) LIKE lower(f_unaccent('090761167')) LIMIT 1 OFFSET 0

0.3%56 ms185mod_circulation_storage

SELECT jsonb,idFROM fs09000000_mod_circulation_storage.loan WHERE (lower(f_unaccent(loan.jsonb->$1->>$2)) LIKElower(f_unaccent($3))) AND (loan.jsonb->>$4 ~ $5) LIMIT $6OFFSET $7

E.x.

SELECT jsonb,idFROM fs09000000_mod_circulation_storage.loan WHERE (lower(f_unaccent(loan.jsonb->'status'->>'name')) LIKE lower(f_unaccent('Open'))) AND (lower(f_unaccent(loan.jsonb->>'itemId')) LIMIT 1 OFFSET 0


...

    • In mod-circulation and okapi consider using a more efficient JSON package or calling use the existing jackson serialization calls in a different way to address the item: JVM profiling shows JSON de/serialization operations one of the slowest operations.
    • The found missing indexes warnings are covered by the stories
    • Jira Legacy
      serverSystem JiraJIRA
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyCIRCSTORE-215
    • Jira Legacy
      serverSystem JiraJIRA
      columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyCIRCSTORE-216
    • Have follow-up stories to study the performance of the two APIs that are still taking over 100ms to return to see where performance could improve.
    • Jira Legacy
      serverSystem JiraJIRA
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyPERF-79
    • Jira Legacy
      serverSystem JiraJIRA
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyPERF-90

...