-
Notifications
You must be signed in to change notification settings - Fork 131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Testing performance of external graph usage #3823
Comments
VIVO's internal logging of SPARQL query timings may be useful here: https://wiki.lyrasis.org/display/VIVO/The+Developer+Panel See sections about SPARQL Query Settings and developer.properties. |
@chenejac , @brianjlowe , @wwelling , @kaladay VIVO (TDB/Neptune) Performance measurement - Preliminary results-Here are some of the results of the analysis to date Prerequisiteread https://wiki.lyrasis.org/display/VIVO/Performance+Testing System details
Testing Procedure
Results analysisTest with TDBScript result after reindexing (step 8):
Script result after reindexing (step 11):
Remarks:
Test with NEPTUNEScript result after reindexing (step 8):
Script result after reindexing (step 11):
Remarks:
General remarksIt appears that changing pages (person, organization, search, etc.) requires a number of queries proportional to the number of triples in the TriplesStore. For a networked database detached from the VIVO application, the consequences are quite small for a little database. On the other hand, the sensitivity to latency becomes more perceptible for larger databases. The hypothesis that emerges from the observation is that the high latency is mainly due to repeated sending of small queries. We believe that it would be advantageous to group small queries into larger ones to reduce the number of calls to the triplestore. |
@michel-heon thanks for this. This is a nice first step. I am wondering can we make more concrete definition for further steps including code analysis and listing links to code lines where the improvement is needed (for instance link to a method which should use bulk fetching of data). |
A comprehensive investigationThis commentary describes the investigations that have been conducted to identify the source of the network latency. In addition, a first correction is proposed in the Vitro PR 378 The investigation's goal is to determine the entry point requiring optimization. Inspired by the defined procedure VIVO-Wiki/Performance+Testing, several executions with a step-by-step trace have been performed. Experimental procedure to evaluate the performance of the solutionThe investigation is carried out by performing five iterations, each comprising two tests Test setupTest flowThe tests are produced in the following sequence: flowchart TD
Z[Clean tomcat logs ] --> A[Set parameters]
A -->|STGE-Type, #-indv, #-Thread| B(compile/start-vivo)
BB[(Data set)] -. Loading data set .-> C
B --> C{{Wait for the reindexing to be completed}}
C -. trace log .-> E[(test-#.txt)]
C --> F{{Select Person in VIVO}}
F-. trace Log .-> G[(test-#+1.txt)]
F--> H[Stop tomcat]
Test parametersIteration are parameterized according to the following three variables
Log compilersThe result of the tests is realized by the execution of this script which is an adaptation of the script proposed in parse
Data set
Java classes affected by the testssee details in Vitro PR 378 Test resultsSummary of experiments
Test detailstest-1
test-2
test-3
test-4
test-5
test-6
test-7
test-8
test-9
test-10
DiscussionPerformance between the local TDB type and the remote triples server (Neptune)The two tests representing this test case are test-2 and test-6:
We observe an average resolution of obtaining information of 0.000452 sec for the TdbLocal mode and 0.007331 sec for the TdbDistant mode, that is to say a ratio for local TDB of 16 times faster than the distant mode. Impact of reducing the number of individuals to read per pageThis test case aims at analyzing the performance of the reduction of the individual number to be read to obtain the necessary information to supply the page. In its initial state, Vitro reads the information of 30 individuals. Each individual uses sometimes up to 60 SPARQL queries, which for 30 individuals is equivalent to nearly 1800 queries.
To evaluate the effect of the decrease in the number of individuals we will review the results of the test-6 and test-10 for a reduction from 30 to 15 individuals on Neptune. To make this comparison, it is necessary to consider only the totals obtained when the person page is called. The totals from the indexing must be subtracted from the totals after the call to the person's page. The result of the test-5 and test-9 must be part of the calculation
Result So the page containing 15 individuals refreshes within a factor of 2... which makes sense! Impact of parallel processing (Multithreading) of individuals
TT-8 (2009.64 sec) minus TT-7 (2007.19 sec) = 2.45 seconds to refresh page Multi-Thread It appears in this experiment that the results obtained are in the opposite direction of the expected results. This result can be explained in several ways:
Without any doubt, this is a case to be reproduced several times in order to extract more significant statistical results. Tracks of future investigationsHere are some of the important classes involved in finding the information needed to produce the list of individuals. Classes that are more or less in order of call.
Two approaches are possible to reduce latency: FYI: @chenejac , @brianjlowe , @wwelling , @litvinovg |
Is your feature request related to a problem? Please describe.
It looks performance in communication with external/remote graph bases is quite low. We need to test those performance and create baseline for comparation with further improvements.
Describe the solution you'd like
A wiki page for performance testing should be updated - https://wiki.lyrasis.org/display/VIVO/Performance+Testing. The page is documenting the scenario of testing and results. Taking into account that ingestion has been improved recently in this PR, all existing tests at wiki page should be repeated. The definition of the environment should be also included (operating system, processor, RAM, SDD or HDD disk).
Additional context
Wiki page - https://wiki.lyrasis.org/display/VIVO/Performance+Testing
Take a look in another Lyrasis communities testing performance procedures and persentation of results:
The text was updated successfully, but these errors were encountered: