【问题标题】:Mapnik: too many "LIMIT 0" queriesMapnik:太多“LIMIT 0”查询
【发布时间】:2016-09-17 06:16:47
【问题描述】:

我有一个包含多个层的 xml 项目文件,其中许多层依次分为 2(低/高)或 3(低/中/高)层,每层覆盖不同的缩放范围。总层数(也考虑细分)为 42。我将 python-mapnik 绑定与 mapnik 3.0.12 结合使用。 好吧,如果我看一下 PostgreSQL 日志,每次我在给定缩放级别请求单个地图图像(简单的静态图像,而不是一系列图块)时,通常只需要 12 个(42 个) 要执行的查询,我总是看到 42 次:

"持续时间:xx.xxx ms 语句:"

后面是查询itsefl的定义,最后加上“LIMIT 0”。 然后我可以找到 12 次这个:

“持续时间:xx.xxx毫秒执行:”

这大约是实际需要执行的 12 个查询。 我想后面有“LIMIT 0”的 42 个查询是“检查查询”,用于分析哪个索引是最好使用的索引,等等……但我想知道是否有办法做到这一点仅针对实际必须一次执行的查询,而不针对 project.xml 文件中的所有查询(层)。

【问题讨论】:

    标签: performance postgresql database-performance mapnik


    【解决方案1】:

    我注意到我的 mapnik 项目文件中有类似的行为(我正在使用 Node.js 绑定)。通过在Datasource 元素中提供extentsrid 参数,我能够减少对数据库的查询次数:

    <Datasource>
        <Parameter name="extent">-180 -90,180 90</Parameter>
        <Parameter name="srid">4326</Parameter>
    </Datasource>
    

    我相信 mapnik 在查询之前执行两个查询以检索要素以确定 SRID 和图层范围。通过在数据源中提前提供这些,mapnik 将不需要执行这些查询。

    【讨论】:

    • 我意识到这是我的错:在我的代码中,我在每次磁贴请求时重复调用 mapnik.load_map(...) 方法,而不是在启动服务器时只调用一次。