作为一个分布式MPP数据库,ClustrixDB能够利用多个节点和核心来比单节点数据库更快地处理查询。有两个可调进程可以促进这一点。

Clustrix选择了一组默认参数来控制那些提供最常见工作负载的进程。根据您的特定工作负载、集群规范和应用程序的延迟需求,您可能希望调优其中一些变量。

Fair Scheduler

ClustrixDB公平调度器可以确保长时间运行的查询不独占CPU资源。它通过优先查询返回少行之前的查询返回的行数更大。这有助于平衡工作负载在节点和集群尤其有用,混合长期在线分析处理(OLAP)和短期的联机事务处理(OLTP)。公平调度器将优先考虑任何查询读取100(默认)或更少的行之前,任何正在运行的查询处理超过100行。全局变量gtm_schedule_til_batch_rows用于控制阈值的行。

如果没有公平调度程序,长时间运行的查询可能会占用CPU资源,并为较小的查询带来不必要的延迟。例如,如果一个较短的查询被分配给一个已经在执行长时间运行的查询的cpu核心,那么这个较短的查询将会经历意外的延迟。公平调度程序通过平衡长时间运行和短时间运行的查询之间的资源来解决这个问题。与长时间运行的查询相比,短时间运行的查询具有更高的查询延迟。

全局变量

以下全局变量控制公平调度程序。这些变量在会话中不可用。

Name

Description

Default Value

gtm_schedule_til 是否开启fair scheduler true
gtm_schedule_til_batch_rows

在重新调度之前要处理的行。

100

检查fair scheduler程序的影响

当查询正在运行时,您可以看到系统中fair scheduler程序的影响。在查询完成后,query.log将包含关于CPU等待的统计信息。

query.log

log中的cpu_wait和cpu_waittime_ns统计信息显示查询何时在等待CPU资源,这可能是由于公平调度程序取消了优先级。一旦查询完成,就会被记录到query.log中。

例如,您可以看到公平调度程序对这个查询进行了45,752次反优先级处理,总共花费了21,975,562,278纳秒(21秒)。

2017-03-01 16:49:01.530435 UTC ip-10-10-10-101 clxnode: INSTR SLOW SID:297145363 db=production user=production@10.10.10.254  
ac=Y xid=58c4dbf59b223826 sql="UPDATE event_activities SET is_processed = true where batch_id = '1488386700'" [Ok: 91275 rows updated]
time 9303.1ms; reads: 91276; inserts: 0; deletes: 0; updates: 182550; counts: 91275; rows_read: 182550; forwards: 365101; broadcasts: 0;
rows_output: 2; semaphore_matches: 0; fragment_executions: 365102; runtime_ns: 22744490156; cpu_waits: 45752; cpu_waittime_ns: 21975562278;
bm_fixes: 592280; bm_loads: 0; bm_waittime_ns: 0; lockman_waits: 1; lockman_waittime_ms: 6844; trxstate_waits: 0; trxstate_waittime_ms: 0;
wal_perm_waittime_ms: 0; bm_perm_waittime_ms: 0; sigmas: 0; sigma_fallbacks: 0; row_count: 91275; found_rows: -1; insert_id: 0; fanout: no;
attempts: 1  

system.transactions

这个system.transactions表显示了同一查询在运行时的信息:

sql> select xid, cpu, cpu_waits, cpu_waittime_ns from transactions where xid = ;
+---------------------+------+-----------+-----------------+
| xid | cpu | cpu_waits | cpu_waittime_ns |
+---------------------+------+-----------+-----------------+
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
+---------------------+------+-----------+-----------------+
rows in set (0.00 sec)

Fanout

Fanout是在每个节点的多个cpu上同时运行查询片段的过程。这允许扩展并行性,并缩短ALTER TABLE和大型OLAP查询的执行时间。

ClustrixDB能够使用多个cpu进行查询处理和ALTER TABLE之类的操作,这个过程叫做 Fanout。

当ClustrixDB执行一个查询时,它被分割成片段以供执行。然后将这些片段传递给各个cpu执行。根据查询类型和复杂性,每个片段可以有多个执行阶段。

Fanout是在每个节点的多个cpu上同时运行查询片段的过程。这允许扩展并行性,并缩短ALTER TABLE和大型OLAP查询的执行时间。

有关查询执行和碎片的详细信息可以在ClustrixDB评估模型的文档中找到。

控制Fanout的变量

Fanout由以下变量控制和配置。默认值适用于大多数工作负载。

Name Description Default Value Session Variable

Fanout Variables

query_fanout Enables query fanout. This takes precedence over all other fanout variables. True

query_fanout_insert_select

If enabled, INSERT INTO ... SELECT FROM ... queries will use Fanout. This takes precedence over query_fanout_all_writes.

True

query_fanout_all_writes Enable fanout for INSERT, UPDATE, and DELETE queries. Order of writes is not guaranteed. False

query_fanout_min_rows Only queries expected to read more than this many rows will fan out. 5000

Related Variables

gtm_schedule_til Enable the Completely Fair Scheduler. True
sigma_skiplist Enable skiplist containers for aggregates and sorting. False

禁用Fanout

