大查询 CPU 资源分配原则是什么?OLAP 和 OLTP 同存时的会抢占 CPU 资源么?

在使用 OceanBase 数据库时,可以通过配置参数 large_query_threshold 来定义执行时间超过一定阈值的查询操作为大查询。

如果系统中同时运行着大查询和小查询,OceanBase 数据库会将一部分 CPU 资源分配给大查询,并通过配置参数 large_query_worker_percentage(默认值为 30%)来限制执行大查询最多可以使用的租户活跃工作线程数。

OceanBase 数据库通过限制大查询能使用的租户活跃工作线程数来约束大查询最多能够使用的 CPU 资源,以此来保证系统还会有足够的 CPU 资源来执行 OLTP(例如,交易型的小事务)负载。

通过这样的方式来保证对响应时间比较敏感的 OLTP 负载能够得到足够多的 CPU 资源尽快地被执行。

另外需要提示的是:虽然 OceanBase 数据库可以做到大查询和 OLTP 资源的分配,large_query_threshold 参数也应设置在一个在合理的范围内,不应该设置成为一个过大的值。否则大查询很容易抢占系统的 CPU 资源而挤进而引发 OLTP 响应过慢甚至队列堆积的问题。

补充:

OB根据sql执行时间在内部分了2个队列。对于执行时间超过  large_query_threshold 丢到另外一个队列里,那个队列能使用的cpu资源受 large_query_worker_percentage 限制。

OB 这么设计是为了避免一些慢查询过多的占用 CPU资源。