当前位置: 首页 > 编程日记 > 正文

oracle1core,Oracle core06_latchlock

lock and latch

在oracle中为了保护共享资源,使用了两种不同的锁机制lock和latch,这两种锁有明显不同点:

1,lock和pin,采用的是队列的方式,先来先服务的策略,latch和mutex,采用的是抢占的方式,fast

fail模式

2,lock可以hold的时间比较长,而latch时间会非常的短

3,lock主要用户锁定对象,面向用户,latch主要锁定的是内存,面向系统

理解这两种锁的设计思想,可以应用在实际的生产过程中,首先:

1,这两种锁的粒度不同,一个粒度粗,一个粒度细

2,根据不同的场景,设计适合场景的锁机制

因为latch保护的内存中的数据,而数据的组织oracle使用了多种方式:

1,array

主要使用固定长度的对象的集合,这样可以直接定位到任意对象的地址,在空间的分配上,

可以一次分配定长或者递增长度的chunk。

2,linked list

这里可以是单向的链表,或者双向的链表,linked list是比较常用的结构,比如index中的leaf block。

linked

list可以组织成FIFO的队列,也可以组织成LIFO的堆栈。

3,B 树

B数数据结构,是oracle在index中使用的方式,查找的效率和数的高度有关。\

4,hash table

在数据量比较小的时候,可以使用array或者linked List,但是,当数据量比较大的时候,查找的时间效率上,hash

table会更有效率,时间复杂度是O(1)。

在对目前常用的数据结构中,对于查询而言,有三种方式效率比较高:

1,二分查找

这需要数据时有序的,

2,B

树查找

在大并发的修改情况下,会有瓶颈

3,hash表

查找的效率是O(1),比较适合大并发的修改情况下使用

所以,在oracle中,对大量小的内存空间的并发管理上,通常使用hash

table数据结构。

hash的主要思想是:

设定一个固定的数量的bucket(通常是2的幂次方),然后对对象应用hash函数,映射到其中的一个bucket当中。

但bucket的数量,hash算法等会影响到管理和使用的开销。

这里有几个原则:

1,不同的对象可能映射到同一个bucket中

2,同一个bucket中不能有太多的对象

3,hash算法尽量要是对象分布均衡

对于每一个bucket中,多个对象使用linked list进行组合,例如library cache中的对象,包括两个结构,

hash

bucket,hash chain。

这里对oracle的阻塞的概念做一个解释:

1,多版本一致,读写互不阻塞

这是对用户而言,在data

level,在使用oracle时,访问和修改数据可以做到,读读不阻塞,读写不阻塞,写写阻塞,因为oracle使用undo机制实现了多版本一致性

2,内存结构,互相阻塞

对于oracle的内存结构,在raw

memory

level,使用latch的方式,写是独占锁,读是共享锁,实现了读读不阻塞,读写阻塞,写写阻塞的方式。所以对于latch而言,获取和释放latch的速度要非常快,以减少更改内存结构的过程中,对读的阻塞。

所以,通常的应用设计过程中,第一种更多是对热点数据的修改争用,造成的enqueue,相比较而言,对应用服务器的可扩展性和并发能力产生很大的影响,而第二种可能是应用设计的不合理,而latch对oracle数据库系统的并发能力和可扩展性的影响更大,因为其不能做到读写互不阻塞,并发能力大大减弱。

latch:

1,本质:

latch的本质其实是信号量,使用内存的一个地址进行存储,并对信号量进行一系列的原子操作。在多用户系统下,原子操作意味着其不会被进程的调度所中断,

在原子操作的生命周期会完全占有cpu,在多cpu的架构上,通过独占内存总线来实现原子操作。

在oracle中,latch分为exclusive和shared模式,在reader和write的逻辑处理上,有两种模型:

1,check and

change

首先writer去check信号量的值,发现为zero,就去修改,然后就相当于获得了latch,就可以修改latch所保护的对象了。这里包含了两个操作,一个是check,

一个是change,当处在多线程处理中,或者多cpu架构中,就会破坏一致性。

2,compare and

swap

设置一个flag,使用寄存器保存信号量的值,当flag没有被设置的时候,writer设置flag,这时开始阻塞了reader再去更改信号量,writer开始不停的compare两个,

当值相等的时候,即reader已经释放完shared

latch的时候,writer就可以独占latch了。

2,latch统计

当session获取latch的过程中,如果重试,在重试一定次数的时候,进入sleep,这时并不像enqueue一样,会有FIFO管理队列来管理阻塞的情况,直到被唤醒。

而因为获取latch而sleep的session会被os

offline cpu的运行队列中,进入wait list。然后会被被唤醒重试。

3,latch scalability

这里主要是两个方面,latch的数量和latch获得的时间:

1.  latch数量:这里是一个平衡点,latch数量少,你们一个latch管理的恭喜主要就比较多,会产生严重的争用,但当为每一个恭喜主要分配一个latch的时候,系统管理latch的开销又会大幅升高。所以针对library

