资讯详情

14-数据库学习笔记(并行查询架构)

📅 2026/10/12 4:54:41 | 华诺云谱 👁 阅读
14-数据库学习笔记(并行查询架构)
一.并行数据库基础概念如果一条SQL查询需要处理上亿条数据我们能不能让多个处理器多个磁盘同时工作从而缩短查询时间这就是并行数据库要解决的核心问题。1.为什么需要并行查询假设我们有一张包含1亿条记录的订单表需要执行下面的SQLSELECTproduct_id,SUM(amount)FROMordersGROUPBYproduct_id;这条SQL要完成三个主要任务扫描订单表读取大量数据。按照 product_id 对订单进行分组。计算每种商品的销售总额。如果只使用一个处理器执行就需要依次完成相应的工作耗时可能很长部分资源可能无法充分利用。传统串行的执行可以简单表示为读取1亿条订单→GROUP BY分组→计算SUM。那么我们能不能把这个任务分给多个处理器例如把订单表分成四份每个处理器分2500条订单让四个处理器同时计算。最后将局部结果进行合并得到最终的销售总额。这就是并行查询执行的基本思想。2. 并行查询执行的定义并行查询执行将一个数据库查询任务分解成多个可以并发执行的子任务利用多个处理器、多个磁盘或多个计算节点同时处理最终组合各个子任务的结果。它的核心目标是提高查询速度减少查询的响应时间。提高资源利用率同时利用多个 CPU 核心和磁盘。提高系统吞吐量在一定条件下让系统单位时间内完成更多查询。响应时间一条查询从开始到结束花了多久。吞吐量单位时间内系统完成了多少条查询。并行数据库既可以追求更快地完成一条大查询也可以让多条查询更高效地执行。3. 为什么现代数据库需要并行技术主要有以下四个原因1.数据规模增长数据从几万条发展到数亿、数十亿条2.多核处理器普及一台服务器里就有很多 CPU 核心3.磁盘与 I/O 瓶颈大量数据的读取可能成为性能瓶颈4.复杂分析任务增加聚合、排序、连接等操作需要处理大量数据但是数据库查询不一定是CPU越多就越快。如果查询的瓶颈在磁盘 I/O网络通信锁竞争即使增加处理器也不一定能够显著提升性能。4.并行数据库与分布式数据库的区分并行数据库关注如何同时完成任务分布式数据库关注数据与计算如何分布在多个节点上以及这些节点如何协同。1并行数据库是什么并行数据库是一类利用多个处理单元协同执行数据库任务的系统其主要目标通常是提升查询性能和处理能力。它可以采用不同的硬件架构共享内存架构多个处理器共享同一片主内存并通过共享内存访问数据。共享磁盘架构多个计算节点拥有各自的内存但能够访问共享存储。无共享架构每个节点有自己的 CPU、内存和本地存储节点之间通过网络通信。2分布式数据库是什么分布式数据库是指数据分布在多个通过网络连接的计算节点或站点上并通过相应机制协同提供数据库服务的系统。例如一家电商公司有三个数据中心分别部署在北京、上海和广州。北京节点存储部分订单数据。上海节点存储部分用户数据。广州节点存储部分商品数据。当用户发起查询时系统可能需要访问一个或多个节点再将结果汇总返回。二.数据库进程调度模型数据库进程调度模型研究的是数据库中的多个任务应该由谁执行、什么时候执行以及如何分配处理器资源。1.为什么数据库需要进程调度假设有三个用户同时向数据库提交查询-- 查询 A扫描订单表SELECT*FROMorders;-- 查询 B查询用户信息SELECT*FROMusersWHEREid100;-- 查询 C统计销售额SELECTproduct_id,SUM(amount)FROMordersGROUPBYproduct_id;这三个查询的特点不同查询 A 可能需要读取大量数据。查询 B 可能很快就能完成。查询 C 可能需要大量 CPU 运算和数据聚合。如果数据库只有一个 CPU 核心或者可用的执行线程有限就需要安排这些任务的执行顺序如果有多个 CPU 核心则还需要决定哪些任务可以同时执行。这就是数据库调度要解决的问题。2.两种经典进程调度方式1非抢占式调度一个任务开始执行后通常会持续执行直到它主动让出 CPU、等待 I/O、完成任务或者进入其他可调度状态。举个简化例子任务 A 需要 8 ms CPU 时间。任务 B 需要 2 ms CPU 时间。A 先执行B 后到达。假设 A 不主动让出 CPU那么 B 即使只需要 2 ms也可能必须等待 A。优点实现相对简单切换开销可能较小。缺点长任务可能影响短任务的响应时间。2抢占式调度操作系统可以在适当时机暂停当前线程让另一个线程获得 CPU。例如使用时间片轮转调度每个可运行线程每次最多执行一个时间片时间片耗尽后重新参与调度。优点有利于公平分配 CPU 时间避免一个可运行任务长期独占 CPU。缺点上下文切换需要开销而且抢占 CPU 并不能自动解决数据库锁竞争、I/O 瓶颈等问题。3.什么是进程进程正在运行的程序比如在电脑上打开微信浏览器VS Code等等这些软件在任务管理器里面就能看到微信.exe,Chorme.exs.Code.exe这些都是进程。在数据库里面每个进程都是独立运行的。4.什么是线程进程可以理解为一个进程里面的多个执行路线。比如打开浏览器Edge就是一个进程。里面一个线程负责网页加载一个线程负责播放视频一个线程负责下载5.一工作器一进程模型数据库有一个主管理进程每来一个客户端连接就单独创建一个独立的操作系统工作进程专门处理这个连接的所有请求。例如三个客户端同时访问数据库为什么数据库需要进程因为进程之间相互隔离。例如进程A内存空间A变量缓存执行状态进程B内存空间B变量缓存执行状态二者互不影响。如果进程A崩溃进程B完好其他用户可能还能继续使用。创建进程的缺点创建进程会很繁重比如创建一个进程就需要分配内存创建地址空间初始化资源整体成本就会很高6.一工作器一线程模型数据库服务器通常运行在一个进程中内部创建多个工作线程。每个工作线程负责处理分配给它的客户端请求。这个模型解决了进程太繁重的问题。多个用户共享一个数据库进程每个用户分配一个线程。假设仍然有三个客户端线程是操作系统进行 CPU 调度的重要执行单位。同一进程中的线程通常共享进程的虚拟地址空间。全局变量和堆内存。进程打开的文件及其他部分资源。为什么线程比进程轻因为线程共享很多东西。进程A有自己的内存进程B有自己的内存这样子通信就会很麻烦。而线程之间是共享内存的线程之间可以直接访问和共享数据。所以创建线程更快切换线程更快。线程存在的问题因为共享内存如果两个线程同时修改账户余额如果没有进行控制就会出现错误所以线程模型就需要锁信号量互斥机制等保证多个线程安全访问数据。7.嵌入式数据库模型前两种模型都是在数据库服务器独立运行的而嵌入式数据库直接进入应用程序里面。数据库引擎通常作为库集成到应用程序中应用程序可以直接调用数据库接口而不必通过独立的数据库服务器进程处理每一次请求。8.总结三.查询并行执行分类查询并行执行主要解决的问题就是一条SQL查询如何拆成多个部分让多个CPU线程或者机器同时执行。1.为什么需要查询并行执行假设一个订单表有1亿条数据如果是单线程则会将扫描分组聚合输出结果完整执行一遍耗时可能几十秒甚至几分钟。如果并行执行多个执行单元同时工作查询时间理论上就会降低。2.查询间并行查询间并行的含义就是多条SQL查询同时进行。例如数据库同时收到查询A查询用户信息查询B统计销售额查询C生成报表。数据库就会将查询A分配给CPU1将查询B分配给CPU2将查询C分配给CPU3三个查询同时运行。主要提高了系统吞吐量适合场景多用户数据库系统如银行同时有查询余额ATM取款交易记录查询在线事物处理如电商系统查询短请求多并发高3.查询内并行查询内并行的意思就是将一个查询内部进行并行。也就是把一条SQL拆成多个子任务。例如扫描1亿条数据查询内并行就会将这个任务拆成4份交给4个CPU分别处理25%最后进行结果合并。主要提高了单个查询响应时间。实现方式数据并行相同任务不同数据。CPU1扫描CPU2:扫描CPU3扫描任务并行不同任务同时进行。CPU1扫描CPU2:过滤CPU3:排序四.磁盘I/O并行技术SQL执行过程SQL请求→查询执行器→读取磁盘数据→CPU处理→输出结果其中CPU运算速度非常快内存访问较快磁盘访问较慢。所以数据库最大的瓶颈经常是磁盘IO而不是CPU。如果有多个磁盘同时读取数据就会减少时间这就是磁盘IO并行。核心思想让多个磁盘同时工作而不是一个磁盘独自承担所有访问压力。1.数据分布思想把一个大表拆开放到不同磁盘。例如所有的访问数据集中放在一个磁盘数据划分给多个磁盘后读取速度就会提高。这种思想在并行数据库中叫做数据并行2.磁盘条带化思想把连续数据分散到多个磁盘。例如一个磁盘中原始数据有A B C D E F G H。条带化后变为磁盘AA C E G。磁盘BB D F H。两个磁盘同时进行就会提高顺序读写速度。优点速度快缺点一个磁盘坏数据可能丢失3.数据复制思想同一份数据存多个地方例如有用户表磁盘1北京节点磁盘2上海节点磁盘3广州节点数据库可以选择最近的磁盘或者多个磁盘同时读取。优点提高了读取性能提高了可靠性相当于有备份缺点写入复杂如果修改数据三个磁盘都需要更新需要一致性控制
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