On Tue, 28 Jun 2022 at 23:30, David Marteau via QGIS-Developer
<qgis-developer@lists.osgeo.org> wrote:
>
> Hi,
>
> From bisect-like analysis, I have found the commit that introduces the loss 
> of loading performance:
>
> https://github.com/qgis/QGIS/commit/c6beb62216fcfbfe3ca64283c09117da53800a98
>
> We need more investigation to understand exactly what is causing that 
> regression.

I've proposed a fix at https://github.com/qgis/QGIS/pull/49266, but it
requires testing on server and confirmation that it addresses the
regression.

Thanks!
Nyall



>
> David Marteau
> www.3liz.com
>
> Le 21/06/2022 à 14:45, David Marteau via QGIS-Developer a écrit :
>
> Hi,
>
> Here is a first analysis using QgsRuntimeProfiler outputs
>
> The project is the same in all tests and has been saved with Qgis 3.26.
> This is a first load in each case just after qgis init, so there should be no 
> caching involved.
>
> Output has been filtered to `projectload` profiler group and rows with 
> elapsed time > 0
>
> All builds are official builds and installed from qgis.org packages.
> Tests are run in Docker container with ubuntu 21.04
>
> Total time show a variance of +/- 25% on multiple runs.
>
> ## Qgis 3.26
>
> ### Flags
> * Qgis.ProjectReadFlag.TrustLayerMetadata
> * Qgis.ProjectReadFlag.DontLoad3DViews
> * Qgis.ProjectReadFlag.DontLoadProjectStyles
>
> projectload, Reading project file: 21.0 ms
> projectload, Creating auxiliary storage: 65.0 ms
> projectload, Reading properties: 19.0 ms
> projectload, Reading map layers: 14.0 ms
> -projectload, france_parts: 6.0 ms
> --projectload, Load layer source: 5.0 ms
> ---projectload, Create ogr provider: 3.0 ms
> -projectload, france_parts bordure: 4.0 ms
> --projectload, Load layer source: 4.0 ms
> ---projectload, Create ogr provider: 2.0 ms
> -projectload, france_parts tuilé en cache: 3.0 ms
> --projectload, Load layer source: 3.0 ms
> ---projectload, Create ogr provider: 1.0 ms
> projectload, Storing original layer properties: 2.0 ms
>
> Total time: 152.0 ms
>
> ## Qgis 3.24
>
> ### Flags
> * QgsProject.FlagTrustLayerMetadata
>
> projectload, Reading project file: 5.0 ms
> projectload, Reading properties: 4.0 ms
> projectload, Reading map layers: 4.0 ms
> -projectload, france_parts: 1.0 ms
> --projectload, Load layer source: 1.0 ms
> -projectload, france_parts bordure: 1.0 ms
> --projectload, Load layer source: 1.0 ms
> -projectload, france_parts tuilé en cache: 1.0 ms
> --projectload, Load layer source: 1.0 ms
> projectload, Storing original layer properties: 1.0 ms
> projectload, Updating interface: 1.0 ms
>
> Total time: 21.0 ms
>
> Some remarks:
>
> I Wonder why we have `Creating auxiliary storage` that takes  65.0 ms in Qgis 
> 3.26 and it does not appears in Qgis 3.24:
> I need to figure how auxiliary layers are loaded in Qgis 3.24 (are they 
> loaded lazily ?).
>
> The `Reading project file`, `Reading properties` and `Reading map layers` 
> sections are almost 3 to 4 times slower in Qgis 3.26.
>
> The loading of layers ares also slower in Qgis 3.26 compared to Qgis 3.24.
>
>
>
> Le 21/06/2022 à 12:27, David Marteau a écrit :
>
>
> May be I could use QgsRuntimeProfiler output in first place ?
>
> Le 20/06/2022 à 18:55, Even Rouault a écrit :
>
> Use sysprof or just run under a debugger and interrupt regularly should help 
> you spot in which method(s) most time is spent
>
> Le 20/06/2022 à 18:48, David Marteau via QGIS-Developer a écrit :
>
> I used the following test:
>
> readflags = Qgis.ProjectReadFlags()
> readflags |= 
> Qgis.ProjectReadFlag.TrustLayerMetadata|Qgis.ProjectReadFlag.DontLoad3DViews|Qgis.ProjectReadFlag.DontLoadProjectStyles
>
> prj = QgsProject()
> %timeit -n 1 prj.read(f"{datapath}/france_parts3_26.qgs",readflags)
>
> 105 ms ± 18.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>
> This improve the result  but we are still much higher that the loading time 
> of 3.24: 15ms compared to 105ms
>
>
> Le 20/06/2022 à 18:38, Nyall Dawson a écrit :
>
>
>
> On Mon, 20 June 2022, 11:42 pm David Marteau, <dmart...@3liz.com> wrote:
>>
>> Hi,
>>
>> > You should set the other new read optimisation flags here -- see 
>> > https://github.com/qgis/QGIS/blob/88ebb3f2f513dbce5a775f50e51ea0117f859c65/src/core/qgis.h#L1962
>>
>> These are already available also in 3.24 and we use the   
>> `TrustLayerMetadata` in the above test. For server,  the other flags are not 
>> applicable (Getprint requests need print layouts ).
>>
>> So that mean we are comparing 3.24 to 3.26 with same level of read 
>> optimisation and that does not change the fact that, for that very same 
>> level of read optimisation, project's loading is incredibly  slower in 3.26.
>
>
> You'll need to set the new flags relating to skipping the 3d views and 
> project style loading in order to compare properly. Neither of those things 
> were occurring in 3.24, and both have an associated cost. And neither are 
> relevant for server.
>
> Nyall
>>
>>
>>
>> Le 20/06/2022 à 15:10, Nyall Dawson a écrit :
>>
>>
>>
>> On Mon, 20 June 2022, 9:37 pm David Marteau via QGIS-Developer, 
>> <qgis-developer@lists.osgeo.org> wrote:
>>>
>>> Hi,
>>>
>>> I have noticed a huge drop of performance while testing Qgis server with 
>>> Qgis 3.26, from 10x to 30x slower as usual.
>>>
>>> Trying to reduce the problem I have found a huge increase of time spend 
>>> reading the project in 3.26 compared to 3.24.
>>>
>>> Here some benchmark with very simple project from the test data set. Note: 
>>> the project has been updated with qgis 3.26:
>>>
>>> Qgis 3.24:
>>> ======
>>>
>>> readflags = QgsProject.ReadFlags()
>>> readflags |= QgsProject.FlagTrustLayerMetadata
>>>
>>> prj = QgsProject()
>>>
>>> %timeit -n 1 prj.read(f"{datapath}/france_parts.qgs",readflags)
>>>
>>> > 15.7 ms ± 205 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>
>>> Qgis 3.26:
>>> ======
>>>
>>> readflags = QgsProject.ReadFlags()
>>> readflags |= QgsProject.FlagTrustLayerMetadata
>>
>>
>> You should set the other new read optimisation flags here -- see 
>> https://github.com/qgis/QGIS/blob/88ebb3f2f513dbce5a775f50e51ea0117f859c65/src/core/qgis.h#L1962
>>
>> Nyall
>>
>>> prj = QgsProject()
>>>
>>> %timeit -n 1 prj.read(f"{datapath}/france_parts.qgs",readflags)
>>>
>>> 195 ms ± 44 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>>
>>> There is a factor x10 between Qgis 3.24 et Qgis 3.26 for the exact same 
>>> project.
>>> This has serious impact on requests: landing page catalog request time 
>>> increased from approximatevely 110ms to more than 3.0s with our test data 
>>> set.
>>>
>>>
>>> David Marteau
>>> www.3liz.com
>>>
>>> _______________________________________________
>>> QGIS-Developer mailing list
>>> QGIS-Developer@lists.osgeo.org
>>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
> --
> http://www.spatialys.com
> My software is free, but my time generally not.
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to