cache中hash bucket,oracle通常设置了cpu_count个latch来管理,在oracle

11g中,采用了mutexes来替代latch来管理部分latch,即针对每一个object分配一个mutex,这样大大减少了争用。

2.  latch时间:latch hold的时候尽可能的要短,减少争用。

原文:http://www.cnblogs.com/xpchild/p/3695159.html

相关文章:

Foxmail6密码获取案例

Foxmail6密码获取案例 Simeon以前曾经写过一篇Foxmail5.0邮件账号以及密码获取的文章,对于Foxmail5.0中邮件账号密码获取相对较简单,可以通过星号密码查看器即可查看保留在Foxmail软件中的用户的密码,当然也还有其它的破解方式。但是在Foxmai…

新版CCNP中文版教材--ISCW

找了好久的新版CCNP中文教材,不过只有ISCW,希望能对想考NP的朋友有一点帮助![url]http://www.bibidu.com/fileview-696580.html[/url] 转载于:https://blog.51cto.com/xghe110/89352

杨超越的声音+高晓松的脸~如此酸爽的技术,你值得拥有!

作者 | 香港中文大学 Multimedia Laboratory译者 | linstancy整理 | Jane出品 | AI科技大本营什么是 Talking Face Generation 任务?简单来讲,给定音频或视频后,可以让任意一个人的面部特征与输入信息保持一致。比如在下面的 Demo 视频中&…

遍历数据键和值 php,php数组实例之获取当前数组键和值 each()

each()函数返回input_array的当前键/值对,并将指针推进一个位置。其形式如下:array each(array array)返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回f…

震后首游都江堰感怀

震后首游都江堰感怀题记:在地震刚刚过去2个月之时,来到都江堰参观有感——代腾飞 2008年7月12日 于都江堰千年水利都江堰地动山摇面不改但使沧容神尤在笑迎宾客八面来

安装linux和windows双系统

很多人一提到安装linux和windows双系统就会想到单独将磁盘划一个分区给linux,如果一块磁盘上已经安装了windows,并且所有分区都有数据,那就麻烦了,即使有了单独的分区,还需要安装grub,然后在grub中选择启动…

Office 365 系列之一:初识Office 365

最近项目越来越多,压力也是越来越大,而且到了年底了还要进行Office 365的考试,最近小编是在闲暇之余各种查看Office 365的资料,今天跟大家分享自己对 Office 365 的学习和理解,如有写得不对的地方还希望大家多 多指点哦…

oracle导出客户机使用us7a,导入 Oracle WORLD SAMPLE

Import WORLD SAMPLE C:\oraclexe\app\oracle\product\11.2.0\server\bin>imp system/oracle Import: Release 11.2.0.2.0 - Production on 星期五 10月 10 22:02:19 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle D…

AI做不了“真”3D图像?试试Google的新生成模型

