暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Halo数据库软解析介绍

Halo Tech 2024-11-26
95

SQL的硬解析带来的巨大开销:

    SQL的硬解析是指数据库系统在执行SQL查询之前对SQL语句进行解析、编译和优化的过程。硬解析过程包括以下几个步骤:语法语义解析、编译、优化和执行。硬解析的过程可能会消耗一定的时间和系统资源,特别是当系统中存在大量不同的SQL查询时。


    Explan以下sql, 观察计划和执行的时间:
    SELECT abalance FROM pgbench_accounts WHERE aid = 1000;

        同样的SQL命令,我们试着将语句改写成PREPARE,EXECUTE:

      EXPALIN EXECUTE, 观察计划和执行的时间

          上述实验可以看出,execute效率高,当我们将查询泛化成一般prepare ,有了缓存,可以大大减少硬解析造成的性能开销,Halo数据库中,我们以此思路引入SQL软解析的能力。

      prepare阶段:

      execute阶段:

      将查询树泛化:

        SELECT abalance                       SELECT abalance
        FROM pgbench_accounts    ---------->  FROM pgbench_accounts
        WHERE aid = 1000; WHERE aid = $1; $1= 1000

        软解析模式的配置参数为:statement_sharing 默认值为none,可以会话里set。缓存可以提高解析效率和整体的查询性能,但是缓存也不能无限扩大,Halo数据库同时新增参数soft_statement_max(设置需重启)设置软解析prepare最大缓存数。当缓存达到设置的临界值时,动态更新缓存内容,置换调用频率最少的prepare。

        引入SQL软解析的能力后的性能表现:

          pgbench -r -j16 -c16 -T60 -P5 -S -p 5492 bench1

              使用pgbench
          工具在数据库bench1
          上进行只读事务测试,使用16个线程和16个客户端连接,并在60秒内运行基准测试,预热时间为5秒。连接到端口号5492的 Halo数据库。软解析开启后,性能提高接近30%。


          文章转载自Halo Tech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论