Oracle中多版本控制的例子(MVCC)

04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索 本文将重点探讨Oracle的多版本并发控制(MVCC)、锁与闩锁机制,以及事务隔离级别、死锁预防与解决策略,并在最后针对优化并发环境下的系统性能给出具体的参数调整示例。Oracle数据库的并发控制机制复杂而强大,通过深入理解MVCC、锁与闩锁机制、事务隔离级别以及死锁预防与解决策略,并结合实际环境进行参数调整和性能优化,可以显著提升数据库的并发处理能力和整体性能。在并发环境下,合理使用锁和闩锁可以确保事务的原子性和一致性,同时减少资源竞争和死锁的发生。:增加会话缓存的大小,以减少会话创建和销毁的开销。 阅读详情
mvcc(multi-version concurrency control)多版本控制技术在数据库中可以显著的提高并发性能。

1 我们先看看表格里有什么
SQL> select * from all_users;

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
BI 60 04-1月 -09
PM 59 04-1月 -09
SH 58 04-1月 -09
IX 57 04-1月 -09
OE 56 04-1月 -09
HR 55 04-1月 -09
SCOTT 54 30-8月 -05
MGMT_VIEW 53 30-8月 -05
MDDATA 50 30-8月 -05
SYSMAN 51 30-8月 -05
MDSYS 46 30-8月 -05

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
SI_INFORMTN_SCHEMA 45 30-8月 -05
ORDPLUGINS 44 30-8月 -05
ORDSYS 43 30-8月 -05
OLAPSYS 47 30-8月 -05
ANONYMOUS 39 30-8月 -05
XDB 38 30-8月 -05
CTXSYS 36 30-8月 -05
EXFSYS 34 30-8月 -05
WMSYS 25 30-8月 -05
DBSNMP 24 30-8月 -05
TSMSYS 21 30-8月 -05

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
DMSYS 35 30-8月 -05
DIP 19 30-8月 -05
OUTLN 11 30-8月 -05
SYSTEM 5 30-8月 -05
SYS 0 30-8月 -05

已选择27行。

已用时间: 00: 00: 00.03

2 创建一个测试表格
SQL> create table t as select * from all_users;

表已创建。

已用时间: 00: 00: 00.18

3 声明游标
SQL> variable x refcursor
SQL> begin
  2 open :x for select * from t;
  3 end;
  4 /

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.01

4 删除表格的数据
SQL> delete from t;

已删除27行。

已用时间: 00: 00: 00.00

5 提交事务
SQL> commit;

提交完成。

已用时间: 00: 00: 00.00

6 看看游标的数据
SQL> print x

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
BI 60 04-1月 -09
PM 59 04-1月 -09
SH 58 04-1月 -09
IX 57 04-1月 -09
OE 56 04-1月 -09
HR 55 04-1月 -09
SCOTT 54 30-8月 -05
MGMT_VIEW 53 30-8月 -05
MDDATA 50 30-8月 -05
SYSMAN 51 30-8月 -05
MDSYS 46 30-8月 -05

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
SI_INFORMTN_SCHEMA 45 30-8月 -05
ORDPLUGINS 44 30-8月 -05
ORDSYS 43 30-8月 -05
OLAPSYS 47 30-8月 -05
ANONYMOUS 39 30-8月 -05
XDB 38 30-8月 -05
CTXSYS 36 30-8月 -05
EXFSYS 34 30-8月 -05
WMSYS 25 30-8月 -05
DBSNMP 24 30-8月 -05
TSMSYS 21 30-8月 -05

USERNAME USER_ID CREATED
------------------------------ ---------- --------------
DMSYS 35 30-8月 -05
DIP 19 30-8月 -05
OUTLN 11 30-8月 -05
SYSTEM 5 30-8月 -05
SYS 0 30-8月 -05

已选择27行。

已用时间: 00: 00: 00.01
SQL>

