- 浏览: 1019585 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
我们都知道Latch是Oracle用来在内存中做串行控制的机构,从10g R2开始,Oracle引入了一个新的技术-Mutex。Mutex并不是Oracle的发明,而是系统提供的一个底层调用,Oracle只是利用它实现串行控制的功能,并替换部分Latch。
Mutex中有两个变量:分别是Holider identifer和Reference count,Holider identifer记录持有mutex的SID,而Reference count是一个计数,记录了当前正在以share方式访问mutex的数量,每当session以share方式持有mutex时,计数会加1,而释放时会减1。如果Reference count大于零,则表示该内存结构正在被Oracle pin住。
我们看一段伪代码,演示mutex的申请过程:
Function Mutex_get(mutex_name)
{
if mutex.holder:=SID
case mode:
'exclusive':
if mutex.ref_count=0
return TRUE
else
mutex.holder.clear;
reture FALSE
end if
'share':
mutex.ref_count++
mutex.holder.clear
return TRUE
end case
else
reture FALSE
end if
}
Mutex是如何实现串行控制的,实际上它是利用了操作系统的一个原子操作CAS(compare-and-swap)实现的。我们看到函数的开始处:mutex.holder:=SID,将SID赋值给mutex的Holider Identifer,这里就是一个原子的CAS操作,首先比较mutex.holder是否为空,如果不为空则赋值session的SID。CAS操作由OS来保证其原子性,在同一时刻这个操所是串行的。如果这个赋值操作失败,整个申请过程失败。赋值成功后,如果是share方式,则mutex.ref_count加1,并清空mutex.holder,如果是exclusive方式,需要判断mutex.ref_count是否为零(是否被pin住),如果大于0,则失败,并清空mutex.holder,如果等于0,则成功,这时不清空mutex.holder,保持当前session对mutex的exclusive占用,直到释放为止。
Mutex相比latch带来了以下的好处:
1.更少的资源消耗,mutex与latch不同,它不是独立存在的,而是在每个内存结构中,并随着内存结构创建和释放,mutex同时也被创建和释放。mutex暂用的空间比latch小很多,创建和释放消耗更少的资源。
2.有效降低竞争,因为mutex是每个内存结构中的一部分,这样意味着mutex的数量可以有很多,而不同于latch,一个latch需要管理很多个内存结构,当你访问同一latch管理的不同内存结构时,也会发生竞争,而mutex则不会。另外,因为latch的数量有限,很多时候latch本身的竞争会很厉害,之前,我们只能增加latch数量或者减少latch持有的时间,而现在,mutex是一个更好的选择。
3.更快的pin,当block被访问时,它必须被pin在buffer cache中,当一个cursor执行时,它也必须被pin在library cache中,如果大量并发频繁执行同一个cursor,library cache pin会耗费大量的CPU资源。而mutex使用reference count来解决并发访问的问题,只要它大于零,就表示它已经被pin在了内存中,不能被交换出去。而且mutex.ref_count++这个操所是非常快的,只占用非常少的资源。
Mutex申请的过程和latch类似,同样需要spin和sleep,不同的是Oracle硬编码了mutex spin的次数为255次(Latch spin的次数默认为2000,由隐含参数_spin_count控制)。latch sleep会随着等待次数的逐步增加,每次sleep的时间也会逐步增加。而mutex sleep则比较特别,它有三个选项,分别是yield CPU,sleep或者block other process,允许开发人员来决定采用哪种选项。
由于在某些RISC的操作系统中(HP-UNIX),由于系统不支持CAS操作,Oracle通过创建一个latch pool来模拟了CAS操作,被称为KGX latch,如果你发现系统中存在这种latch竞争,说明操作系统不支持CAS操作,可以通过_kks_use_mutex_pin关闭mutex。
mutex主要使用在library cache中,用来取代原来的library cache pin和library cache lock,关于library cache中锁的实现机制,我会在另外一篇文章中说明。
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22817有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1210Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2898首先,去oracle官网下载C ... -
local_listener参数作用
2011-05-10 17:19 1923pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3531整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9491. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1263参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1296大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1812利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 985往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1027当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1179在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1755步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 831Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1535接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2802用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1471数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11701.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 779本文讨论的是关于oracle ... -
oracle 进制转换
2010-12-13 14:24 12571.16进制转换为10进制 ...
相关推荐
Oracle Mutex 是Oracle数据库中一种重要的同步机制,用于在多线程环境下保护共享资源的安全访问。在Oracle数据库中,Mutex(互斥锁)是实现并发控制的关键组件,它确保在任何时候只有一个线程能够访问特定的内存结构...
在Oracle数据库中,latch和mutex都是用于保护共享资源的同步工具,但它们在实现和使用上有区别。Latches是轻量级的保护机制,一般用于保护内存结构中的短期锁定资源,而mutex则更加复杂和精细,用于更长时间的锁定和...
Mutex机制主要用于保护Oracle数据库的共享池中的对象,避免多个进程同时访问同一个资源而导致的数据不一致问题。在高并发场景下,Mutex机制的有效性直接影响到系统的性能和稳定性。 - **Mutex的作用**: - Mutex...
- 自Oracle 8.0起,可以实现共享Latch,用于某些AQ操作(如检查缓冲区链时获取的Cache Buffers Chains Latch)。 **1.2 Mutex简介** - **定义**:Mutex是一种更高层次的同步机制,用于保护更复杂的内存结构。 - *...
为了实现线程同步,VC++提供了多种同步机制,如临界区、事件、信号量等。例如,可以使用临界区来保护共享的数据库连接对象,确保同一时间只有一个线程能使用这个连接。同时,线程间的通信可以通过事件对象实现,当...
在Oracle中,基数反馈是优化器用来调整执行计划的一个机制。它基于实际的基数信息(即查询返回的行数)来调整后续执行的基数估计。基数反馈可能因查询条件不一致或会话级别优化器参数设置不同而出现问题。例如,...
本文旨在深入探讨Oracle锁机制的内部原理,特别是针对DML锁、DDL锁以及Latch等锁机制进行详细解析,帮助DBA更好地理解和应对实际工作中遇到的各种锁问题。 #### 二、Oracle锁机制概览 Oracle的锁机制可以大致分为...
Oracle数据库性能优化实务主要关注的是闩锁(LATCH)及其优化,这关乎数据库系统的稳定性和效率。...通过以上策略,可以有效地提升Oracle数据库的性能,降低由于闩锁竞争导致的系统瓶颈,从而实现更高效的数据库操作。
通过上述三个步骤,我们可以有效地初始化OCI环境并准备好必要的句柄,从而实现与Oracle数据库的连接和交互。这些函数是使用OCI进行数据库开发的基础,掌握它们对于开发高效稳定的Oracle应用程序至关重要。
在实际应用中,为了实现资源的有效利用,通常会使用锁等机制来控制对共享资源的访问。 ##### 2. OCI与多线程安全 OCI(Oracle Call Interface)是Oracle提供的一个C语言级别的接口库,用于高效地与Oracle数据库交互...
3. **并发与多线程**:Solaris支持多线程编程,通过pthread库提供了丰富的线程API,如pthread_create(), pthread_join(), pthread_mutex_t等,允许开发者创建和管理线程,实现并发执行。 4. **内存管理**:Solaris...
调优的主要目的是通过各种手段降低SQL语句消耗的资源,如逻辑读、物理读、CPU时间、热点争用以及Latch/Mutex的争用等。通常,80%的性能问题是由10%的Top SQL引起的。因此,识别并优化这些高消耗的SQL语句是提高...
此外,系统可能还利用了异常处理机制来确保程序的健壮性,以及线程同步技术如mutex或condition_variable来实现多线程并发操作。 Oracle数据库作为后台存储,提供了强大的数据管理和事务处理能力。超市进销存管理...
6. **同步与互斥**:描述如何使用 DKI 提供的同步原语,如 mutex(互斥锁)、condition variables(条件变量)和 semaphores(信号量)。 7. **电源管理**:讲解如何实现设备的节能模式,如 D3冷态、D3热态等。 8. *...
在Oracle数据库系统中,了解和区分Latch(锁存器)和Lock(锁)是非常重要的,因为它们都是数据库并发控制的关键机制,确保数据的一致性和完整性。以下是对这两个概念的详细解释: 1. Latch(锁存器) - 目的:...
3. `pthread_mutex_*`:这一系列函数提供了互斥锁,用于保护共享资源免受并发访问。 4. `pthread_cond_*`:条件变量允许线程在满足特定条件时阻塞,直到其他线程改变了条件。 5. `pthread_rwlock_*`:读写锁提供了一...
Mutex是一种用于控制对共享资源的互斥访问的同步机制。在***定时备份SQL Server的软件中,使用Mutex来确保任何时候只有一个备份进程运行,这有助于防止进程间的竞争条件,并能有效管理资源。 7. 计划任务的实现与...
MySQL中的全局锁问题(例如Spinlock、RWLock和Mutex等)可能导致系统的整体性能下降。过多的全局锁会增加锁争用,尤其是在高并发场景下,这会影响系统的响应时间和吞吐量。 **2.2 并发控制是关键** 并发控制是...
- Delphi提供了如Synchronize、CriticalSection、Mutex等机制来保证数据安全。 综上所述,这个主题涵盖了程序进程条的使用、Delphi的源码学习、数据库操作以及多线程编程等多个IT核心概念。通过深入研究和实践,...