当前位置: 首页 > news >正文

2023-11-06 monetdb-事务-insert-delta缓存-分析

摘要:

monetdb在事务处理时, 会将数据写入delta缓存中, 然后在commit时将数据写入wal文件, 随后由控制器决定何时将wal中的数据真正的写入BAT列文件中.

本文从delta缓存入手, 分析monetdb在事务处理中的细节.

SQL:

DML:

create table t1 (a int);

事务DDL:

START TRANSACTION;
insert into t1 values (4);
COMMIT;

trace日志:

mserver启动后第一次执行insert:

ALGO     monetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.transaction_begin
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.exportOperationALGO     monetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.mvc
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.claim
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.append
IO_      gdk/gdk_bbp.c:3156                             getBBPdescriptor     load tmp_550
IO_      gdk/gdk_storage.c:637                          DESCload             DESCload: 05/550
IO_      gdk/gdk_storage.c:536                          GDKload              GDKload: name=05/550.tail, ext=, mode 1
IO_      gdk/gdk_storage.c:558                          GDKload              read(dst 0x7f01e8040cc0, n_expected 12, fd 9) = 12
ALGO     gdk/gdk_bat.c:1039                             BUNappendmulti       tmp_550#3@0[int]P appending 1 values
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.depend
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.affectedRowsALGO     monetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.transaction_commit
IO_      gdk/gdk_bbp.c:3156                             getBBPdescriptor     load tmp_551
IO_      gdk/gdk_storage.c:637                          DESCload             DESCload: 05/551
IO_      gdk/gdk_storage.c:536                          GDKload              GDKload: name=05/551.tail, ext=, mode 1
IO_      gdk/gdk_storage.c:558                          GDKload              read(dst 0x7f01e8037d30, n_expected 4, fd 9) = 4
ALGO     monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.exportOperation

mserver启动后第二次连续执行两次insert:

monetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.transaction_begin
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.exportOperationmonetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.mvc
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.claim
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.append
gdk/gdk_bat.c:1039                             BUNappendmulti       tmp_550#4@0[int]P appending 1 values
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.depend
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.affectedRowsmonetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.mvc
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.claim
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.append
gdk/gdk_bat.c:1039                             BUNappendmulti       tmp_550#5@0[int]P appending 1 values
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.depend
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.affectedRowsmonetdb5/mal/mal_interpreter.c:716             runMALsequence       calling querylog.define
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.transaction_commit
monetdb5/mal/mal_interpreter.c:687             runMALsequence       calling sql.exportOperation

核心处理:

BUNappendmulti

#0  BUNappendmulti (b=0x1a366680, values=0x7f01e803c600, count=1, force=true) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_bat.c:1028
#1  0x00007f0283fb03d6 in delta_append_val (tr=0x7f01e8004540, batp=0x7f027e1f51e8, id=7590, offset=6, i=0x7f01e803c600, cnt=1, storage_type=0x0, tt=6)at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2319
#2  0x00007f0283fb0688 in append_col_execute (tr=0x7f01e8004540, delta=0x7f027e1f51e8, id=7590, offset=6, offsets=0x0, incoming_data=0x7f01e803c600, cnt=1, tt=6, storage_type=0x0)at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2354
#3  0x00007f0283fb0969 in append_col (tr=0x7f01e8004540, c=0x1a571380, offset=6, offsets=0x0, data=0x7f01e803c600, cnt=1, tpe=6)at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2384
#4  0x00007f0283e38a3c in mvc_append_wrap (cntxt=0x237c610, mb=0x7f01e8035660, stk=0x7f01e803c4d0, pci=0x7f01e8045000)at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql.c:1842
#5  0x00007f0297637047 in runMALsequence (cntxt=0x237c610, mb=0x7f01e8035660, startpc=1, stoppc=0, stk=0x7f01e803c4d0, env=0x0, pcicaller=0x0)at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_interpreter.c:688
#6  0x00007f02976357be in runMAL (cntxt=0x237c610, mb=0x7f01e8035660, mbcaller=0x0, env=0x0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_interpreter.c:357
#7  0x00007f0283e5963b in SQLrun (c=0x237c610, m=0x7f01e80168d0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_execute.c:259
#8  0x00007f0283e5af37 in SQLengineIntern (c=0x237c610, be=0x7f01e8036150) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_execute.c:709
#9  0x00007f0283e58505 in SQLengine (c=0x237c610) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_scenario.c:1358
#10 0x00007f02976568c0 in runPhase (c=0x237c610, phase=4) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:453
#11 0x00007f0297656a2a in runScenarioBody (c=0x237c610, once=0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:479
#12 0x00007f0297656c36 in runScenario (c=0x237c610, once=0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:510
#13 0x00007f0297659048 in MSserveClient (c=0x237c610) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_session.c:589
#14 0x00007f02976588c1 in MSscheduleClient (command=0x7f01e8000b70 '\333' <repeats 199 times>, <incomplete sequence \333>..., challenge=0x7f027e1f5ce3 "HJBNRi7c", fin=0x7f01e8002b90, fout=0x7f01f0003e20, protocol=PROTOCOL_9, blocksize=8190) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_session.c:445
#15 0x00007f029771e232 in doChallenge (data=0x7f01f0000b70) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/modules/mal/mal_mapi.c:222
#16 0x00007f0296fcf749 in THRstarter (a=0x7f01f0006310) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_utils.c:1668
#17 0x00007f029704cb43 in thread_starter (arg=0x7f01f0006380) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_system.c:862
#18 0x00007f029658d1ca in start_thread () from /lib64/libpthread.so.0
#19 0x00007f02961f9e73 in clone () from /lib64/libc.so.6