欢迎光临老紫竹的 个人网站 和我在 优快云的博客

结论:
  在游标生成时的那个时间点(Point in Time),结果集已经确定,不会因为删除了t里面的数据而引起结果集变化。

OPEN 命令返回的结果集在打开的那一刻(时间点)就已经确定。打开时,我们根本没有碰过表中的任何数据块,但答案已经是铁板钉钉的了。获取数据之前,我们无法知 道答案会是什么;不过,从游标角度看,结果则是固定不变的。打开游标时,并非Oracle 将所有数据复制到另外某个位置;实际上是DELETE 命令为我们把数据保留下来,把它放在一个称为undo 段(undo segment)的数据区,这个数据区也称为回滚段(rollback segment)。
oracle的mvcc解析,PostgreSQL原理:Oracle 和 MySQL 中MVCC机制详解 MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制。在介绍MVCC之前我们先来简单了解下事务的隔离级别:read uncommitted:脏读,一个事务可以读到另外一个事务未提交的数据,大多数关系型数据库不支持。read committed:提交读,一个事务可以读到其他事务已经提交的数据,大多数数据库的缺省模式。repeatable rea... 阅读详情

相关推荐

SSD训练自定义数据集实战:VOC格式标注与模型调参技巧

本文详细介绍了如何使用SSD模型训练自定义VOC格式数据集,包括数据标注工具选择、VOC数据集目录结构规范、数据集划分方法以及模型调参技巧。通过实战案例演示了SSD源码的关键修改点和训练参数优化策略,帮助开发者高效实现目标检测任务。

php55的博客 563

PostgreSQL、Oracle、Mysql中MVCC机制详解

mvcc,也就是多版本并发控制,是为了在读取数据时不加锁来提高读取效率和并发性的一种手段。读-读:不存在任何问题。读-写:有线程安全问题,可能出现脏读、幻读、不可重复读。写-写:有线程安全问题,可能存在更新丢失等。mvcc解决的就是读写时的线程安全问题,线程不用去争抢读写锁。MVCC:Multi-version Concurrency Control (多版本并发控制)。S2PL: Strict Two-Phase Locking(严格二阶段锁):读写互斥,保证串行。

meser88的博客 1559

用Python玩转Iris数据集:从数据加载到可视化分析的完整指南

本文提供了使用Python处理Iris数据集的完整指南,涵盖数据加载、探索性分析、特征工程和可视化呈现等关键步骤。通过Pandas、NumPy、Matplotlib和Seaborn等工具,读者将学习如何从零开始完成一个机器学习项目的数据分析流程,掌握数据科学的核心技能。

j2k3l4的博客 850

⛳ MVCC 原理详解

事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。假如 A 转账给 B 100 元,先从 A 的账户里扣除 100 元,再在 B 的账户上加上 100 元。如果扣完 A 的 100 元后,还没来得及给 B 加上,银行系统异常了,最后导致 A 的余额减少了,B 的余额却没有增加。所以就需要事务,将 A 的钱回滚回去,就是这么简单。为什么要有事务呢?就是为了保证数据的最终一致性。MVCC 是 写时复制(copy on writer)思想的一种体现。

松柏123的博客 1122

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2056

STM32 I²C外设深度解析:时序配置、主从模式与可靠性工程

I²C是一种广泛应用于嵌入式系统的同步串行总线协议,其核心在于精确的时序控制与可靠的电气特性匹配。理解SCL/SDA信号建立/保持时间、上升下降沿约束及硬件滤波机制,是保障通信稳定的基础;STM32通过I2C_TIMINGR寄存器实现对PRESC、SCLH、SCLL、SDADEL和SCLDEL等关键参数的精细调控,直接影响tSU:DAT、tVD:DAT等标准时序合规性;该能力支撑工业级高可靠场景下的主从双向通信、时钟拉伸管理与错误恢复;本文聚焦STM32平台,结合寄存器级配置、状态机行为与实战调试经验,系统

