Summary: | AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds | ||
---|---|---|---|
Product: | Koha | Reporter: | HB-NEKLS <gwilliams> |
Component: | Circulation | Assignee: | Kyle M Hall (khall) <kyle> |
Status: | CLOSED FIXED | QA Contact: | Testopia <testopia> |
Severity: | normal | ||
Priority: | P3 | CC: | gmcharlt, jonathan.druart, julian.maurice, kyle.m.hall, kyle, mtj, nick |
Version: | Main | ||
Hardware: | All | ||
OS: | All | ||
Change sponsored?: | --- | Patch complexity: | Trivial patch |
Documentation contact: | Documentation submission: | ||
Text to go in the release notes: | Version(s) released in: | ||
Circulation function: | |||
Attachments: |
Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds
Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds |
Description
HB-NEKLS
2015-08-26 17:30:10 UTC
Created attachment 54813 [details] [review] Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds If the AllowRenewalIfOtherItemsAvailable sys pref is set to allow, and a borrower has an item checked out that has many items {30+} AND many holds {70+) on it, loading the checkouts table for this borrower takes FOREVER to load. The load time takes forever, because of the factoring that happens to determine if an item is truly available for renewal. This patch swaps the use of GetMemberDetails for GetMember and reorders the subroutine calls to check each items' renewability from fastest to slowest. In a test case, the results of pre patch were: Start of loop: 2016-08-24T11:05:14 End of loop: 2016-08-24T11:05:29 Resulting in 15 seconds being spent in the loop Post patch results were: Start of loop: 2016-08-24T11:08:43 End of loop: 2016-08-24T11:08:48 Resulting in only 5 seconds being spent in the loop! Test Plan: 1) Apply this patch 2) Note there are no changes in functionality for the renewals column of the patron checkouts table. If you wish to go further and test the performance benefit: 1) Create a record with 50 items and 100 holds ( 50 waiting, 50 unfilled ) 2) Check out one of the waiting holds to a patron 3) Time the amount of time it takes for the checkouts table to load 4) Apply this patch 5) Repeat step 3, you should see an improvement in load time Created attachment 56463 [details] [review] Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds If the AllowRenewalIfOtherItemsAvailable sys pref is set to allow, and a borrower has an item checked out that has many items {30+} AND many holds {70+) on it, loading the checkouts table for this borrower takes FOREVER to load. The load time takes forever, because of the factoring that happens to determine if an item is truly available for renewal. This patch swaps the use of GetMemberDetails for GetMember and reorders the subroutine calls to check each items' renewability from fastest to slowest. In a test case, the results of pre patch were: Start of loop: 2016-08-24T11:05:14 End of loop: 2016-08-24T11:05:29 Resulting in 15 seconds being spent in the loop Post patch results were: Start of loop: 2016-08-24T11:08:43 End of loop: 2016-08-24T11:08:48 Resulting in only 5 seconds being spent in the loop! Test Plan: 1) Apply this patch 2) Note there are no changes in functionality for the renewals column of the patron checkouts table. If you wish to go further and test the performance benefit: 1) Create a record with 50 items and 100 holds ( 50 waiting, 50 unfilled ) 2) Check out one of the waiting holds to a patron 3) Time the amount of time it takes for the checkouts table to load 4) Apply this patch 5) Repeat step 3, you should see an improvement in load time Signed-off-by: Jesse Maseto <jesse@bywatersolutions.com> Created attachment 57636 [details] [review] Bug 14736 - AllowRenewalIfOtherItemsAvailable slows circulation down in case of a record with many items and many holds If the AllowRenewalIfOtherItemsAvailable sys pref is set to allow, and a borrower has an item checked out that has many items {30+} AND many holds {70+) on it, loading the checkouts table for this borrower takes FOREVER to load. The load time takes forever, because of the factoring that happens to determine if an item is truly available for renewal. This patch swaps the use of GetMemberDetails for GetMember and reorders the subroutine calls to check each items' renewability from fastest to slowest. In a test case, the results of pre patch were: Start of loop: 2016-08-24T11:05:14 End of loop: 2016-08-24T11:05:29 Resulting in 15 seconds being spent in the loop Post patch results were: Start of loop: 2016-08-24T11:08:43 End of loop: 2016-08-24T11:08:48 Resulting in only 5 seconds being spent in the loop! Test Plan: 1) Apply this patch 2) Note there are no changes in functionality for the renewals column of the patron checkouts table. If you wish to go further and test the performance benefit: 1) Create a record with 50 items and 100 holds ( 50 waiting, 50 unfilled ) 2) Check out one of the waiting holds to a patron 3) Time the amount of time it takes for the checkouts table to load 4) Apply this patch 5) Repeat step 3, you should see an improvement in load time Signed-off-by: Jesse Maseto <jesse@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com> Great catch Kyle! Pushed to master for 16.11! Pushed to 3.22.x, will be in 3.22.13 Pushed to 16.05.x, for 16.05.06 release |