Yashan DB 体系结构
一、体系结构概况
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`)可用于监控锁的状态。
相关文章:
Yashan DB 体系结构
一、体系结构概况 1.1 线程管理 YashanDB采用多线程架构,线程分为两类: • 工作线程(Worker Threads):每个客户端连接到数据库实例时,会创建一个工作线程。工作线程负责处理客户端的SQL请求,执…...
测试工程师Deepseek实战之如何反向PUA它
问: 你是一名资深测试开发工程师 帮我设计一个提效工具,具有以下功能: 1.页面使用PYQT5设计,用两个输入控件,最好是日期类型的控件,第一个日期控件作为开始日期,第二个日期控件作为结束日期;前后…...
Windows系统中在VSCode上配置CUDA环境
前置步骤 安装符合GPU型号的CUDA Toolkit 配置好 nvcc 环境变量 安装 Visual Studio 参考https://blog.csdn.net/Cony_14/article/details/137510909 VSCode 安装插件 Nsight Visual Studio Code Editionvscode-cudacpp 安装 cmake 并配置好环境变量 注:Windows 端…...
React Native 0.76 升级后 APK 体积增大的原因及优化方案
在将 React Native 从 0.71 升级到 0.76 后,打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化,最终找到了解决方案,并将优化过程整理如下。 1. React Native 0.76 体积增大的可能原因 (1) 新架构默认启用 React Native 0.76 默认启用了 New Architecture(新架…...
pycharm找不到conda可执行文件
conda 24.9.2 在pycharm的右下角就可以切换python解释器了...
定时任务框架
常用定时任务框架 JDK 自带的 ScheduledExecutorService 适用于轻量级定时任务,基于线程池实现。API 简单,适用于小规模任务调度。 Quartz 强大的 Java 任务调度框架,支持 Cron 表达式、分布式集群、持久化等。适用于复杂调度场景࿰…...
ESP32S3读取数字麦克风INMP441的音频数据
ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framew…...
利用后缀表达式构造表达式二叉树的方法
后缀表达式(逆波兰表达式)是一种将运算符放在操作数之后的表达式表示法。利用后缀表达式构造表达式二叉树的方法主要依赖于栈结构。 转换步骤 初始化 创建一个空栈。 遍历后缀表达式 对后缀表达式的每个符号依次处理: 遇到操作数 如果当前符…...
使用express创建服务器保存数据到mysql
创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…...
YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及
YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…...
SQLAlchemy系列教程:如何防止SQL注入
SQL注入是一种常见的安全漏洞,它允许攻击者通过应用程序的SQL查询操纵数据库。使用ORM工具(如SQLAlchemy)提供的内置功能可以帮助减轻这些风险。本教程将指导您完成保护SQLAlchemy查询的实践。 了解SQL注入 当攻击者能够通过用户输入插入或操…...
1. 树莓派上配置机器人环境(具身智能机器人套件)
1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...
基于SpringBoot的智慧停车场小程序(源码+论文+部署教程)
运行环境 • 前端:小程序 Vue • 后端:Java • IDE工具:IDEA(可自行选择) HBuilderX 微信开发者工具 • 技术栈:小程序 SpringBoot Vue MySQL 主要功能 智慧停车场微信小程序主要包含小程序端和…...
【从零开始学习计算机科学】数字逻辑(九)有限状态机
【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…...
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...
AI大模型概念知多少
什么是大模型?什么是模型参数 1)现在的大模型要解决的问题,就是一个序列数据转换的问题: 输入序列 X X[x1 ,x2 ,...,xm ], 输出序列Y[y1 ,y2 ,…,yn ],X和Y之间的关系是:YWX。 “大模型”这个词…...
powermock,mock使用笔记
介于日本的形式主义junit4单体测试,特记笔记,以下纯用手机打出来,因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1,测试类头部打注解 RunWith(PowerMockRunner.class…...
基于置换对称性的模型融合:实现凸盆地单盆地理论
【摘要】 一种合并神经网络模型的新方法,通过置换对称性来合并模型。即使在大规模的非凸优化问题中,神经网络损失景观似乎通常只有一个(几乎)封闭的盆地,这在很大程度上归因于隐藏层单元置换对称性。作者介绍了三种算法,用于将一个模型的单元置换为与参考模型对齐,从而…...
把握好自己的节奏, 别让世界成为你的发条匠
我见过凌晨两点还在回复工作群消息的职场妈妈,也见过凌晨三点抱着手机刷短视频的年轻人。 地铁站台的上班族永远在狂奔,连刚会走路的小孩都被早教班塞满了日程表。 现如今生活节奏快,像一只巨大的发条,每个人都被拧得紧紧的&#…...
linux awk命令和awk语言
linux awk和awk语言 通常大家说的awk几乎都是在linux/unix中使用的awk命令,见下, https://www.geeksforgeeks.org/awk-command-unixlinux-examples/ 作为命令使用的话,存在下内容 Awk 是一个工具,使程序员能够编写小巧但有效的…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
