网站流量与带宽,双语网站建设方案,运营一个企业网站的推广方案,百度网站大全旧版一、体系结构概况 1.1 线程管理 YashanDB采用多线程架构#xff0c;线程分为两类#xff1a;
• 工作线程#xff08;Worker Threads#xff09;#xff1a;每个客户端连接到数据库实例时#xff0c;会创建一个工作线程。工作线程负责处理客户端的SQL请求#xff0c;执…一、体系结构概况 1.1 线程管理 YashanDB采用多线程架构线程分为两类
• 工作线程Worker Threads每个客户端连接到数据库实例时会创建一个工作线程。工作线程负责处理客户端的SQL请求执行SQL语句并将结果返回给客户端。工作线程是数据库与客户端交互的核心。
• 后台线程Background Threads由数据库实例自动创建用于执行系统级任务例如
• TCP监听线程TCP_LSNR监听指定的TCP端口处理客户端的连接请求并创建会话。
• 数据脏块刷新线程DBWR将内存中的脏数据块写回到磁盘上的数据文件。
• Redo日志刷盘线程LOGW将内存中的Redo日志刷盘到Redo日志文件。
• 检查点任务调度线程CKPT调度全量和增量检查点任务。 1.2 物理存储 物理存储是YashanDB存储数据的物理文件集合主要包括以下几类文件
• 控制文件Control Files记录数据库的物理结构信息如数据文件的位置、日志文件的位置等。控制文件是数据库启动和恢复的关键。
• 数据文件Data Files存储实际的表数据、索引数据等用户数据。
• Redo日志文件Redo Log Files记录数据库的所有修改操作用于恢复和数据一致性保障。
• 归档日志文件Archive Log Files当Redo日志文件写满后会将其内容归档到归档日志文件中用于数据库的完全恢复。
• Slice文件用于存储特定的分区数据或其他优化存储的文件。 1.3 内存管理 内存管理是YashanDB性能优化的关键部分主要分为两大区域
• 共享内存区域Shared Global Area,SGA这部分内存被所有数据库会话共享用于存储全局信息例如
• 内存共享池Share Pool用于缓存SQL语句的解析树、执行计划、存储过程、数据字典等。
• 数据缓存Data Buffer缓存最近访问的数据块减少磁盘I/O操作。
• 有界加速缓存AC Buffer用于加速某些特定操作。
• 虚拟内存Virtual Memory用于支持复杂的SQL操作如排序、连接等。
• 私有内存区域Session Private Area,SPA每个会话独占的内存区域用于存储会话特定的数据例如
• 会话栈内存Stack Memory存储局部变量等临时数据。
• 会话堆内存Heap Memory存储生命周期较长的数据。 1.4 实例与数据库的关系
• 实例Instance由线程工作线程和后台线程及其管理的内存结构组成。实例是数据库运行的载体负责控制和管理数据库。
• 数据库Database是数据的物理存储载体由控制文件、数据文件、日志文件等组成。
• 关系当数据库启动时实例会加载数据库并通过内存和线程管理来提供数据服务。一个实例最多只能加载一个数据库。 ---
二、YashanDB基本概念 2.1 实例和数据库
• 实例是数据库运行的载体由线程和内存结构组成。
• 数据库是数据的存储载体由物理文件如控制文件、数据文件、日志文件等组成。
• 关系实例启动时加载数据库一个实例对应一个数据库。 2.2 内存体系
• 共享内存区域SGA供多个会话或线程共享使用包括内存共享池、数据缓存、有界加速缓存和虚拟内存。
• 私有内存区域SPA每个会话独占的内存区域用于满足SQL执行时的内存需求。 2.3 进程线程体系
• 服务端核心进程YASDB实例启动后创建用于处理连接请求。
• 工作线程WORKER客户端连接时创建负责会话业务执行调度。
• 后台线程用于实现工作机制和保证数据一致性。 2.4 物理存储
• 包括控制文件、Redo日志文件、数据文件和归档日志文件等。 ---
三、YashanDB内存管理详解 3.1 共享内存区域SGA
• 内存共享池Share Pool
• 包括SQL缓存、日志缓存、PL池、数据字典缓存、大对象池等。
• 数据缓存Data Buffer
• 缓存从磁盘读取的数据块拷贝采用LRU算法管理大小受data_buffer_size参数控制。
• 虚拟内存Virtual Memory
• 用于物化数据的SQL算子如order by、hash join等不足时可交换到SWAP表空间大小受vm_buffer_size参数控制。
• 有界加速缓存AC Buffer
• 缓存AC对象。 3.2 私有内存区域SPA
• 会话栈内存Stack Memory存放临时局部变量大小由WORK_AREA_STACK_SIZE参数控制。
• 会话堆内存Heap Memory存放生命周期较长的运行期数据大小由WORK_AREA_HEAP_SIZE参数控制。 3.3 常用内存参数
• DATA_BUFFER_SIZE指定数据缓存区大小影响数据库整体性能重启生效。
• VM_BUFFER_SIZE指定SQL标准计算使用的内存大小影响计算性能重启生效。 ---
四、YashanDB进程详解 4.1 服务端核心进程YASDB
• 实例启动后创建用于处理连接请求。 4.2 工作线程WORKER
• 客户端连接时创建负责会话业务执行调度连接退出时线程退出会话连接上限由MAX_SESSIONS参数控制。 4.3 后台线程
• TCP监听线程TCP_LSNR监听TCP端口处理连接请求并创建会话。
• 数据脏块刷新线程DBWR将脏数据块写回磁盘数据文件。
• Redo日志刷盘线程LOGW将Redo日志刷盘到Redo日志文件。
• 检查点任务调度线程CKPT调度全量和增量检查点任务。 ---
五、YashanDB事务和锁 5.1 事务概述
• 定义事务是包含一个或一组SQL语句的工作单元。
• 特性
• 原子性Atomicity事务中的所有操作要么全部生效要么全部不生效。
• 一致性Consistency事务前后数据库的完整性不变。
• 隔离性Isolation并发事务之间相互隔离互不干扰。
• 持久性Durability事务提交后数据修改永久生效。 5.2 事务的隔离级别
• 支持的隔离级别读已提交Read Committed和可串行化Serializable默认为读已提交。
• 隔离级别对比
• 读未提交Read Uncommitted可能出现脏读、不可重复读和幻读。
• 读已提交Read Committed避免脏读但可能出现不可重复读和幻读。
• 可重复读Repeatable Read避免脏读和不可重复读但可能出现幻读。
• 可串行化Serializable避免脏读、不可重复读和幻读。 5.3 锁机制
• 作用处理写写之间的并发控制不同事务对同一数据的并发修改。
• 分类
• 表锁
• 共享锁Share Lock,S允许DML并发执行阻塞并发DDL。
• 排他锁Exclusive Lock,X阻塞其他并发的DDL和DML。
• 行锁DML语句修改数据时锁定要修改的行只有排他锁一种类型。 5.4 锁相关视图
• V$LOCK显示当前所有锁的信息。
• V$LOCKED_OBJECT显示当前所有被锁定的对象信息。
这些视图可以帮助数据库管理员监控和分析锁的状态以便优化并发性能和解决潜在的锁冲突问题。 ---
六、小结
本章详细介绍了 YashanDB 数据库的体系结构及相关核心概念主要包括以下几个方面 1. 体系结构概况
• YashanDB 的整体架构由线程管理、物理存储和内存管理三大模块组成。
• 线程管理包括工作线程和后台线程分别负责处理客户端请求和执行系统级任务。
• 物理存储涉及控制文件、数据文件、Redo 日志文件等是数据持久化的基础。
• 内存管理分为共享内存区域SGA和私有内存区域SPA用于优化性能和资源分配。
• 实例与数据库的关系明确一个实例对应一个数据库实例通过内存和线程管理为数据库提供服务。 2. YashanDB 基本概念
• 实例是数据库运行的载体数据库是数据存储的载体。
• 内存体系包括共享内存区域和私有内存区域分别用于全局数据共享和会话级数据隔离。
• 进程线程体系涉及服务端核心进程、工作线程和后台线程协同完成数据库的运行和维护。
• 物理存储是数据库的物理基础包括控制文件、数据文件、日志文件等。 3. YashanDB 内存管理详解
• 共享内存区域SGA包含内存共享池、数据缓存、有界加速缓存和虚拟内存用于缓存和优化数据库操作。
• 私有内存区域SPA为每个会话独占用于存储会话特定的数据和临时变量。
• 常用内存参数如DATA_BUFFER_SIZE和VM_BUFFER_SIZE对数据库性能有重要影响需要根据实际需求进行合理配置。 4. YashanDB 进程详解
• 服务端核心进程YASDB负责处理客户端连接请求。
• 工作线程WORKER是客户端连接的会话主线程负责调度会话的业务执行。
• 后台线程包括 TCP 监听线程、数据脏块刷新线程、Redo 日志刷盘线程和检查点任务调度线程用于执行数据库的系统级任务。 5. YashanDB 事务和锁
• 事务是包含一个或多个 SQL 语句的工作单元具有原子性、一致性、隔离性和持久性。
• YashanDB 支持读已提交和可串行化两种隔离级别默认为读已提交。
• 锁机制用于处理并发操作中的写写冲突包括表锁和行锁。
• 锁相关视图如V$LOCK和V$LOCKED_OBJECT可用于监控锁的状态。