- 博客(685)
- 问答 (1)
- 收藏
- 关注
原创 不止湖仓一体!Databricks Lakebase 湖库一体,解锁 AI 原生统一数据底座
不止湖仓一体!Databricks Lakebase 湖库一体,解锁 AI 原生统一数据底座
2026-06-26 22:49:10
396
原创 DuckDB性能飞升密码:memcpy、memcmp和memset的底层魔法
这些直接操作内存字节的基础函数,串联起了数据拷贝、比较、初始化的全流程,每一个字节级的操作效率提升,最终都会在大规模数据处理中被放大为质变级的性能飞跃。这种调用时,它不会生成一个真正的函数调用,而是直接生成。对这三个函数进行了改造,让其可以最大能力自动编译优化。时其入参字符串大小值为常量。使用模板函数进行内联,当字符串长度大于。字节长度字符串拷贝进行封装,让调用。却对性能有着至关重要的作用。的入参变成常量,超过。
2026-05-22 22:09:35
81
原创 SQL Sever Pragmatic Bitmap过滤技术解析
推送到探测端,下沉到外表侧的扫描节点;外表扫描后,将其连接键值利用。三大国际顶级数据库会议同级别的数据库会议,关注数据库创新性。时常用的一项优化技术,通常使用内表也就是构建。下是一个复杂算子子树,无法下沉到指定的。条件的数据,减少数据传输量和探测次数。算子的发送端,让其在发送数据前先通过。上,提前过滤掉不满足条件的值后再构建。,假设三表之间都有连接键关联,那么。,然后顺着执行计划树向探测端下推;算子,顺着执行计划树也可以将。进行过滤,提前过滤掉不满足。条件的记录,减少探测次数。进行过滤,提前过滤掉不满足。
2026-05-15 23:29:51
401
原创 从Hydra到storage_engine:PostgreSQL列存引擎的性能跃迁与技术进化
维护一个列缓存,存储已解压的列数据块。当同一条带区域被多次访问时(例如嵌套循环、重复执行计划或自连接),系统直接从缓存中提供已解压的数据,无需重新读取文件或再次进行解压操作。这两层剪枝机制协同工作:针对大型且排序良好的表的查询,通常会在访问之前就直接排除整个条带,然后在剩余条带中进一步剪枝数据块组,从而即使在没有索引的情况下也能实现极低的。该插件实现了列级别压缩和行级别压缩,面向列的压缩支持并行扫描和向量化执行,行级别压缩支持并行扫描。:开启索引扫描,希望获得具备点查询速度的列式压缩,而非全表扫描。
2026-05-03 22:24:26
697
4
原创 揭秘OLAP数据库预计算技术
从另一方面讲,基于时间点的任务应用场景比如备份,这个动作比较重,仅允许执行一次,否则会造成环境负载问题。比如发送刷新命令前需要构建异步连接,发送连接命令后,该连接不一定马上成功,如果同步等待,就阻塞了其他任务的执行。所以这里切换任务后就立即返回,下次循环进来的时候,连接可能就构建好了,正好可以进入下一步动作。,该状态下会检查对应任务是否活跃,如果不活跃就将他删除,如果可以启动,则将它的。设置刷新任务,并按照刷新任务对动态表进行刷新。分钟,导致时差周期计算错误,本次任务暂停一次,再过一分钟时,即。
2026-05-02 15:50:30
691
原创 揭秘openGauss向量化执行引擎代价模型
代价模型如下图所示,它基于一个基础的代价参数体系,在此基础上计算表达式计算代价、扫描代价然后层层递进计算整个执行计划的向量化代价,根据向量化计划代价和普通计划代价选择合适的执行计划。的向量化执行引擎针对列存,生成执行计划后根据配置项是否开启直接决定是否将执行计划转换成向量化执行计划来执行。)算子进行向量化代价计算,其他算子认为和普通算子的代价一样。当然,该代价模型针对的是有行存表的情况,如果都是列存表,则不进行该代价计算。中遍历执行计划前,会将行式引擎的代价和向量引擎的代价设置成。向量化执行引擎代价模型。
2026-04-05 22:29:23
474
原创 分布式数据库怎么做到高可用
分布式数据库有多个数据节点,为了保证高可用,都会对该数据节点加一个或多个备,以免该数据节点挂掉时备可以提升为主继续为集群提供服务,更高级的用法,可以将一部分读任务下发给备机,进行负载均衡,减小主数据节点的压力。的故障检测,且不能将节点自动拉起,在主备切换之后,即使原来的主恢复了,依然不能自动恢复到主备同步的状态,需要手动调用。的连接,若连接已存在,就不必再进行连接,否则需要构建新连接。)如果没有探测成功,就表示超时了,记录下超时次数,通过。可以看出,这些状态可以分为三组,每组都有四个状态。
2026-03-15 21:55:26
591
原创 PgSQL vs InnoDB脏页刷脏对比
开始恢复时,需要找到一个基准页,否则就是在一个非法页基础上进行恢复,即使日志全部回放了,数据也不一致。两者的脏页刷写的区别是什么,优劣势是什么,本文进行详细介绍。后面的时间点数据页开始恢复,这样恢复后也是无效的数据页。,若写失败比如断电,那么脏页就不会刷写,脏页对应磁盘上的数据页也是完整的。中将这一页恢复出来作为完整的基准数据页,在这个数据页基础上回放。写成功,刷脏页的时候断电,那么该脏页在系统表空间的。后首次修改该数据页时,会将该数据页整个内容写到。回放出来,然后基于该完整的数据页继续回放后续的。
2026-03-01 22:15:16
419
原创 PgSQL的外连接选择率计算
如果在左表则可以下推下去,因为左表下推下去和不下推的结果一样,下推下去可以提前过滤左表数据,减少探测次数。的位置估算其在表中的相对位置,从而计算选择率,忽略了死元组行指针的影响,因为缺乏相关信息。表进行连接,发现没有匹配的值,但是因为是左连接,所以左表的值需要全部输出,右表以。选择率,此时需要保证输出行数至少是外表行数,然后再乘以过滤选择率,以此结果作为。函数来进行计算,而该函数确保变量在左侧,如果不是,则需要交换操作符并调整。因为是左连接,按照他的语义,除了匹配的值外,不匹配时,右表需要以。
2026-02-22 22:38:30
425
原创 PgSQL的等值inner join选择率
的冷数据频率乘积,从而得到两个表的选择率结果。这样通过将冷元组和热元组分离,提高数据库连接选择率计算精度,从而提高连接基数估计,有利于给出最佳的连接顺序,从而提升复杂查询的性能。)来计算不同连接类型的选择率,并在路径生成与成本估算中使用这些值。从而选择最优连接顺序与算法的核心。取两侧估计的较小值作为最终选择率,以保守估计。体现将元组分为热元组和冷元组,分别结算表。列表,用操作符函数逐对比较,找出匹配的。估算等值连接(内连接)选择率的函数是。从两侧视角分别估算总选择率:匹配。上面计算出选择率后,返回到。
2026-02-19 23:15:56
449
原创 OLAP数据库HashJoin性能优化揭秘
众所周知,面向行式的数据库执行模型都是基于火山模型,即每次迭代执行仅处理一个元组,为减少函数调用次数和减少。是多列,就需要提取多列值进行比较,这种本质上是随机访问,行存储的局部性优势更明显;如果是列式,由于需要多列值,增加了缓存未命中次数。进行比较,将匹配的内表值位置和外部上分布使用一个数组来标记,够一个。,向量化执行引擎就登场了,一个迭代可以处理一批数据。另外,数据以行的形式存储,也不利于。模式,这种模式专门针对列式存储,以列的形式管理。当然,他也是通过链表来管理。类似,数据也是以行的形式组织,通过。
2026-02-17 22:29:18
496
原创 2025pgconf - 针对现代CPU编写高效C代码(并应用于PostgreSQL)
可以通过硬件或软件实现,基于硬件的预取通常是通过在处理器中具有专用硬件机制来实现的,该机制监视执行程序请求的指令或数据流,根据该流识别程序可能需要的接下来的几个元素,并预取到处理器的缓存中。反向分支是指目标地址低于其自身地址的分支。这种技术可以帮助提高循环的预测精度,循环通常是反向分支,并且更常被采用。可执行的微操作,并放到微操作缓存中,以便后面不必每次都解码。指令解码位置时,问下分支预测器,预测下个执行的指令是下面的分支:也就是预测内存。:是一个关键寄存器,存储下一个将要执行的指令在内存中的地址,确保。
2026-02-15 08:41:31
388
原创 GreenPlum/Cloudberry UDP数据连接及接收缓存
有多少进程,本进程需要向这么多进程发送数据。为每个父端进程创建发送连接,连接的。接收,发送缓存和接收缓存有多大等等这些问题都需要了解,才能帮助。和端口,从而知晓数据向哪里发送,接收端接收到数据后向哪里回复。在复杂的环境中调优接收队列长度等配置项,从而达到最优性能。连接什么时候构建以及他们接收缓存和发送缓存是如何构建的。不需要设置,接收数据后才会将对应发送端的。之间进行数据发送和接收。每个连接都有发送缓存和接收缓存,由。就需要创建对应接收连接结构,若有父。进程创建对应的接收连接,同时连接的。
2026-01-17 23:19:37
460
原创 GPDB/Cloudberry的有序包和乱序包
pkt_q_head到pkt_q_tail-1的连续槽位都是连续包,它的数量为pkt_q_size,队列长度减去该值就是该队列还能接收包数量的容量。假如前几个包都是乱序包,本次接收的是顺序包,正好可以放到tail位置,此时接收后需要更新接收端的seq号:conn->conn_info.seq++和容量大小:conn->pkt_q_size++;接收端接收到乱序包后,回的ack结构:其中seq为该乱序包的seq,extraSeq为接收端连续的最大包的seq,第2部分就是连续最大包后未接收到的包的seq。
2026-01-02 14:33:16
441
原创 openGauss NUMA优化
NUMA节点分组,每个节点使用本地锁组,当不同NUMA节点线程并发时,都需要写入WAL BUFFER,此时就会申请不同锁,他们都可以获取到,都可以向WAL buffer插入,此时顺序性如何保证。leader线程将组内所有线程的WAL日志遍历一遍,得到需要的空间大小,将该组所有WAL依次写入WAL BUFFER中,每个线程得到各自的不同LSN。对称多处理架构如下图所示,所有核心共用一个总线,一致地访问内存,所有处理器地位平等。节点的线程使用相同锁,锁竞争相对减少,这样就不会陷入原子操作的。
2026-01-01 00:00:24
564
转载 联机数据库的未来:协程和异步编程
在开发的每个阶段,我们必须仔细评估每种协程实现的可用性、成熟度和固有权衡。然而,它们的采用需要精心的工程和周密的设计。考虑一个场景:查询持有写锁,将其指针存储在协程栈中,然后让出。只有在确认资源存活的情况下,恢复的协程才能继续使用它们。协程是一个古老的概念,但直到最近才在主流编程语言中普及并实现标准化。:如果协程在执行过程中被阻塞,整个工作线程将被阻塞,绑定到该线程的所有其他协程也无法继续执行。,晨章数据将数据库内核解耦,通过对不同数据库共有功能的抽象,以一种模块化的方式,建立标准化。
2025-11-28 22:59:52
133
原创 二探PgSQL18的异步IO
至于放到提交队列的IO请求,则由pgaio_worker_choose_idle选择一个空闲的异步io worker进程,通过SetLatch该进程的latch通知对应io worker进程唤醒。将IO拆分成iovcnt个,并计算出读的起使偏移seekpos,然后调用下一步的函数进行填充。io_worker_control的idle_worker_mask可以认为是一个bitmap,标记workers[]已使用的所有槽,也就是将异步IO请求放到对应的槽位上(对应到异步IO worker进程)处理异步IO。
2025-10-10 22:36:56
483
1
原创 初探PgSQL异步IO
stream->oldest_buffer_index处开始取内存数据页(前面已经发起了一个异步批量IO,已经讲数据页pin住了),ios[oldest_io_index].buffer_index == oldest_buffer_index时表示该页所处的批次IO还未完成,则等待IO完成。IO 接口,libaio仅支持直接 IO(O_DIRECT,绕过页缓存),不适合依赖页缓存的场景(如普通文件读写),且接口设计复杂,支持的 IO 操作类型有限(如。,如果相邻,则可以合并,积攒起来,继续检查下一页。
2025-10-03 23:06:25
624
原创 初探PgSQL18的异步IO
stream->oldest_buffer_index处开始取内存数据页(前面已经发起了一个异步批量IO,已经讲数据页pin住了),ios[oldest_io_index].buffer_index == oldest_buffer_index时表示该页所处的批次IO还未完成,则等待IO完成。IO 接口,libaio仅支持直接 IO(O_DIRECT,绕过页缓存),不适合依赖页缓存的场景(如普通文件读写),且接口设计复杂,支持的 IO 操作类型有限(如。,如果相邻,则可以合并,积攒起来,继续检查下一页。
2025-10-03 23:06:25
436
原创 还在等什么?赶紧使用协程来处理异步IO
比如某个线程在进行函数调用时,线程上的栈会记录这个函数的状态,比如参数、局部变量等,通过移动栈顶指针完成。的过程中,取到内表值,外表的连接字段建立了索引,那么就可以通过索引对这个值进行探测。对于在内存的块,协程同步处理里面的。尚未完成,当前协程会挂起(保存状态并让出线程控制权),但不会阻塞线程,该线程可以执行其他协程,它不会立即执行。时,也会移动栈顶指针,在线程栈分配空间,并将堆上分配的存储的协程状态拷贝到线程栈空间。协程对象执行该协程),如果该协程挂起了,就将该协程句柄保存起来,然后将当前状态。
2025-09-13 22:04:59
653
原创 <span class=“js_title_inner“>还在等什么?赶紧使用协程来处理异步IO</span>
比如某个线程在进行函数调用时,线程上的栈会记录这个函数的状态,比如参数、局部变量等,通过移动栈顶指针完成。的过程中,取到内表值,外表的连接字段建立了索引,那么就可以通过索引对这个值进行探测。对于在内存的块,协程同步处理里面的。尚未完成,当前协程会挂起(保存状态并让出线程控制权),但不会阻塞线程,该线程可以执行其他协程,它不会立即执行。时,也会移动栈顶指针,在线程栈分配空间,并将堆上分配的存储的协程状态拷贝到线程栈空间。协程对象执行该协程),如果该协程挂起了,就将该协程句柄保存起来,然后将当前状态。
2025-09-13 22:04:59
893
原创 CloudberryDB | 第5期 | 执行器算子ShareInputScan
同一个进程时消费者和生产者不会并发访问数据,此时消费者和生产者是同一个人。生产者将数据准备好后,作为消费者角色就可以从。的共享内存中进行通信,从而到磁盘临时文件中读取,继而完成数据的共享。1、ShareInputScan与ShareInputScanState。链表中,以便生产者准备好后可以唤醒该进程,然后就会返回。子查询的执行计划节点状态树,注意这个是最底层的。时,可以在同一个进程中进行共享,那么不同。链表取出等待的消费者的进程序号,然后通过。中取数据的,在优化器中会将消费这的。
2025-08-01 22:16:37
899
原创 CMU-15-721(2024.Fall系列)解读 | 架构感知的查询处理
段内偏移”,访问内存时访问的是真实的物理内存,而且段式访问针对的是连续的物理地址。在内存中存放着页表,里面有每个页的虚拟地址与物理地址的映射,当然需要进行一些算法的转换,这就比较麻烦。为解决这种问题,借助分页机制,将线性地址和物理地址解绑,让线性地址连续,物理地址可以不连续,如此就可以分别在。缓存,存储虚拟地址和物理地址的映射,无需复杂的算法直接得到对应的物理地址。注意数据驱动的方向,他和火山模型是相反的,从底层向上进行驱动,也就是。就放不下超出页的逻辑地址到物理地址的映射了,造成严重的。
2025-07-06 10:18:24
1181
原创 PgSQL内核特性 | Brin索引
加载对应页,进行顺序扫描,再次进行下条件判断。时,如果该表特别大,那么就需要顺序扫描表的所有数据然后进行过滤,或者扫描所有数据进行。当然这对于一定规则,比如有序或者较为有序的存储效果尤为明显,否则如果过滤的。中增加了最大值和最小值的统计信息,这样就方便进行过滤,提前将不满足条件的列存数据。范围内的最大值和最小值,判断条件的值是否在这个范围内,如果在则将该。页存储表数据页一个范围内的最大值最小值构成的元组。算子,该算子进行索引扫描,根据过滤条件,扫描。页的顺序,真是这样吗?页满需要扩展的时候,需要后面的。
2025-06-28 22:43:33
752
原创 PgSQL内核代码阅读|查询的两种实现方式
算子,他是内核内部扫描系统表的一种方式,他将过滤下推到了存储引擎层,在表访问方法处完成过滤,仅将满足条件的元组输出。进行过滤表达式计算,将不满足条件的值丢掉,继续拉取下一条元组;将满足条件的元组继续向上层算子推送,或者无父算子时,直接向客服端发送。条件的顺序扫描查询,他会从存储加载数据,然后一条一条的从页中读取数据,并将其返回给。对于系统表还有另一种查询方式,即使不经过索引,也可以通过。如上图所示,对于普通的顺序扫描,直接在存储引擎层也就是。中,从而在存储层就将值过滤掉,仅向。查询用户表时,针对带有。
2025-06-15 20:02:09
419
转载 读论文看数据库发展:通信成为OLTP新瓶颈
系统通信,开销会变得更高,回到昂贵通信的原点。本文对这些隔离开销进行了很好的细分,并解释了为什么我们应该关心高性能。其余部分扩展了这一关键发现,并展示了存储过程隔离的开销。当存储过程在隔离的环境中执行时,如。,主要使用存储过程作为事务负载。与数据库的典型交互将涉及客户端调用预编译的。)探索具有复制和分布式事务的分布式数据库,他们可能具有更高的网络开销;)更好的内核旁路和数据库系统专用网络栈;事务性负载要花费更多事件处理事务。如上图所示,可以看到现代的。)网络的成本有多恐怖,或容器,并使用网络(如。
2025-06-02 22:39:21
195
原创 PgSQL的操作符、操作符类及操作符族
可以为一个数据类型的同一个索引定义多个操作符类,最常用的一个被标记为默认操作符类,作为整个类型在一个索引访问方法下的默认选择。对于一个具体的数据类型,如果要能够正常使用索引,除了需要有对应的比较操作符外,还需要操作符类等信息。一个操作符类必须属于一个操作符族,创建操作符类的时候如果没有指定则会默认创建一个同名的操作符族。的关系是:操作符类中的操作符对应表访问方法的具体策略,操作符的函数对应表访问方法的。创建索引时指定使用的操作符类,判断是否可以走索引时使用操作符所在的操作符类。算数操作符:加减乘除等;
2025-06-02 17:37:41
622
原创 跟着论文学习图数据库 | ByteGraph
默认,对于同一个起点,采用边上的属性(时间戳)作为主键索引,也可以支持其他元素(终点、其他属性)来构建二级索引。,先找到我到他的一跳邻居,然后依次让一跳邻居找他的二跳邻居,看有多少人当中有他。另外一种方式:找到我的一跳邻居后,找他的一跳入住邻居,然后依次做一个。保存一个起点的所有边,局部性很好,但它的写放到会很大。跳领域的查询时,涉及到大量的随机读写,数据的局部性就没有了,性能退化很大。:基于一个属性值,能查到当前在整个图里面,具有特定属性的所有点的。实例会缓存最近查询的结果,同样的查询避免冗余处理。
2025-04-13 11:45:58
1058
原创 跟着论文学图数据库 | galaxybase
中部署了日志结构邻接表用于存储点和边数据,实现无索引邻接,从而方便图遍历和从磁盘上顺序读写。(日志结构邻接表),将点和表作为邻接表,并存储多版本数据,最后将数据批量写回磁盘;即使对原始数据不太了解,可以利用默认或者自定义算法分析图数据,为每个点插入何使的。邻接表的方式提升了批量数据读比如执行图遍历查询或者指定类型的所有点的性能;进行分布,并将对应边存储在一起(这里指的是放在同一个存储节点上)。分布在各个存储节点上,每个图的分片在单个存储节点上形成一个。)形式存储,数据有序组织,最坏情况下的读时间复杂度为。
2025-04-04 11:46:46
623
原创 CloudberryDB | 第4期 | 角色管理实现机制解读
判断角色是否存在,若不存在则提示报错推出,否则进行相应的权限判断执行者是否有权限更改该角色的属性;角色是拥有数据库对象和权限的实体,在不同环境中角色可以是一个用户、一个组或者两者都有,本节介绍角色的创建、修改、删除和权限授予与回收。而创建角色和组时,若没有角色属性参数设置,则。删除所有涉及删除角色的元组,当然还会删除该角色在。,那么被加入的成员角色还可以将其他角色加入父角色。链表的角色,检查该角色是否存在,若不存在则根据。,依次提取要修改的角色属性;也可以调整角色的成员关系,结构体中的。
2025-03-14 22:12:13
939
原创 CloudBerryDB | 第3期 | 词法解析与语法解析(2)
CloudberryDB |第3期| 词法解析与语法解析(2)本文接上文,介绍词法解析逻辑的流程。1、词法解析逻辑1)kwlist.h通过gen_keywordlist.pl脚本生成kwlist_d.h头文件,里面定义了ScanKeywords_kw_string[]、ScanKeywords_kw_offsets[]数组,并定义了ScanKeywords结构体。其中ScanKeywords_...
2025-03-01 22:48:40
702
原创 CloudBerryDB | 第3期 | 词法解析与语法解析(1)
CloudberryDB |第3期| 词法解析与语法解析(1)CloudberryDB基于PostgreSQL,这块原理和PG一样,都是利用flex和yacc进行词法解析和语法解析生成语法树,再经语义分析生成逻辑执行计划,以供优化器进行优化生成最终的物理执行计划。1、词法分析词法分析主要识别一个SQL中的关键字、标识符、操作符、常量和终结符,划分成多个不同的token。名字词性说明关键字key...
2025-02-23 22:20:12
1003
原创 CloudBerryDB | 第2期 | 行列混合存储引擎
CloudBerryDB |第2期|行列混合存储引擎CloudBerryDB(Greenplum的接棒者)的行列混合存储引擎PAX多种encoding/compress算法、MVCC、XLOG以及VACUUM(目前正在做),也支持统计信息和稀疏过滤,另外还支持向量化执行器。当然它的向量化执行器目前还为开源,据hashdata老师讲,PAX计划明年Q1开源。这里的统计信息大致指一个block里...
2025-02-02 20:55:19
1156
原创 PostgreSQL图插件AGE
PostgreSQL图插件AGEApache AGE是PostgreSQL的一个图插件,作为Apache的一个顶级项目目前备受关注。AGE是A Graph Extension的缩写,支持openCypher语言,本文关注下它的基础架构。1、AGE中涉及的几个系统表AGE中涉及几个重要的系统表:1)ag_graph,用于存储所有的图schema,相当于每创建一个图都有一个图名字,这个系统表就存储所有...
2025-01-25 13:01:44
1231
2
原创 数据库执行引擎性能黑科技
数据库执行引擎性能黑科技现在业界OLAP数据库中,包括商业数据库和开源数据库,都在执行引擎这块做了很多黑科技,使得执行性能大大提高。比如向量化执行引擎、push-based pipeline执行引擎、JIT和向量化结合等等,本文我们不关注整体的实现以及NVM、GPU、FPGA等新硬件方面的提速,而关注具体性能黑科技的细节。1、clickhouse中向量化执行引擎中使用的手段1)大量使用instri...
2025-01-01 17:05:03
812
转载 阵容发布&议程官宣!第七届中国PostgreSQL数据库生态大会 开票倒计时!
会议信息时间:2025年1月4日地点:上海·南京路·上海国际饭店9楼国际厅形式:现场参会,无线上直播嘉宾阵容详细议程免费注册会议下方扫码常见问题&参会指南01 为何没有直播?我们认为,现场交流的独特价值无法通过线上形式替代。因此,在筹备过程中,我们将重点放在优化现场体验上,确保与会者能参与4个专题研讨会,并与其他专业人士建立宝贵的联系。02 报名...
2024-12-31 20:03:07
206
原创 GPDB EXPLAIN ANALYZ比直接执行SQL慢?
自从GPDB闭源后,HashData接手举起了GPDB开源的大旗,由GPDB衍生而来的CloudberryDB于近期加入了Apache软件基金会孵化器,给GPDB开源社区带来了热度和活力。昨天在CC群里看到GPDB中EXPLAIN ANALYZ比直接执行SQL慢的讨论。一般情况下,EXPLAIN ANALYZE由于不会向客户端输出元组,没有网络传输代价和IO转换代价(除非指定了SERIALIZE)...
2024-12-01 21:46:06
858
原创 PgSQL即时编译JIT | 第1期 | JIT初识
PgSQL即时编译JIT | 第1期 | JIT初识JIT是Just-In-Time的缩写,也就是说程序在执行的时候生成可以执行的代码,然后执行它。在介绍JIT之前,需要说下两种执行方式:解释执行和编译执行。其中解释执行是通过解释器,将代码逐条翻译成机器码;而编译执行是提前翻译成机器码。编译执行又分为动态编译和静态编译,其中动态编译指在运行时进行编译,与之相对的就是静态编译。JIT编译就是动态编译...
2024-11-17 18:34:12
1151
空空如也
innodb插入意向锁如何使用
2015-06-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