Halo Tech

Halo数据库软解析介绍

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

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

Image

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

Image

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

Image

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

Image

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

prepare阶段:

Image

execute阶段:

Image

将查询树泛化:

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

Image

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

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

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

Image

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