华为云用户手册

  • 规格约束 告警字符串长度上限为2048。如果告警信息超过这个长度(例如存在大量未收集统计信息的超长表名,列名等信息)则不告警,只上报warning: WARNING, "Planner issue report is truncated, the rest of planner issues will be skipped" 如果query存在limit节点(即查询语句中包含limit),则不会上报limit节点以下的Operator级别的告警。 对于“数据倾斜”和“估算不准”两种类型告警,在某一个plan树结构下,只上报下层节点的告警,上层节点不再重复告警。这主要是因为这两种类型的告警可能是因为底层触发上层的。例如,如果在scan节点已经存在数据倾斜,那么在上层的hashagg等其他算子很可能也出现数据倾斜。
  • 审视和修改表定义 在分布式框架下,数据分布在各个DN上。一个或者几个DN的数据存在一块物理存储设备上,较好的表定义需要满足以下要求: 表数据均匀分布在各个DN上,以防止单个DN对应的存储设备空间不足造成集群有效容量下降。选择合适分布列,避免数据分布倾斜可以实现该点。 表Scan压力均匀分散在各个DN上,以避免单DN的Scan压力过大,形成Scan的单节点瓶颈。分布列不选择基表上等值filter中的列可以实现该点。 减少扫描数据量。通过分区的剪枝机制可以实现该点。 尽量减少随机IO。通过聚簇/局部聚簇可以实现该点。 尽量避免数据shuffle,减小网络压力。通过选择join-condition或者group by列为分布列可以最大程度的实现这点。 从上述描述来看表定义中最重要的一点是分布列的选择。创建表定义一般遵循图1所示流程。表定义在数据库设计阶段创建,在SQL调优过程中进行审视和修改。 图1 表定义流程 审视和修改表定义的具体操作方法,请参见基于表结构设计和调优提升 GaussDB (DWS)查询性能。 父主题: SQL调优
  • 背景信息 ANALYZE语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,以生成最有效的执行计划。 建议在执行了大批量插入/删除操作后,例行对表或全库执行ANALYZE语句更新统计信息。目前默认收集统计信息的采样比例是30000行(即:guc参数default_statistics_target默认设置为100),如果表的总行数超过一定行数(大于1600000),建议设置guc参数default_statistics_target为-2,即按2%收集样本估算统计信息。 对于在批处理脚本或者存储过程中生成的中间表,也需要在完成数据生成之后显式的调用ANALYZE。 对于表中多个列有相关性且查询中有同时基于这些列的条件或分组操作的情况,可尝试收集多列统计信息,以便查询优化器可以更准确地估算行数,并生成更有效的执行计划。
  • 操作步骤 收集SQL中涉及到的所有表的统计信息。在数据库中,统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧会造成执行计划严重劣化,从而导致性能问题。从经验数据来看,10%左右性能问题是因为没有收集统计信息。具体请参见更新统计信息。 审视和修改表定义。 通常情况下,有些SQL语句可以通过查询重写转换成等价的,或特定场景下等价的语句。重写后的语句比原语句更简单,且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。SQL语句改写规则介绍了几种常用的通过改写SQL进行调优的方法。 通过查看执行计划来查找原因。如果SQL长时间运行未结束,通过EXPLAIN命令查看执行计划,进行初步定位。如果SQL可以运行出来,则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况,以便更精准地定位问题原因。有关执行计划的详细介绍请参见SQL执行计划。 针对EXPLAIN或EXPLAIN PERFORMANCE信息,定位SQL慢的具体原因以及改进措施,具体参见SQL调优进阶。 用户可以通过指定join顺序,join、stream、scan方法,指定结果行数,指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优,以提升查询的性能。详细请参见使用Plan Hint进行调优。 为了保证数据库性能的持续优质,建议例行维护表和例行重建索引。 (可选)GaussDB(DWS)支持在资源富足的情况下,通过算子并行来提升性能。详细请参见SMP并行执行。
  • 调优手段之GUC参数 查询优化的主要目的是为查询语句选择高效的执行方式。 如下SQL语句: 1 2 SELECT count(1) FROM customer inner join store_sales on (ss_customer_sk = c_customer_sk); 在执行customer inner join store_sales的时候,GaussDB(DWS)支持Nested Loop、Merge Join和Hash Join三种不同的Join方式。优化器会根据表customer和表store_sales的统计信息估算结果集的大小以及每种join方式的执行代价,然后对比选出执行代价最小的执行计划。 正如前面所说,执行代价计算都是基于一定的模型和统计信息进行估算,当因为某些原因代价估算不能反映真实的cost的时候,就需要通过guc参数设置的方式让执行计划倾向更优规划。
  • 调优手段之统计信息 GaussDB(DWS)优化器是典型的基于代价的优化 (Cost-Based Optimization,简称CBO)。在这种优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。这些特征值就是统计信息。从上面描述可以看出统计信息是查询优化的核心输入,准确的统计信息将帮助优化器选择最合适的查询规划,一般来说通过ANALYZE语法收集整个表或者表的若干个字段的统计信息,周期性地运行ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯。
  • LLVM使用建议 目前LLVM在数据库内核侧已默认打开,用户可结合上述的分析进行配置,总体建议如下: 设置合理的work_mem,在允许的条件下尽可能设置较大的work_mem,如果出现大量下盘,则建议关闭LLVM动态编译优化(通过设置enable_codegen=off实现)。 设置合理的codegen_cost_threshold(默认值为10000),确保小数据量场景下避免使用LLVM动态编译优化。当codegen_cost_threshold的值设定后,因使用LLVM动态编译优化引入性能劣化,则建议增加codegen_cost_threshold的取值。 对于表达式计算使用LLVM动态编译优化,如果存在大量的调用C-函数的场景,建议关闭LLVM动态编译优化。 In表达式后常量列表长度不能超过10,否则不能执行LLVM编译优化。 在资源许可的情况下,数据量越大,可获得的性能提升效果越好。
  • 其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现,还与当前所选择的硬件环境等有关。 表达式调用C-函数个数 数据库内部针对表达式计算并未实现全codegen,即在整个表达式计算中部分表达式实现了codegen,部分直接调用原本的C代码。如果整个表达式计算中后者占据了主要部分,使用LLVM动态编译优化,可能会导致性能劣化。通过设置log_min_messages的级别为DEBUG1可以查看到哪些表达式直接调用了C代码实现。 内存资源 LLVM特性的一个重要思想是保障数据的局域特性,即数据应尽可能的存放在寄存器中。同时应减少数据加载,因此在使用LLVM优化时应设置足够大的work_mem,保证对应使用LLVM优化的执行代码整个过程在内存中实现,否则可能引起性能劣化。 优化器代价估算 LLVM特性实现了简易的代价估算模型,即依据当前参与节点运算的表大小决定当前节点是否考虑使用LLVM动态编译优化。如果优化器低估了实际参与运算的行数,则原本可获得收益的未正常获得收益。反之亦然。
  • LLVM适用场景与限制 适用场景 支持LLVM的表达式。查询语句中存在以下的表达式支持LLVM优化: Case…when… 表达式 In表达式 Bool表达式 (And/Or/Not) BooleanTest表达式 (IS_NOT_KNOWN/IS_UNKNOWN/IS_TRUE/IS_NOT_TRUE/IS_FALSE/IS_NOT_FALSE) NullTest表达式 (IS_NOT_NULL/IS_NULL) Operator表达式 Function表达式 (lpad, substring, btrim, rtrim, length) Nullif表达式 表达式计算支持的数据类型包括bool,tinyint,smallint,int,bigint,float4,float8,numeric,date,time,timetz,timestamp,timestamptz,interval,bpchar,varchar,text,oid。 仅当表达式出现在以下场景时才会考虑是否使用LLVM动态编译优化: 向量化执行引擎中Scan节点的filter; Hash Join节点中的complicate hash condition、hash join filter、hash join target; Nested Loop节点中的filter、join filter; Merge Join节点的merge join filter、merge join target; Group节点中的filter表达式。
  • 其他因素对SMP性能的影响 除了资源因素外,还有一些因素也会对SMP并行性能造成影响。例如分区表中分区数据不均,以及系统并发度等因素。 数据倾斜对SMP性能的影响 当数据中存在严重数据倾斜时,并行效果较差。例如某表join列上某个值的数据量远大于其他值,开启并行后,根据join列的值对该表数据做hash重分布,使得某个并行线程的数据量远多于其他线程,造成长尾问题,导致并行后效果差。 系统并发度对SMP性能的影响 SMP特性会增加资源的使用,而在高并发场景下资源剩余较少。所以,如果在高并发场景下,开启SMP并行,会导致各查询之间严重的资源竞争问题。一旦出现了资源竞争的现象,无论是CPU、I/O、内存或者网络资源,都会导致整体性能的下降。因此在高并发场景下,开启SMP经常不能达到性能提升的效果,甚至可能引起性能劣化。
  • SMP相关参数配置建议 如果要打开SMP自适应功能,要设置query_dop=0,需同步调整以下相关参数值,以获取更佳的dop选择: comm_usable_memory 当系统内存较大时,max_process_memory设置较大,可适当调大该值,建议设置为max_process_memory的5%,默认值为4GB。 comm_max_stream 设置建议值为:comm_max_stream=Min(dop_limit * dop_limit * 20 * 2, max_process_memory(字节数) * 0.025 / 总DN数 / 260),且该值在comm_max_stream取值范围内。 max_connections 设置建议值为:max_connections=dop_limit * 20 * 6 + 24,且该值在max_connections取值范围内。 公式中的dop_limit为集群中每个DN对应的CPU数,计算公式为:dop_limit = 单机器的CPU逻辑核数 / 单机器的DN数。
  • 资源对SMP性能的影响 SMP架构是一种利用富余资源来换取时间的方案,计划并行之后必定会引起资源消耗的增加,包括CPU、内存、I/O和网络带宽等资源的消耗都会出现明显的增长,而且随着并行度的增大,资源消耗也随之增大。当上述资源成为瓶颈的情况下,SMP无法提升性能,反而可能导致集群整体性能的劣化。SMP支持自适应特性,该特性会根据当前资源和查询特征,动态选取最优的并行度。下面对各种资源对SMP性能的影响情况分别进行说明: CPU资源 在一般客户场景中,系统CPU利用率不高的情况下,利用SMP并行架构能够更充分地利用系统CPU资源,提升系统性能。但当数据库服务器的CPU核数较少,CPU利用率已经比较高的情况下,如果打开SMP并行,不仅性能提升不明显,反而可能因为多线程间的资源竞争而导致性能劣化。 内存资源 查询并行后会导致内存使用量的增长,但每个算子使用内存上限仍受到work_mem等参数的限制。假设work_mem为4GB,并行度为2,那么每个并行线程所分到的内存上限为2GB。在work_mem较小或者系统内存不充裕的情况下,使用SMP并行后,可能出现数据下盘,导致查询性能劣化的问题。 网络带宽资源 为了实现查询并行执行,会新增并行线程间的数据交换算子。对于Local类Stream算子,所需要进行数据交换的线程在同一个DN内,通过内存交换,不会增加网络负担。而非Local类算子,需要通过网络进行数据交换,因此会加重网络负担。当网络资源成为瓶颈的情况下,并行可能会导致一定程度的劣化。 I/O资源 要实现并行扫描必定会增加I/O的资源消耗,因此只有在I/O资源充足的情况下,并行扫描才能够提高扫描性能。
  • SMP适用场景与限制 SMP适用场景: 支持并行的算子 计划中存在以下算子支持并行: Scan:支持行存普通表和行存分区表顺序扫描、列存普通表和列存分区表顺序扫描、HDFS内外表顺序扫描;支持GDS数据导入的外表扫描并行。以上均不支持复制表。 Join:HashJoin、NestLoop Agg:HashAgg、SortAgg、PlainAgg、WindowAgg(只支持partition by,不支持order by) Stream:Redistribute、Broadcast 其他:Result、Subqueryscan、Unique、Material、Setop、Append、VectoRow、RowToVec SMP特有算子 为了实现并行,新增了并行线程间的数据交换Stream算子供SMP特性使用。以下新增的算子可以看做Stream算子的子类: Local Gather:实现DN内部并行线程的数据汇总 Local Redistribute:在DN内部各线程之间,按照分布键进行数据重分布 Local Broadcast:将数据广播到DN内部的每个线程 Local RoundRobin:在DN内部各线程之间实现数据轮询分发 Split Redistribute:在集群跨DN的并行线程之间实现数据重分布 Split Broadcast:将数据广播到集群所有DN的并行线程 上述新增算子可以分为Local与非Local两类,Local类算子实现了DN内部并行线程间的数据交换,而非Local类算子实现了跨DN的并行线程间的数据交换。 示例说明 以TPCH Q1的并行计划为例: 在这个计划中,实现了Hdfs Scan以及HashAgg算子的并行,并且新增了Local Gather和Split Redistribute数据交换算子。 其中6号算子为Split Redistribute算子,上面标有的“dop: 4/4”表明Split Redistribute的发送端和接收端线程的并行度均为4。4号算子为Local Gather,上面标有“dop: 1/4”,该算子的发送端线程并行度为4,而接收端线程并行度为1,即下层的5号Hash Aggregate算子按照4并行度执行,而上层的1~3号算子按照串行执行,4号算子实现了DN内并行线程的数据汇总。 通过计划Stream算子上标明的dop信息即可看出各个算子的并行情况。 非适用场景:
  • 操作步骤 查看阻塞的查询语句及阻塞查询的表、模式信息。 1 2 3 4 5 6 7 8 9 10 11 SELECT w.query as waiting_query, w.pid as w_pid, w.usename as w_user, l.query as locking_query, l.pid as l_pid, l.usename as l_user, t.schemaname || '.' || t.relname as tablename from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid and not l1.granted join pg_locks l2 on l1.relation = l2.relation and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid where w.waiting; 该查询返回线程ID、用户信息、查询状态,以及导致阻塞的表、模式信息。 使用如下命令结束相应的会话。其中,139834762094352为线程ID。 1 SELECT PG_TERMINATE_BACKEND(139834762094352); 显示类似如下信息,表示结束会话成功。 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示类似如下信息,表示用户正在尝试结束当前会话,此时仅会重连会话,而不是结束会话。 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded. gsql客户端使用PG_TERMINATE_BACKEND函数终止本会话后台线程时,客户端不会退出而是自动重连。
  • 集群性能分析 GaussDB(DWS)不同集群规格的CPU核数、内存大小和节点存储容量不同,处理业务能力和性能也就不同,用户在创建集群前需要结合实际业务量和具体使用场景来选择集群规格。 在使用集群过程中,当用户的业务量过大,则需要更多的资源(CPU、内存、网络带宽等)来支撑逐渐增长的业务量,如果用户当前使用的集群资源不足,会降低数据库运行速度并影响数据库性能。 GaussDB(DWS)监控信息功能提供了丰富的监控指标,您可以通过集群的各项监控指标(CPU使用率、内存使用率、磁盘使用率、磁盘I/O、网络I/O等),掌握集群的性能和运行状况。当您发现监控指标存在异常时,可以通过查看集群监控指标排查出现异常的原因。具体查看方法可参考“在监控面板(DMS)查看GaussDB(DWS)集群监控”章节。 如果需要更多的计算资源或存储资源以满足业务需要时,可以在管理控制台对已有集群,进行规格变更或扩容操作。具体内容可参考GaussDB(DWS)集群规格变更和集群扩容。 父主题: 性能诊断
  • 物化算子 物化算子是一类可缓存元组的节点。在执行过程中,很多扩展的物理操作符需要首先获取所有的元组才能进行操作(例如聚集函数操作、没有索引辅助的排序等),这是要用物化算子将元组缓存起来; 表3 物化算子 算子 含义 场景 Material 物化 缓存子节点结果。 Sort 排序 ORDER BY子句,连接操作,分组操作,集合操作,配合Unique。 Group 分组操作 GROUP BY子句。 Agg 执行聚集函数 COUNT/SUM/AVG/MAX/MIN等聚集函数。 DISTINCT子句。 UNION去重。 GROUP BY子句。 WindowAgg 窗口函数 WINDOW子句。 Unique 去重(下层已排序) DISTINCT子句。 UNION去重。 Hash HashJoin辅助节点 构造hash表,配合HashJoin。 SetOp 处理集合操作 INTERSECT/INTERSECT ALL,EXCEPT/EXCEPT ALL LockRows 处理行级锁 SELECT … FOR SHARE/UPDATE
  • 控制算子 控制算子是一类用于处理特殊情况的节点,用于实现特殊的执行流程。 表4 控制算子 算子 含义 场景 Result 直接进行计算 1. 不包含表扫描。 2. INSERT语句中只有一个VALUES子句。 ModifyTable INSERT/UPDATE/DELETE上层节点 INSERT/UPDATE/DELETE Append 追加 1. UNION(ALL)。 2. 继承表。 MergeAppend 追加(输入有序) 1. UNION(ALL)。 2. 继承表。 RecursiveUnion 处理WITH子句中递归定义的UNION子查询 WITH RECURSIVE … SELECT … 语句。 BitmapAnd Bitmap逻辑与操作 多维索引扫描的BitmapScan。 BitmapOr Bitmap逻辑或操作 多维索引扫描的BitmapScan。 Limit 处理LIMIT子句 OFFSET … LIMIT …
  • 扫描算子 扫描算子用来扫描表中的数据,每次获取一条元组作为上层节点的输入, 存在于查询计划树的叶子节点,它不仅可以扫描表,还可以扫描函数的结果集、链表结构、子查询结果集。常见的扫描算子如下表所示: 表1 扫描算子 算子 含义 场景 SeqScan 顺序扫描 最基本的扫描算子,用于扫描物理表(没有索引辅助的顺序扫描)。 IndexScan 索引扫描 选择条件涉及的属性上建立了索引。 IndexOnlyScan 直接从索引返回元组 索引列完全覆盖结果集列。 BitmapScan(BitmapIndexScan, BitmapHeapScan) 利用Bitmap获取元组 BitmapIndexScan利用属性上的索引进行扫描,返回结果为一个位图;BitmapHeapScan从BitmapIndexScan输出的位图中获取元组。 TidScan 通过元组tid获取元组 WHERE conditions(like CTID = tid or CTID IN (tid1, tid2, …)) ; UPDATE/DELETE … WHERE CURRENT OF cursor; SubqueryScan 子查询扫描 以另一个查询计划树(子计划)为扫描对象进行元组的扫描。 FunctionScan 函数扫描 FROM function_name ValuesScan 扫描values链表 对VALUES子句给出的元组集合进行扫描。 ForeignScan 外部表扫描 查询外部表。 CteScan CTE表扫描 扫描SELECT查询中用WITH子句定义的子查询。
  • 连接算子 连接算子对应了关系代数中的连接操作,以表 t1 join t2 为例,主要的集中连接类型如下:inner join、left join、right join、full join、semi join、 anti join,其实现方式包括Nestloop、HashJoin及MergeJoin。 表2 连接算子 算子 含义 场景 实现特点 NestLoop 嵌套循环连接,暴力连接,对每一行都扫描内表。 Inner Join, Left Outer Join, Semi Join, Anti Join 适用于被连接的数据子集较小的查询。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。 MergeJoin 归并连接(输入有序),内外表排序,定位首尾两端,一次性连接元组。等值连接。 Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, Semi Join, Anti Join 也称作“融合连接”,是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。 因为Merge join需要做更多的排序,所以消耗的资源更多,因此通常情况下执行性能差于Hash Join。 如果源数据已经被排序过,在执行融合连接时,并不需要再排序,此时Merge Join的性能优于Hash Join。 (Sonic) HashJoin 哈希连接,内外表使用join列的hash值建立hash表,相同值的必在同一个hash桶。等值连接的连接两端必须为类型相同的等值连接,且支持hash散列。 Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, Semi Join, Anti Join 哈希连接,适用于数据量大的表的连接方式。优化器使用两个表中较小的表,利用连接键在内存中建立hash表,然后扫描较大的表并探测散列,找到与散列匹配的行。Sonic和非Sonic的Hash Join的区别在于所使用hash表结构不同,不影响执行的结果集。
  • 其他算子 其他算子包括Stream算子,以及RemoteQuery等算子。Stream算子主要有三种类型:Gather stream、Broadcast stream及Redistribute stream。 Gather stream:每个源节点都将其数据发送给目标节点进行汇聚。 Broadcast stream:由一个源节点将其数据发给N个目标节点进行运算。 Redistribute stream:每个源节点将其数据根据连接条件计算Hash值,根据重新计算的Hash值进行分布,发给对应的目标节点。 表5 其他算子 算子 含义 场景 Stream 多节点数据交换 执行分布式查询计划,节点间存在数据交换。 Partition Iterator 分区迭代器 分区表扫描,迭代扫描每个分区。 RowToVec 行转列 行列混合场景。 DfsScan / DfsIndexScan HDFS表(索引)扫描 HDFS表扫描。
  • 注意事项 数据库调优是一个复杂和细致的过程,需熟悉数据库系统的内部工作原理和相关技术。它需要综合考虑硬件、软件、查询、配置和数据结构等多个方面的因素,以达到最佳的性能和效率。因此,要求调优人员应对系统软件架构、软硬件配置、数据库配置参数、并发控制、查询处理和数据库应用有广泛而深刻的理解。 性能调优过程有时需要重启集群,可能会中断当前业务。建议在业务低峰期进行需要重启集群的性能调优操作,避免业务异常中断。
  • 调优流程 调优流程如图1所示。 图1 GaussDB(DWS)性能调优流程 调优各阶段说明,如表1所示。 表1 GaussDB(DWS)性能调优流程说明 阶段 描述 性能诊断 获取集群各节点的CPU、内存、I/O和网络资源使用情况,确认这些资源是否已被充分利用,是否存在瓶颈点。 系统调优 进行操作系统级以及数据库系统级的调优,更充分地利用机器的CPU、内存、I/O和网络资源,避免资源冲突,提升整个系统查询的吞吐量。 SQL调优 审视业务所用SQL语句是否存在可优化空间,包括: 通过ANALYZE语句生成表统计信息:ANALYZE语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 分析执行计划:EXPLAIN语句可显示SQL语句的执行计划,EXPLAIN PERFORMANCE语句可显示SQL语句中各算子的执行时间。 查找问题根因并进行调优:通过分析执行计划,找到可能存在的原因,进行针对性的调优,通常为调整数据库级SQL调优参数。 编写更优的SQL:介绍一些复杂查询中的中间临时数据缓存、结果集缓存、结果集合并等场景中的更优SQL语法。
  • 配置集群参数 查询TopSQL资源监控信息之前,需要先配置相关的GUC参数,以便能查询到作业的资源监控历史信息或归档信息。步骤如下: 登录GaussDB(DWS)管理控制台。 在“集群管理”页面,找到所需要的集群,单击集群名称,进入集群详情页面。 单击“参数修改”标签页,可以看到当前集群的参数值。 修改参数resource_track_duration值为合适的值,单击“保存”按钮进行保存。 enable_resource_record开关打开后,会引起存储空间膨胀及轻微性能影响,不用时请关闭。 返回集群管理页面,单击右上角的刷新按钮,等待集群参数配置完成。
  • 操作步骤 通过视图gs_session_cpu_statistics查询实时CPU信息。 1 SELECT * FROM gs_session_cpu_statistics; 通过视图gs_session_memory_statistics查询实时memory信息。 1 SELECT * FROM gs_session_memory_statistics; 通过视图gs_wlm_session_statistics查询当前CN的实时资源。 1 SELECT * FROM gs_wlm_session_statistics; 通过视图pgxc_wlm_session_statistics查询所有CN的实时资源。 1 SELECT * FROM pgxc_wlm_session_statistics; 通过视图gs_wlm_operator_statistics查询当前CN作业算子执行实时资源信息。 1 SELECT * FROM gs_wlm_operator_statistics; 通过视图pgxc_wlm_operator_statistics查询所有CN作业算子执行实时资源信息。 1 SELECT * FROM pgxc_wlm_operator_statistics; 通过视图pg_session_wlmstat查询当前用户执行作业正在运行时的负载管理信息。 1 SELECT * FROM pg_session_wlmstat; 通过视图pgxc_wlm_workload_records(动态负载功能开启,即enable_dynamic_workload为on时该视图有效)查询当前用户在每个CN上作业执行时的状态信息。 1 SELECT * FROM pgxc_wlm_workload_records;
  • 前提条件 GUC参数enable_resource_track为on (默认为on)。 GUC参数resource_track_level为query、perf或operator(默认为query)。 监控作业的类型为: 优化器估算的执行代价大于或等于resource_track_cost取值的作业。 Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。 GUC参数enable_track_record_subsql控制是否记录存储过程、匿名块内部语句。 在上述条件中,enable_resource_track为系统级参数,用于设置是否开启资源监控功能。resource_track_level为session级参数,可以对某个session的资源监控级别进行灵活设置。这两个参数的设置方法如下表: 表2 设置资源监控信息统计级别 enable_resource_track resource_track_level query级别信息 算子级别信息 on(default) none 不统计 不统计 query(default) 统计 不统计 perf 统计 不统计 operator 统计 统计 off none/query/operator 不统计 不统计
  • 操作步骤 查询当前实例最近的资源使用情况。 1 SELECT * FROM GS_WLM_INSTANCE_HISTORY ORDER BY TIMESTAMP DESC; 查询结果如下: 1 2 3 4 5 6 instancename | timestamp | used_cpu | free_mem | used_mem | io_await | io_util | disk_read | disk_write | process_read | process_write | logical_read | logical_write | read_counts | write_counts --------------+-------------------------------+----------+----------+----------+----------+----------+-----------+------------+--------------+---------------+--------------+---------------+-------------+-------------- dn_6015_6016 | 2022-01-10 17:29:17.329495+08 | 0 | 14570 | 8982 | 662.923 | 99.9601 | 697666 | 93655.5 | 183104 | 30082 | 285659 | 30079 | 357717 | 37667 dn_6015_6016 | 2022-01-10 17:29:07.312049+08 | 0 | 14578 | 8974 | 883.102 | 99.9801 | 756228 | 81417.4 | 189722 | 30786 | 285681 | 30780 | 358103 | 38584 dn_6015_6016 | 2022-01-10 17:28:57.284472+08 | 0 | 14583 | 8969 | 727.135 | 99.9801 | 648581 | 88799.6 | 177120 | 31176 | 252161 | 31175 | 316085 | 39079 dn_6015_6016 | 2022-01-10 17:28:47.256613+08 | 0 | 14591 | 8961 | 679.534 | 100.08 | 655360 | 169962 | 179404 | 30424 | 242002 | 30422 | 303351 | 38136
  • 操作步骤 查询所有用户的资源限额和资源实时使用情况。 1 SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO; 得到的结果视图如下: 1 2 3 4 5 6 7 username | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed -----------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+------------- perfadm | 0 | 0 | 0 | 0 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 usern | 0 | 17250 | 0 | 48 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 userg | 34 | 15525 | 23.53 | 48 | 0 | -1 | 0 | -1 | 814955731 | -1 | 6111952 | 1145864 | 763994 | 143233 | 42678 | 8001 userg1 | 34 | 13972 | 23.53 | 48 | 0 | -1 | 0 | -1 | 814972419 | -1 | 6111952 | 1145864 | 763994 | 143233 | 42710 | 8007 (4 rows) 其中,IO资源监控字段(read_kbytes、write_kbytes、read_counts、write_counts、read_speed和write_speed)需要在GUC参数enable_user_metric_persistent开启时才有监控数据。 所查各字段说明详见PG_TOTAL_USER_RESOURCE_INFO 。 查询具体某个用户的资源限额和资源实时使用情况。 1 SELECT * FROM GS_WLM_USER_RESOURCE_INFO('username'); 查询结果如下: 1 2 3 4 userid | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed --------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+------------- 16407 | 18 | 1655 | 6 | 19 | 13787176 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 (1 row) 查询所有用户的资源限额和资源历史使用情况。 1 SELECT * FROM GS_WLM_USER_RESOURCE_HISTORY; 查询结果如下: 1 2 3 4 5 username | timestamp | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed -----------------------+-------------------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+-------------+------------- usern | 2020-01-08 22:56:06.456855+08 | 0 | 17250 | 0 | 48 | 0 | -1 | 0 | -1 | 88349078 | -1 | 45680 | 34 | 5710 | 8 | 320 | 0 userg | 2020-01-08 22:56:06.458659+08 | 0 | 15525 | 33.48 | 48 | 0 | -1 | 0 | -1 | 110169581 | -1 | 17648 | 23 | 2206 | 5 | 123 | 0 userg1 | 2020-01-08 22:56:06.460252+08 | 0 | 13972 | 33.48 | 48 | 0 | -1 | 0 | -1 | 136106277 | -1 | 17648 | 23 | 2206 | 5 | 123 | 0 对于系统表GS_WLM_USER_RESOURCE_HISTORY,仅当GUC参数enable_user_metric_persistent开启时,才会定期将视图PG_TOTAL_USER_RESOURCE_INFO中的数据保存到历史表中。 所查各字段说明详见GS_WLM_USER_RESOURCE_HISTORY。
  • 注意事项 用户监控可以同时监控快慢车道(快车道管控简单作业,慢车道管控复杂作业)所有作业的CPU、IO和内存使用情况,不再受限于仅监控慢车道作业。 当前快车道作业内存和CPU不受控,在快车道运行作业占用资源较多情况下,可能出现已用资源大于资源限制的情况。 DN监控视图中,IO、内存和CPU显示的是本DN上资源池资源使用和资源限制信息。 CN监控视图中,IO、内存和CPU显示的是集群内所有DN资源池资源使用和资源限制的累积和。 DN每隔5s更新一次监控信息,CN每隔5s从DN收集一次用户监控信息,因为各实例单独更新/收集用户监控信息,因此各实例监控信息更新时间可能不一致。 辅助线程中每隔30s自动调用持久化函数,持久化用户监控数据,正常情况下不需要用户单独调用持久化函数持久化用户监控数据。 当用户数量较多,集群规模较大时,查询此类实时视图,因CN/DN间实时通信开销,会有一定的网络延时。 初始管理用户不进行资源监控。
  • 空间索引 GaussDB(DWS)数据库的PostGIS Extension支持GIST (Generalized Search Tree) 空间索引(分区表除外)。相比于B-tree索引,GIST索引适应于任意类型的非常规数据结构,可有效提高几何和地理数据信息的检索效率。 使用如下命令创建GIST索引: 1 CREATE INDEX indexname ON tablename USING GIST ( geometryfield );
  • PostGIS概述 PostGIS Extension依赖的第三方软件需要用户进行单独安装,用户如需使用PostGIS功能,请提交工单或联系技术支持人员提交申请。 如果用户在使用中出现“ERROR:EXTENSION is not yet supported.”这种报错,则表示没有安装PostGIS软件包,请联系技术支持进行获取。 GaussDB(DWS)提供PostGIS Extension(支持版本为PostGIS-2.4.2)。PostGIS Extension是PostgreSQL的空间数据库扩展,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。PostGIS Extension完全遵循OpenGIS规范。 GaussDB(DWS)中PostGIS Extension依赖第三方开源软件如下。 Geos 3.6.2 Proj 4.9.2 Json 0.12.1 Libxml2 2.7.1 Gdal 1.11.0 父主题: 使用PostGIS Extension
共100000条