【数据库】各种并行架构如何进行进程和内存协调?

共享内存

共享内存并行系统:下图所示为共享内存体系架构,所有的处理机可以使用相同的内存和硬盘,并且拥有大致相同的性能。

共享内存体系架构图

共享内存机器的进程模型很自然地遵循单处理机的方式。

主要挑战:修改查询执行层,从而利用将一条单一的查询语句并行到多个处理器上能力。

无共享

无共享并行系统:下图所示为无共享体系架构,由多个独立计算机的集群组成的,这些计算机可以高速地通过网络进行互连通信,或者逐渐频繁地在商业网络组件上通信。对于给定的一个系统,无法直接访问另一个系统的内存和硬盘。

无共享体系架构图
Q:DBMS在无共享并行系统上如何协调任务?

每一个节点都能够接受客户端 SQL 请求、访问需要的元数据、编译 SQL 请求、进行数据访问,正如上述描述的单一共享内存一样。主要的区别就是,集群中的每个系统仅仅保存一部分的数据。对于每一个 SQL 请求,无共享系统中的每一个节点不只是单独执行查询本地的数据,这个请求会被发送到集群中的其他成员,然后所有的计算机并行地执行查询本地所保存的数据。每个表格会通过水平数据分区传播到集群的多个系统中,因此,每个处理器可以独立于其他处理器执行。

数据分区:数据库中的每一个元组被分配到到单独的机器,每一张表被水平地切分,然后分布到整个系统。
典型的数据分区方案:元组属性基于哈希的分区,元组属性基于范围的分区,round-robin,以及混合型分区方案(前两种方案的混合)。

DBMS协调的两大困难

  1. 对于数据库管理员,如何合理明智地确定表的分布?
  2. 对于查询优化器,怎样在负载分区方面做得很好。

单节点故障

在一个无共享系统中,集群中一个单一的节点发生故障,并不一定会影响到其他的节点。但是,肯定会影响 DBMS 的整体运行,因为,失败的节点里寄存着数据库中部分的数据。

解决方案

  1. 如果有任何一个节点发生故障,就停止运行所有的节点;这本质上是模拟在一个共享内存系统中将会发生的事情。
  2. 在Informix 上称为"数据跳跃",允许在正常的节点上继续执行查询,而跳过故障节点的数据。这在数据的可用性比结果的完整性更重要的情况下是很有用的。
  3. 冗余方案,范围从完整的数据库失败恢复(需要两倍的计算基数量和软件数量)到类似于链式分簇的细粒度冗余。

链式分簇比其他更简单机制的优势是:
(a)需要部署更少的机器,就可以保证比其他简单机制获得更好的可用性;
(b)当一个节点发生故障时,系统负载将会相当均匀地分配到剩下的节点:剩下的 n-1 个节点,每个完成原来工作的 n/(n-1)。这种形式的线性性能下降,会随着节点的失败而持续。

共享磁盘

共享磁盘系统:下图所示为共享磁盘体系架构,所有的处理器可以访问具备大致相同性能的磁盘,但是,不能访问彼此的 RAM。

共享磁盘体系架构图

优势:管理成本较低。共享磁盘系统的 DBAs 没必要为了实现并行而考虑对表进行分区并分布到不同计算机上。
缺陷:当数据未到达存储子系统时,如果数据由于硬件或软件故障而损坏或发生其他方式的毁坏,则系统所有的节点只能访问这些损坏的页面。如果存储子系统使用 RAID 或者其他数据冗余技术,则损坏的页面将会被冗余储存,但所有的副本仍然是损坏的。

Q:共享磁盘系统如何进行数据共享协调?

共享磁盘系统依赖于一个分布式锁管理设备和一个管理分布式缓冲池的高速缓存一致性协议。

非均衡内存访问

非均衡内存访问系统NUMA:NUMA 的硬件架构是处于无共享系统和共享内存系统之间的一个有趣的中间地带,它们比无共享集群更容易编程,同时,比共享内存系统拥有更大规模的处理器,这样就可以避免共享点的争用,例如共享内存系统总线。

pod:每一个内存和 CPU 相结合的子集通常被称为一个"pod"。

NUMA 设计模式的使用已经允许共享内存系统扩展到更多数量处理器的规模,从而使得 NUMA 共享内存多处理器如今已经非常普遍了,然而,NUMA 集群并没有成功取得任何显著的市场份额。

DBMS 可以在 NUMA 共享内存系统上运行的一种方式是,通过忽略内存访问的非均衡性。

DBMS 需要使用优化,以避免内存访问瓶颈。

  1. 当为一个处理器分配内存使用的时候,尽量使用本地的内存(避免使用远程内存);
  2. 如果可能的话,保证一个 DBMS 使用者被安排到与之前相同的硬件处理器。

多线程和多处理器

Q:为什么需要在进程间迁移线程?

当在多进程上运行多个 DBMS 线程的时候,就会出现这样的时刻,一个进程拥有大部分的工作,其他进程(处理器也一样)就被闲置了。

当 DBMS 线程映射到多个操作系统进程的时候需要考虑

  1. 需要使用多少个操作系统进程;
  2. 怎么将 DBMS 线程分配到操作系统线程;
  3. 怎么分配到多个操作系统进程。

一个好的经验法则就是每个物理处理器产生一个进程。这样就可以最大化硬件固有的并行度,同时最小化每个进程的内存开销。

标准的操作规程

主要的DBMS 供应商都支持共享内存的并行:

  • 共享内存:所有主要的商业 DBMS 提供对共享内存并行的支持,包括:IBM DB2、Oracle 和 Microsoft SQL Server;
  • 无共享:这种模型被 IBM DB2、Informix、Tandem 和 NCR Teradata 所支持;Greenplum提供了一种 PostgreSQL 的定制版本,可以支持无共享并行;
  • 共享磁盘:这种模型被 Oracle RAC、RDB(是甲骨文从数字设备公司收购而来的)和 IBM DB2 的 zSeries 所支持。

到目前为止,没有一款领先的商业系统在一个单一的代码库中同时支持无共享模式和共享磁盘模式。Microsoft SQL Server 也没有实现。

补充内容

重要挑战

  1. 访问芯片外内存和磁盘;
  2. 故障恢复自动化。

冗余的多种实现方式

  1. 在数据存储级的复制(存储区域网络);
  2. 在数据库存储引擎级别的复制;
  3. 由查询处理器执行冗余查询;
  4. 在客户端软件级别自动生成冗余数据库请求(例如,WEB 服务器或应用程序服务器)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随处可见的打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值