Jörg Wirsig created JCR-4540:
--------------------------------

             Summary: MSSQL: Wrong database column type leads to performance 
issues in query
                 Key: JCR-4540
                 URL: https://issues.apache.org/jira/browse/JCR-4540
             Project: Jackrabbit Content Repository
          Issue Type: Bug
    Affects Versions: 2.18.3
            Reporter: Jörg Wirsig


We are using AzureSQL aka MSSQL as database to store Magnolia repositories 
which uses Jackrabbit as JCR Library to store data.
After facing some performance issues on Magnolia Author an analysis of time 
consumption on queries showed two main affeted queries. 
{code:java}
(@P0 nvarchar(4000))SELECT LENGTH, LAST_MODIFIED FROM ds_DATASTORE WHERE ID=@P0
((@P0 nvarchar(4000))SELECT ID, DATA FROM ds_DATASTORE WHERE ID=@P0{code}
>From another database in this project we are using separetly from Magnolia we 
>know, that on JDBC Layer there is an auto conversion to nvarchar because 
>unicode compatibility. 

We were facing the same performance issues on that database, having a column 
that was of type varchar, as well as the index on that column, while the query 
was converted to nvarchar, which resulted in a full table scan, because the 
index was not taken into account because of the difference in datatype of 
column. 

In our application beside from Magnolia we converted the columns that needed to 
be indexed to type nvarchar to solve the problem.

We assume the same issue is present on magnolias table _ds_DATASTORE_ where the 
column _ID_ is of type varchar, but should be a nvarchar, to get the index 
working again for that queries. 

 

We created an issue in Magnolia issue tracker recieving this information by 
magnolia support.

{quote}

thanks for reporting your findings in this ticket, they sound really 
interesting. However, I'm afraid that database data types are managed by 
jackrabbit implementation in {{org.apache.jackrabbit.core.data.db.DbDataStore}} 
class. Take a look at 
org.apache.jackrabbit.core.data.db.DbDataStore.createTableSQL property which is 
meant to create the DB tables, then if you take a look at the corresponding 
properties file ({{azure.properties}} or {{mysql.properties}}) you will see 
that VARCHAR is set for ID column:
{code:java}
createTable=CREATE TABLE ${tablePrefix}${table}(ID VARCHAR(255) PRIMARY KEY, 
LENGTH BIGINT, LAST_MODIFIED BIGINT, DATA IMAGE){code}
This means that Magnolia is not involved in this process and I'm not sure 
whether something can be done from our side or not. For that reason I would 
like to check it internally and I will come back when I have something.

{quote}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to