相关文章:

2023-11-06 monetdb-事务-insert-delta缓存-分析

摘要: monetdb在事务处理时, 会将数据写入delta缓存中, 然后在commit时将数据写入wal文件, 随后由控制器决定何时将wal中的数据真正的写入BAT列文件中. 本文从delta缓存入手, 分析monetdb在事务处理中的细节. SQL: DML: create table t1 (a int); 事务DDL: START TRANSACTI…...

ubuntu 22.04 flameshot 截图异常的问题

方法找了好久&#xff0c;终于找到一个有用的 Firstly do not install flameshot from snapstore, install it using apt. Go to /etc/gdm3/custom.confRemove the comment on #WaylandEnablefalse Your custom.conf file should be like this: # GDM configuration storag…...

正点原子嵌入式linux驱动开发——Linux WIFI驱动

WIFI的使用已经很常见了&#xff0c;手机、平板、汽车等等&#xff0c;虽然可以使用有线网络&#xff0c;但是有时候很多设备存在布线困难的情况&#xff0c;此时WIFI就是一个不错的选择。正点原子STM32MP1开发板支持USB和SDIO这两种接口的WIFI&#xff0c;本章就来学习一下如何…...

React中的“状态”(state)和“属性”(props)的区别

在React中&#xff0c;"状态"&#xff08;state&#xff09;和"属性"&#xff08;props&#xff09;是两个重要的概念&#xff0c;它们在组件的生命周期和数据流中扮演着不同的角色。 状态&#xff08;State&#xff09;&#xff1a; 状态是React组件中用…...

棋牌室电脑计时灯控,棋牌室计时灯控安装,佳易王计时计费管理系统软件

棋牌室电脑计时灯控&#xff0c;棋牌室计时灯控安装&#xff0c;佳易王计时计费管理系统软件 棋牌室的灯可以用佳易王计时计费软件来控制开关&#xff0c;当开始计时的时候&#xff0c;软件发送开灯的指令&#xff0c;灯打开&#xff0c;在结账后&#xff0c;软件发送关灯指令…...

P02项目诊断报警组件(学习操作日志记录、单元测试开发)

★ P02项目诊断报警组件 诊断报警组件的主要功能有&#xff1a; 接收、记录硬件设备上报的报警信息。从预先设定的错误码对照表中找到对应的声光报警和蜂鸣器报警策略&#xff0c;结合当前的报警情况对设备下发报警指示。将报警消息发送到消息队列&#xff0c;由其它组件发送…...

【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 T32MARM 介绍Trace32 .t32 和 .cmm 差异veloce 下启动TRACE321.1.3 TAP 状态机操作命令1.1.3.1 IDCODE&#xff08;Identification Code&#xff09;寄存器 介绍 T32MARM 介绍 T32MARM 是 Lauterbach 的 Trace32 …...

服务器硬件有哪些组成

服务器是由处理器、硬盘、内存、显卡、主板、网卡等组成&#xff0c;今天小编带大家了解一下服务器有哪些硬件吧&#xff01; 1.最重要的当然就是处理器了&#xff0c;处理器就相当于是服务器的大脑&#xff0c;负责执行各种运算和指令&#xff0c;例如运行程序或者处理数据&am…...

【Git】Git基础命令操作速记

【Git】Git基础命令操作速记 文章目录 【Git】Git基础命令操作速记1. 初始化1.1 设置用户名和邮箱1.2 初始化仓库 2. 基础命令2.1 add和commit2.2 reset2.3 查看日志2.4 删除/找回本地仓库文件2.5 找回暂存区文件2.6 diff命令(找不同) 3. 分支命令3.1 查看分支3.2 创建分支3.3 …...