编译 | 若名出品 | AI科技大本营用 AI 生成逼真三维物体模型并不像人们以为的那么困难。近日,在 NeurIPS 2018 会议上接收的论文“ 视觉对象网络:图像生成与分离式的3D表示”中,麻省理工学院计算机科学与人工智能实验室(MIT CSAIL…

linux内核异常分析ecp,内核基于嵌入式Linux的PocketIX系统

lgms2008 于 2006-10-20 10:38:55发表:应用领域与前景目前PocketIX只是一个预览版,其正式版本不仅可以广泛应用于移动计算平台(PPC)、 家庭信息环境(机顶盒、数字电视)、 工业、商业控制(智能工控设备、POS/ATM机)等信息家电上,还可应用于与Internet相联…

sharepoint性能优化

写几个配置,提高sharepoint性能的。主要思路是提高sql的查询能力,提高iis的硬件占用资源。 1、sql配置,管理器,点属性。配置最大工作线程数,勾选提升SQL server的优先级。配置后,重启sql服务,查…

倒计时1天,2018中国大数据技术大会报名通道即将关闭(附参会提醒)

2018 年12 月 6-8 日,由中国计算机学会主办,CCF大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的 2018 中国大数据技术大会(BDTC),携主题“大数据新应用”再度强势来袭,直击大数…

DNN module.css文件不起作用的解决

DNN的模块会自动加载模块根目录下的module.css文件,但有时你加入了一个module.css文件,却发现加入的module.css文件没有被加载,这是为什么呢? 因为DNN的Cache机制和CSS加载机制,新加入的module.css没有立即被加载&…

搭建redis给mysql做缓存

安装redis的前提是lnmp或者lamp的环境已经搭建完成。 安装redis 1、安装redis(或可以选择yum安装) 123456789101112[rootredis ~]# wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz[rootredis ~]# mkdir /usr/local/redis[rootredi…

小米发力AI场景下的“快应用”,投百亿资源扶持开发者

近日,备受瞩目的2018 MIDC小米AIoT第二届开发者大会在京召开,雷军宣布AIloT是小米的核心战略,小米将和合作伙伴一起打造AIloT的美好明天。另外,大会还宣布了小米与宜家达成全球战略合作,宜家全系智能照明产品都将接入小…

arcgis 投影变换与坐标转换研究

arcgis 投影变换与坐标转换研究 1 ArcGIS中的投影方法 投影的方法可以使带某种坐标信息数据源进行向另一坐标系统做转换,并对源数据中的X和Y值进行修改。我们生产实践中一个典型的例子是利用该方法修正某些旧地图数据中X,Y值前加了带数和分带方法的数值。 字串9 操…

linux lvm 大小与硬盘大小关系,linux lvm扩容磁盘大小

关闭需要扩容的虚拟机,并通过管理虚拟机界面添加磁盘空间,本次调整50G注意,本次写入为增加容量的大小,并非增加完硬盘的大小硬盘添加后可以用fdisk -l 查看磁盘容量大小,可以看到硬盘增加了50G ,但是由于没…

无人驾驶汽车系统入门:基于VoxelNet的激光雷达点云车辆检测及ROS实现

作者 | 申泽邦(Adam Shan)兰州大学在读硕士研究生,主要研究方向无人驾驶,深度学习;兰大未来计算研究院无人车团队负责人,自动驾驶全栈工程师。之前我们提到使用SqueezeSeg进行了三维点云的分割,…

EX2010与EX2013共存迁移01-设计及说明

1.1共存条件说明 2013年之前发布的Exchange 2013版本是不支持共存的,只有在2013年4月2日发布的Exchange 2013 CU1版才支持共存,Exchange 2010必须为SP3版本才支持和2013共存及迁移,Exchange2003不支持和2013共存及迁移。下面是详细的共存说明…

linux ext4增加大小,如何修改 ext4 文件系统的大小

如何修改 ext4 文件系统的大小a. 扩大文件系统i启动到 Linux,umount 掉/dev/sdb1 和/dev/sdb2,若提示磁盘忙的话使用fuser 将正在使用磁盘的程序 kill 掉。(推荐使用另外的 Linux 启动盘来引导系统)ii使用 fdisk /dev/sdb 调整分区大小,进去之后,输入 p,记下要扩大分区起始位置…

Silverlight初级教程-开发工具

Silverlight初级教程 开发工具 在silverlight越来越流行的同时有很多的供应商开始筹划制作编辑和设计silverlight的工具。现在最常见的设计和开发工具是:Visual Studio 2008Visual Studio是微软整合的集成开发环境。截止此时Visual Studio 2008已经提供了编辑和预览…

201671010128 2017-11-12《Java程序设计》之图形程序设计

一、基本概念 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理。应用AWT编写依赖于本地…

linux线程join的用法,join用法

Join用法- a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。# cat name.txtM.Golls 12 Hi…

vss使用注意事项

连接方式 局域网方式连接 Internet 方式连接 在局域网方式连接时,需要输入自己的 vss 登陆帐号,账号可以通过管理器,自己在 vss 系统中注册; Internet 连接时默认使用的是 vss 中的 administrator 账号; 请大家都使用自…

沈向洋、黄学东等大咖助阵,IoT in Action微软深圳物联网大会即刻报名

每当海聊黑科技,总会有种恍然隔世的幻觉自动驾驶、无人配送、刷脸支付、智能翻译……物联网、人工智能、智能边缘等等新技术正在快速变得实用并普及怀疑论者还秉持观望,深怕技术布道之嫌而我们的现实中已经切实听见他们落地的声音因为“未来已经来临&…

centos6上以二进制方式安装mariadb5.5

准备mariadb-5.5.57-linux-x86_64.tar.gz二进制程序包 此包是经过编译的,也就是说我们要在特定的目录下安装; 步骤1、准备mysql用户 mkdir /app/data #此目录是存放mysql数据库、表的 useradd -r -m -d /app/data -s /sbin/nologin mysql #创建mysql用户…

“神人”or“闲人”?你的未来由AI与大数据决定

12 月 6 日,北京新云南皇冠假日酒店,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的 2018 中国大数据技术大会(BDTC)首日议程圆满结束。本次大会为期三天&#…

linux 获取cpu id,linux获取cpu id和disk id

2013-04-19 15:17 57人阅读 评论(0)// 获得CPU IDpublic static final String CPU_ID_CMD "dmidecode -t 4 | grep ID |sort -u |awk -F: {print $2}";// 获得磁盘IDpublic static final String DISK_ID_CMD "fdisk -l |grep \"Disk identifier\" …

给gridview添加上下移动功能

给gridview添加上下移动功能存储过程代码:CREATE PROCEDURE [sp_trans_dept] now_id int,upside_id intASdeclare tmp_ordering int --临时变量declare sqlstr varchar(1000) --sql语句declare table_name varchar(500)declare column_name varchar(500)set t…

Lucene.Net 2.3.1开发介绍 —— 三、索引(六)

2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点。怎么理解这个点呢?设置Document的Boost会影响所有字段。在搜索的过程中,一般至少会搜索两个Field,比如同时搜索标题和内容。而Document的Boost将同时…