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

海量智库第16期 | Vastbase查询加速器,激发数据库潜在性能

海量数据 2023-08-07
292


背景



一个查询语句从执行到返回结果集到客户端,经历了解析、计划、执行等复杂过程,对于使用大量数据进行复杂运算的查询语句,执行时间受到IO、计算、网络传输等各种因素影响,导致无法快速的获取结果。通常,使用类似Redis 的内存数据结构存储系统来减轻业务系统对数据库的压力。


当一个查询语句使用的数据量越大,计算越复杂,其需要的相对执行时间就越长,若此查询语句相同且被访问的数据在多次查询中并未改变,且查询的结果集因为数据没有变更不会产生变化,那么在非首次查询后的每一次查询若无需进行重复的扫描磁盘、计算等操作,必然节省大量时间。


实现查询缓存可以避免重复执行相同的查询语句,从而减少数据库的负载和响应时间。当数据库中的数据发生变化时,查询缓存会自动失效,从而保证查询结果的正确性。

架构



客户端传入的SQL经过词法解析,语义解析,查询优化之后,如果能命中缓存,则直接用缓存数据返回给客户端,如果不能命中缓存,则正常执行各种节点,计算获取数据返回给客户端。


实现



限制


以下场景不能使用或新建查询缓存:


使用变量作为查询条件的SELECT语句

子查询的SELECT语句

在函数、存储过程和存储过程中执行的SELECT语句

查询系统表的SELECT语句;查询临时表的SELECT语句

SELECT ... FOR UPDATE语句

SELECT语句包含当前时间或日期相关的函数,包括:SYSDATE()、CURRENT_DATE()、CURRENT_TIMESTAMP()、UNIX_TIMESTAMP()


新建


当开启查询缓存后,没有命中且不包含限制条件的SQL语句可以新建缓存。通过查询缓存节点,将算子返回的元组依次插入缓存项中,并让缓存生效。

使用

当开启查询缓存后,如果一个SQL能够命中缓存,且缓存生效,就能直接在查询缓存节点使用缓存的数据返回给客户端,否则正常执行其他节点来计算数据。

失效


当缓存的数据与实际的数据不一致的时候,缓存数据便不再正确,需要进行失效。对表结构或者对表数据进行变更会造成这种不一致的现象,常见的操作有:


1.dml操作:

insert/delete/update等

2. ddl操作:

add column/delete column/rename column等


所以需要在这些操作之后,对相关表的已经缓存的数据进行失效,失效的缓存不再能够被使用,对正在使用缓存的查询不受影响。


新建、使用和失效的整体流程图如下:


示例



01

机动车检验标志电子化

create table t1 (id int, name text)

02

构造数据,100w条

insert into t1 select a.*, 'Mike' from generate_series(1, 1000000) a

03

第一次查询,用时283.807ms

04

查看缓存情况

05

第二次查询,

用时0.843ms,耗时缩短336倍

06

插入一条数据,缓存失效


稿件提供 | 研发部门

图文编辑|程筱淇

内容审核|市场营销部


于海量数据

北京海量数据技术股份有限公司(股票代码:603138.SH)成立于2007年,是国内首家以数据库为主营业务的主板上市企业。公司十余年来秉承“专注做好数据库”的初心,始终致力于数据库产品的研发、销售和服务。核心产品海量数据库Vastbase系列、数据库一体机Vastcube系列,全栈国产化,应用满足度高,目前广泛应用于政务、制造、金融、通信、能源、交通等多个重点行业,已成为国产企业级数据库的首选之一。



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

评论