weixin_42146230的博客 87

oracle框架

6666

weixin_70280523的博客 748

【3d打印】基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置

基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置(启庞Kp3s V1)

共享IT之美,共创机器未来 3193

Oracle DB的多版本并发控制

本文深入介绍Oracle DB的多版本并发控制。

qq_45732829的博客 1464

NACA0012的O型网格求解

本篇文章采用偏微分方程数值解法生成NACA0012翼型O型网格,并采用速度势方程求解绕NACA0012翼型迎角为0度时的低速不可压无粘流场。 文章目录一、求解网格1.翼型2.远场3.网格4.迭代5.求解二、求解流场1.偏微分方程2.迭代求解流场三、求解参数1.偏微分方程2.迭代求解四、导出数据 一、求解网格 1.翼型 本次求解网格和流场等采用的是NACA0012(修形)对称翼型,在NACA四位翼型中,第一位数字代表的是弯度,第二位数字代表的是弯度位置,后两位数字代表的是厚度,由于本次翼型的前两位数字都为0,

m0_50746433的博客 6677

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6391

MVCC(多版本并发控制)

MVCC 是一种非常强大的并发控制机制,它通过多版本的数据存储来避免锁的竞争,从而提高了数据库的并发性能。它适用于大多数现代数据库系统,特别是当需要处理高并发查询和更新时。然而,它也有一些缺点,如存储空间的浪费和实现复杂度,因此需要根据具体的业务场景来权衡使用。

qq_50847694的博客 1149

作物生长模型Oryza V3实战10:运行文件参数详解

运行文件(.rer)用于批量模拟农业场景,包含多组参数集(Rerunset),每组设定独立的时间范围、灌溉施肥方案等,支持测试不同农艺措施效果。该文件可实现参数自动校准,通过多组参数组合迭代寻找最优值。模拟结果文件(res.dat)会记录全部测试时间段的数据,便于用户对比产量、水分利用率等指标,筛选最优方案或分析气候适应性策略。

209

PostgreSQL、oracle、mysql中MVCC机制详解

1、MVCC介绍 1.1、事务隔离级别 MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制。在介绍MVCC之前我们先来简单了解下事务的隔离级别: read uncommitted:脏读,一个事务可以读到另外一个事务未提交的数据,大多数关系型数据库不支持。 read committed:提交读,一个事务可以读到其他事务已经提交的数据,大多数数据库的缺省模式。 repeatable read:一个事务执行过程中访问的数据是一致的,也就是一个事务中多次读

Focus on PostgreSQL 6001

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【MVCC多版本并发控制】MVCC 机制的原理及实现,什么是MVCC,多版本并发控制

什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL、Oracle、PostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。 如此一来不同的事务在并发过程中,SELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。 先来了解一下什么是版本链: 什么是

世上哪有什么岁月静好,不过是有人替你负重前行 2157

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL InnoDB 之 多版本并发控制(MVCC)

多版本并发控制(MVCC,Multi-Version Concurrency Control)是数据库管理系统中用于提供高并发性和在事务处理中实现隔离级别的一种技术。MVCC 允许系统在不完全锁定数据库资源的情况下,处理多个并发事务,从而提高了数据库的吞吐量和用户的响应速度。这是通过为每个读取操作创建数据的一个快照来实现的,使得事务可以访问数据的特定版本,而不是最新数据。

HaSaKing的博客 1519

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

PostgreSQL中的多版本并发控制-MVCC

更多文章请关注作者公众号 1 PostgreSQL中的多版本并发控制-MVCC 1 1.1 为什么需要MVCC 1 1.2 不同的MVCC机制 1 1.3 MVCC 设计的几个概念 1 1.4 MVCC的工作机制 2 1.1.1 插入数据实例 2 1.1.2 修改数据实例 3 1.1.3 删除数据实例 4 1.1.4 数据操作总结来说 5 1 PostgreSQL中的...

