数据库管理249期 2024-10-08
数据库管理-第249期 23ai:全球分布式数据库-请求路由与查询过程(20241008)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭
今天给Oracle全球分布式数据库基本介绍收个尾。
1 客户端应用请求路由
为了将一个客户端应用请求直接路由到某个分片,需要使用Oracle驱动并在请求中提供分片键来连接到分片。
1.1 分片键
所有需要高性能和故障隔离的数据库请求必须只访问与分片键的单个值相关的数据。应用程序在建立数据库连接时必须提供分片键。如果是这样,请求将直接路由到相应的分片。
可以在同一会话中处理多个请求,只要它们都与同一分片键相关。此类事务通常访问10或100行。单分片交易的示例包括订单输入、客户账单记录的查找和更新,以及订阅者文档的查找和升级。
必须访问与分片键的多个值相关联的数据,或分片键值未知的数据库请求必须由查询协调器发出,该协调器协调跨多个分片的查询并行处理。
1.2 Oracle连接驱动
在运行时,连接池充当分片控制器,通过在连接池中的连接之间路由数据库请求。Oracle数据库在OCI、JDBC和ODP.NET等数据访问驱动程序中支持连接池。这些驱动程序可以识别作为连接请求的一部分指定的分片密钥。同样,JDBC客户端的Oracle通用连接池(UCP)可以识别连接URL中指定的分片密钥。Oracle UCP还使Apache Tomcat和WebSphere等非Oracle应用程序客户端能够与Oracle全球分布式数据库一起工作。
Oracle客户端使用UCP缓存路由信息,根据应用程序提供的分片密钥,将数据库请求直接路由到适当的分片。这种数据库请求的数据依赖路由消除了额外的网络跳变,降低了高容量应用程序的事务延迟。
路由信息在于分片的初始连接期间缓存,该连接是使用分片控制器建立的。在缓存范围内对分片键的后续数据库请求直接路由到分片,绕过分片控制器。
与UCP一样,分片控制器可以处理连接字符串中指定的分片密钥并缓存路由信息。然而,UCP使用已建立的连接路由数据库请求,而分片控制器将连接请求路由到分片。当分片不可用或分片拓扑发生变化时,路由缓存会自动刷新。对于高性能、依赖数据的路由,Oracle建议在访问分片数据库中的数据时使用连接池。
单独的连接池必须用于直接路由和通过查询协调器路由请求。对于直接路由,必须为读写和只读工作负载创建单独的全局服务。只有使用Data Guard复制时才是如此。对于代理路由,请使用分片目录数据库上的GDS$CATALOG服务。
2 查询过程和查询协调器
Query Coordinator,查询协调器,是分片目录的一部分。查询协调器为分片数据库提供查询处理支持。通过访问分片目录中的分片数据库拓扑元数据,查询协调器在三种常见情况下起着重要作用:
- 无分片键的单分片查询
如果应用程序没有传递分片键,查询协调器会找出哪个分片包含查询所需的数据,并将查询发送到那里进行处理。 - 多分片查询
查询协调器还可以协助处理需要来自多个分片的数据的查询,称为多分片查询,例如SELECT COUNT(*)from Customer。 - 聚合查询
查询协调器处理通常在报告中使用的聚合查询,例如销售数据的聚合。
在每种情况下,查询协调器的SQL编译器都会自动识别相关的分片,并协调所有参与分片的查询处理。
在单分片查询场景中,整个查询在单个参与的分片上处理,查询协调器只是将处理后的行传递回客户端。
对于多分片查询,SQL编译器会分析查询并将其重写为由参与的分片发送和处理的查询片段。查询被重写,以便大部分查询处理都在参与的分片上完成,然后由协调器聚合。
查询协调器使用Oracle数据库的并行查询引擎来优化多分片查询,并将其并行推送到分片。每个分片都处理它所拥有的数据子集的查询。然后将结果返回给查询协调器,后者将结果发送回客户端。
本质上,分片充当查询协调器发出的查询的计算节点。因为计算被推送到数据上,所以分片和协调器之间的数据移动减少了。这种安排还通过将处理从查询协调器尽可能多地卸载到分片上,实现了资源的有效利用。
2.1 指定一致性级别
可以为多分片查询指定不同的一致性级别。例如,您可能希望通过一些查询来避免跨分片进行SCN同步的成本,并且这些分片可以全局分布。另一个用例是,当您使用备用数据进行复制时,对于多分片查询来说,稍微陈旧的数据是可以接受的,因为结果可以从主数据及其备用数据中获取。多分片查询必须通过在所有分片的最高公共SCN处发出查询来保持全局读取一致性(CR)。
2.2 高可用与性能
强烈建议在Oracle MAA(零数据丢失故障转移)下使用Oracle Data Guard保护查询协调器,并启用快速启动故障转移。查询协调器可以选择启用Oracle RAC,以获得额外的可用性和可扩展性。为了提高多分片查询工作负载的可扩展性和可用性,只读模式下的Oracle Active Data Guard备用分片目录数据库可以充当多分片的查询协调器。
在聚合用例和在没有分片键的情况下发出SQL时,与直接的、基于分片键的路由相比,将获得较低的性能体验。
总结
本期简单介绍了Oracle全球分布式数据库的请求路由与查询过程。到此Oracle全球分布式数据库的基础介绍已完结,后期数据库OP版本发布后,将进行RAC集群和Oracle全球分布式数据库的搭建。
老规矩,知道写了些啥。