使用CDN有什么好处?

近年来&#xff0c;随着互联网的快速发展&#xff0c;越来越多的企业开始发展互联网业务&#xff0c;出现了各种各样的网站和web程序&#xff0c;互联网改变了人们的生活习惯与消费行为&#xff0c;人们也是越来越依赖网络&#xff0c;而这些改变让互联网产业得到更加迅速发展。…...

11.7加减计数器,可置位~,数字钟分秒,串转并,串累加转并,24位串并128,流水乘法器,一些乘法器

信号发生器 方波&#xff0c;就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加&#xff0c;Mode为0则减&#xff1b;只要为0就输出zero 这样会出问题&#xff0c;因为要求是十进制&#xff0c;但是这里并没有考虑到9之后怎么办&a…...

【模型推理优化学习笔记】CUDA加速矩阵乘计算

矩阵乘可以利用gpu多线程并行的特点进行加速计算&#xff0c;但是传统简单的方法需要多次读取数据到寄存器中&#xff0c;增加耗时&#xff0c;因此利用gpu的共享内存可以被一个block内的所有线程访问到的特性&#xff0c;结合tiling技术进行加速计算。 理论部分不解释了&#…...

第三届 “鹏城杯”(初赛)

第三届 “鹏城杯”&#xff08;初赛&#xff09; WEB Web-web1 反序列化tostring打Hack类 Payload:O%3A1%3A%22H%22%3A1%3A%7Bs%3A8%3A%22username%22%3BO%3A6%3A%22Hacker%22%3A2%3A%7Bs%3A11%3A%22%00Hacker%00exp%22%3BN%3Bs%3A11%3A%22%00Hacker%00cmd%22%3BN%3B%7D%7D…...

React Hooks为什么要在顶层使用?

为什么必须在函数顶层使用hooks&#xff1f; 使用过 hooks 的小伙伴应该都会发现&#xff0c;hooks只能在函数式组件的顶层使用&#xff0c;不能在循环&#xff0c;条件或嵌套函数中调用 Hook。 为什么呢&#xff1f; 查阅了很多答案&#xff0c;总结如下&#xff1a; hook…...

Vscode Vim自动切换

在VsCode里安装了Vim插件&#xff0c;由于Vim插件存在Normal和Insert两种模式&#xff0c;会需要经常性的按shift切换中英文&#xff0c;太过麻烦&#xff0c;本文介绍一下如何通过im-select来解决。 首先先确保自己的电脑里装有英文语言包&#xff0c;win10系统下可以使用Win…...

C语言初学1:详解#include <stdio.h>

一、概念 #include <stdio.h> 称为编译预处理命令&#xff0c;它在告诉C编译器在编译时包含stdio.h文件&#xff0c;如果在代码中&#xff0c;调用了这个头文件中的函数或者宏定义&#xff0c;则需引用该头文件。 二、作用 stdio.h是c语言中的标准输入输出的头文件&am…...

5 Tensorflow图像识别(下)模型构建

上一篇&#xff1a;4 Tensorflow图像识别模型——数据预处理-CSDN博客 1、数据集标签 上一篇介绍了图像识别的数据预处理&#xff0c;下面是完整的代码&#xff1a; import os import tensorflow as tf# 获取训练集和验证集目录 train_dir os.path.join(cats_and_dogs_filter…...

OpenCV 图像复制和图像区域读写

图像复制 共享数据, 使用 new Mat(srcMat, ...) 和 newMatsrcMat 生成新的Mat都和原Mat共享数据, 也就是说如果修改某一Mat,其他Mat也会随之改变复制全新的Mat, 使用CopyTo() 和 Clone() 方法将生成一个全新的Mat, 新Mat和原Mat不共享数据. 图像区域和点的读写 区域读取: 通过s…...

【分布式事务】初步探索分布式事务的概率和理论,初识分布式事的解决方案 Seata,TC 服务的部署以及微服务集成 Seata

文章目录 一、分布式服务案例1.1 分布式服务 demo1.2 演示分布式事务问题 二、分布式事务的概念和理论2.1 什么是分布式事务2.2 CAP 定理2.3 BASE 理论2.4 分布式事务模型 三、分布式事务解决方案 —— Seata3.1 什么是 Seata3.2 Seata 的架构3.3 Seata 的四种分布式事务解决方…...

es6过滤对象里面指定的不要的值filter过滤

//过滤出需要的值this.dataItemTypeSelectOption response.data.filter(ele > ele.dictValue tree||ele.dictValue float4);//过滤不需要的值this.dataItemTypeSelectOption response.data.filter((item) > {return item.dictValue ! "float4"&&it…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...