知识的力量 1352

MVCC多版本并发控制

可重复读的核心就是一致性读,而事务更新数据的时候,只能用当前读如果当前记录的行锁被其他事务占用的话,就需要进入锁等待在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。

一零贰肆的博客 479

Oracle中的MVCC(多版本并发控制)是如何工作的?

MVCC通过维护多个数据版本,使得读操作可以在不影响写操作的情况下执行,从而大大提高了数据库的并发性能。此外,MVCC还为Oracle提供了一致性和可恢复性的重要基础。然而,需要注意的是,随着大量历史数据的积累,UNDO段可能会占用大量的存储空间,因此合理配置和管理UNDO表空间是非常重要的。

qq_33240556的博客 812

oracle支持mvcc,ORACLE的行锁的实现、一致性读、多版本并发控制MVCC

在执行包含update,delete,merge,select for update语句时事务必须得到一个TX锁,也就是事务锁。而且会持有这个所直到提交或回滚。事务未提交时,为了实现事务一致性,其它事务不能访问正在修改的数据,其它事务必须排队等待这个事务提交或回滚。下面先介绍排队的实现。当事务锁住某些数据时,其它事务必须排队等待,ORACLE在SGA中分配的Reource Structure、Lo...

weixin_33588445的博客 810

Oracle MVCC机制详解

作为企业级数据库的标杆,Oracle的并发控制机制历经数十年演进,其MVCC实现以“块级多版本+UNDO段”为核心,在高并发场景下展现出极强的稳定性和性能。与PostgreSQL的“元组级多版本”、MySQL的“记录级undo日志”不同,Oracle将数据的历史版本(前映像)存储在独立的UNDO段中,通过生成“一致性读块(CR Block)”,让读事务无需等待写事务,同时保证数据一致性。

renkejia1988的博客 1131

MVCC(多版本并发控制)机制详解

MVCC(多版本并发控制)是现代数据库实现高效并发的核心技术,通过维护数据多版本实现读写操作不相互阻塞。其核心原理包括隐藏字段(事务ID、回滚指针)、Undo Log(保存历史版本形成版本链)和Read View(判断数据可见性)。MVCC在不同隔离级别下表现不同:读已提交每次查询生成新ReadView,可重复读复用同一ReadView。优势包括高性能并发、减少锁竞争,但存在存储开销和版本清理问题。MVCC与锁机制协同工作,读操作用MVCC,写操作仍需加锁。主流数据库如MySQL、PostgreSQL和Or

weixin_47242663的博客 533

在多版本并发控制(MVCC)方面,Oracle与GaussDB的实现机制有何本质区别?这对事务处理性能会产生哪些具体影响?

虽然Oracle和GaussDB(基于PostgreSQL的华为分布式数据库)都采用MVCC,但它们在具体实现机制上存在一些本质区别,这些区别在事务处理性能上产生了不同的影响。Oracle和GaussDB在MVCC的实现机制上存在显著差异,主要体现在数据版本的存储方式、读一致性的实现、事务回滚机制以及并发控制策略等方面。理解两者在MVCC实现上的本质区别,能够帮助数据库管理员(DBA)更好地进行性能优化和系统调优,确保数据库系统在高并发环境下的稳定和高效运行。(假设存在相关文献)

weixin_38428874的博客 1456

Oracle数据库中的MVCC(多版本并发控制)是如何工作的?

多版本并发控制(MVCC, Multi-Version Concurrency Control)是一种数据库管理系统中用来提高读操作的并发性和一致性而设计的技术。Oracle数据库使用MVCC来支持其读一致性(Read Consistency)特性,这意味着用户在查询数据时看到的是一个一致性的快照,而不受其他事务的影响。

qq_33240556的博客 625
上一篇: 每日IN语(2009-01-04)
下一篇: Oracle中闪回(flashback)的测试
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值