一条sql是如何判断走的逻辑是用tp还是ap

在htap混合负载里,一条sql语句,是通过什么判断要走什么引擎,比如tp还是ap,是自动的吗,如果一个sql查询量很大,会自动选择吗?

@论坛小助手

如果你1个表有行存或者列存,优化器是会自动选择
比如点查走行存,大范围的数据扫描 聚合 这种就走列存,但是优化器肯定在某些场景是会出问题的
所以某些场景下的用绑定

如何判断SQL语句走TP还是AP引擎

根据检索到的文档片段,OceanBase数据库在HTAP混合负载场景下,对于一条SQL语句是通过以下方式自动判断其应该使用TP(事务处理)还是AP(分析处理)引擎执行的:

  1. 行列混存:OceanBase支持在同一张表上同时存在行存储和列存储两种形式。当创建一个既包含行存又包含列存的表时,如:

    CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, c3 INT, c4 VARCHAR(100)) WITH COLUMN GROUP (ALL COLUMNS, EACH COLUMN)
    
    • 对于典型的TP查询,例如更新单条记录的操作:
      UPDATE t1 SET c2 = 3, c4 = 'abc' WHERE c1 = 20445883;
      
      SQL优化器会选择读取行存来完成这个操作。
    • 对于典型的AP查询,比如对大量数据进行聚合操作:
      SELECT SUM(c3) FROM t1 GROUP BY c2;
      
      SQL优化器则会利用列存来加速查询。(来源)
  2. 查询成本与Auto DOP:除了选择合适的存储格式外,OceanBase还通过自动确定并行度(Auto DOP, Degree of Parallelism)的方式进一步优化查询性能。Auto DOP功能基于查询的实际执行成本评估是否启用并行处理以及计算适当的DOP值,以减小响应时间为目标。这意味着,如果某个查询涉及的数据量非常大且适合并行化处理,系统可能会自动增加该查询的DOP值,从而提高执行效率。但是需要注意的是,在配置不当的情况下,过度地并行化可能会影响到其他查询的性能。(来源)

  3. 实时HTAP能力:OceanBase设计有一个统一的分布式计算引擎,能够同时支撑OLTP类型的应用程序和复杂的OLAP应用程序运行在同一套系统中,使得用户可以通过单一集群满足大部分业务需求,而不需要额外部署专用的分析型数据库或ETL过程。这种设计不仅减少了维护多套系统的复杂性,也避免了数据同步带来的延迟问题。(来源)

综上所述,OceanBase能够智能地识别出哪些查询更适合使用TP模式、哪些更适合AP模式,并相应地调度资源以达到最优性能。特别是对于那些访问大量数据或者需要长时间运行的大查询来说,系统更倾向于采用高效的数据访问方法(如列式存储)以及更高的并行程度来提升其执行速度。

如果您有更多关于具体配置调整或特定应用场景下的疑问,欢迎继续咨询!

更多信息请查看:

  1. Auto DOP
  2. 行列混存
  3. OceanBase 数据库概述
  4. 产品 FAQ
  5. OceanBase 概述
  6. OceanBase AP 概述
  7. 工作线程