这将完全禁用Fanout,每个查询只使用一个CPU。这将影响性能,只有在Clustrix支持建议的情况下才应该更改此设置。

sql> SET query_fanout = FALSE; 

表切片的最佳Fanout准则

要使用Fanout提供完全的并行性,请确保查询的表示具有足够的片。预期将从扇出中受益的大型表应该被分割到集群许可的CPU内核总数中。Under-slicing减少并行性。例如,如果一个节点上有三个表示片段,那么Fanout最多只能在该节点的三个cpu上运行三个查询片段。

Fanout警告

临时表不提供Fanout。临时表只包含一个片,并且只驻留在一个节点上。

18. ClustrixDB 管理CPU资源的更多相关文章

  1. 用 cgroups 管理 cpu 资源

    转自:http://xiezhenye.com/2013/10/用-cgroups-管理-cpu-资源.html 这回说说怎样通过 cgroups 来管理 cpu 资源.先说控制进程的 cpu 使用. ...

  2. Docker CPU 资源限制——CPU分片功能测试

    之前的一篇随笔——Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...

  3. 控制 Memory 和 CPU 资源的使用

    Resource Governor的出现,解决了在一台SQL Server实例上,管理多用户工作负载和资源隔离的需求,它允许管理员限制系统处理Requsts时所耗费的CPU 和 Memory资源的数量 ...

  4. 火狐浏览器无故卡死,未响应或者占大量cpu资源解决方案

    这是火狐社区的文章,对火狐浏览器无故卡死,未响应或者占大量cpu资源有详细的说明和解决,记录下!!! ++++++++++++++++++++++++++++++++ Firefox 挂起 如果您的 ...

  5. 汇编语言--CPU资源和存储器(二)

    二.CPU资源和存储器 需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口. 1.寄存器组 (1)16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存 ...

  6. 内存和CPU资源控制

    数据库系统的资源是指内存和CPU(处理器)资源,拥有资源的多寡,决定了数据查询的性能.当一个SQL Server实例上,拥有多个独立的工作负载(workload)时,使用资源管理器(Resource ...

  7. oracle12c之三 控制PDB中CPU 资源使用

      CPU资源隔离 数据库中,不同的PDB对主机CPU资源使用要求不同,那么我们就可以使用CDB resourceplans来管理不同pdb对CPU资源的使用. CDB Resource Plans ...

  8. nginx 性能优化的概述及在CPU资源方面的处理

    nginx的性能优化的概述 软件层面的提升硬件的使用率 增大CPU的利用率 增大内存的利用率 增大磁盘IO利用率 增大网络带宽利用率 提升硬件规格 网卡:万兆网卡.例如10G.25G.40G等 磁盘: ...

  9. docker19.03限制容器使用的cpu资源

    一,用--cpus限制可用的cpu个数 例子: [root@localhost liuhongdi]# docker run -idt --name kafka1 --hostname kafka1 ...

随机推荐

  1. P2814 家谱

    我真没什么创意了woc.. so,为什么一道水题是蓝色的???哦哦哦,水好像就是蓝色的,emmm那就不是恶意评分了嘤嘤嘤 ... 好吧实际上可能是非c党对于字符串的处理需要进行编号和结构体,会麻烦一点 ...

  2. 《React+Redux前端开发实战》笔记2:基于Webpack构建的Hello World案例(上)

    这次搭建分为两部分:一部分是前期必要配置,一部分是开发React代码. [基于Webpack的React Hello World项目] 1.前期必要配置 (1)首先要确保读者的开发设备上已经安装过No ...

  3. 2031 HDOJ 进制转换

    Problem Description 输入一个十进制数N,将它转换成R进制数输出.   Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=1 ...

  4. trigraph

    trigraph是c/c++对之前键盘无法输入一些符号而做出的补充设计,将以下字符用其他三个字符来代替 # ??= \ ??/ ^ ??' [ ??( ] ??) { ??< } ??> ...

  5. Luogu P3942 将军令

    题目 维护每个点子树中最深的没有被覆盖的点(仅计算这条链上的关键点)的距离. 若\(u\)为关键点,则\(d_u=-k-1\). 记录\(mx=\max\limits_{v\in son_u}d_v+ ...

  6. Centos下安装nc命令工具安装以及使用

    1)netcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有 ...

  7. vue引入jquery插件

    在vue中使用jquery插件 1.引入jquery 第一种方法:全局引入jquery 在webpack.base.conf.js,新增以下代码 plugins: [ new webpack.opti ...

  8. FP Style 的快排

    const quickSort = (list) => { if (!list || !list.length) return []; if (list.length === 1) return ...

  9. vue2-brace-editor代码编辑器添加自定义代码提示(修改源码)

    下载vue2-brace-editor源代码,先执行npm install安装项目依赖 在ace.component.vue组件的methods添加setCustomPrompts方法 修改完源码后, ...

  10. Azure云服务托管恶意软件

    微软Azure云服务被用于托管恶意软件,可控制多达90台电脑 BleepingComputer称,在早期报道中,5月份陆续出现了两起与Azure相关的恶意软件攻击事件: 1.自5月10日以来,Azur ...