数据库共享内存
‘壹’ linux读写锁_共享内存读写锁
Linux中的读写锁是一种用于优化多线程环境下对共享数据访问的特殊锁机制。以下是关于Linux读写锁及共享内存读写锁的详细解释:
读写锁的定义:
- 读写锁允许在读取数据时多个线程同时进行,但在写入时会进行互斥操作。
- 读写锁本质上是一种自旋锁,具有读写之间互斥的特点,即写操作会阻塞读操作,反之亦然。
- 在读写锁中,写操作通常具有优先获得锁的权利。
读写锁的行为特点:
- 读操作并发性:多个线程可以同时进行读操作,只要没有写操作在进行。
- 写操作互斥性:写操作是互斥的,即同一时间只能有一个线程进行写操作。
- 写操作优先:当存在写操作请求时,读写锁会优先满足写操作,这可能会导致正在进行的读操作被阻塞。
读写锁的应用场景:
- 读写锁特别适用于读多写少的场景,如数据库读取操作远多于写入操作的情况。
- 在这种场景下,读写锁能够显着减少不必要的线程阻塞,提高整体性能。
Linux中的读写锁实现:
- Linux提供了pthread_rwlock系列函数来实现读写锁。
- 这些函数包括初始化、销毁以及加锁和解锁操作。
- 开发者可以通过调用这些API来实现对共享数据的读写锁控制。
共享内存中的读写锁:
- 在共享内存环境中,读写锁同样适用。
- 通过在共享内存中设置读写锁,可以确保多个进程在访问共享数据时能够按照预期的行为进行读写操作。
- 这有助于避免数据竞争和一致性问题。
综上所述,Linux中的读写锁是一种高效的锁机制,特别适用于读多写少的场景。通过合理使用读写锁,可以显着提高多线程或多进程环境下对共享数据的访问效率。
‘贰’ 内存结构包括两个部分sga和pga
内存结构包括的两个部分是SGA和PGA。
SGA:
PGA:
- 定义:PGA是为非共享内存区域,用于存储每个服务器进程或后台进程的私有数据和信息。
- 组成:包括会话信息、排序区、临时表空间以及堆栈空间等部分。
- 功能:为每个进程提供独立的资源,确保进程间的数据隔离和操作的稳定性,如排序区在执行排序或分组查询时提供必要的内存空间。
- 分配:PGA的大小通常根据每个进程的需求动态分配,有助于灵活管理内存资源。
‘叁’ sga是什么意思
sga的意思是一组包含一个Oracle实例的数据和控制信息的共享内存结构。SGA系统全局区的英文简称,SGA (System Global Area)是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。
主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
组成:
SGA主要由数据高速缓冲区(Database Buffer Cache)、共享池(Shared Pool)、重做日志缓冲区(Redo Log Buffer)、大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)和其他结构(如固定SGA、锁管理等)组成。
‘肆’ SGA是什么
是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
SGA几个很重要的特性:
1、SGA的构成--数据和控制信息,我们下面会详细介绍;
2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence控制);
3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。
它主要包括:
1.数据库高速缓存(the database buffer cache),
2.重演日志缓存(the redo log buffer)
3.共享池(the shared pool)
4.数据字典缓存(the data dictionary cache)以及其它各方面的信息。
1.数据高速缓冲区(Data Buffer Cache)
在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:1) 脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。
2.Redo Log Buffer Cache缓存对于数据块的所有修改。
主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。
3. Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义。
它主要由两个内存结构构成:Library cache和Data dictionary cache
修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
Libray Cache缓存最近被执行的SQL和PL/SQL的相关信息。实现常用语句的共享,使用LRU算法进行管理
,由以下两个结构构成:Shared SQL area、Shared PL/SQL area、Data Dictionary Cache、Data dictionary cache缓存最近被使用的数据库定义。它包括关于数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。在语法分析阶段,Server Process访问数据字典中的信息以解析对象名和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。
4.数据字典缓存(the data dictionary cache)
‘伍’ sga是什么意思
两个意思:
sga是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。
SGA系统全局区的英文简称,SGA (System Global Area)是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。
享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据一次从输入文件到共享内存区,另一次从共享内存区到输出文件。
(5)数据库共享内存扩展阅读:
1、SGA的构成——数据和控制信息,我们下面会详细介绍。
2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和sequence控制)。