暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Halo数据库软解析介绍

贾桂权 2024-11-25
137

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%。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论