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 abalanceFROM pgbench_accounts ----------> FROM pgbench_accountsWHERE 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




