更新时间:2025-09-17 GMT+08:00
分享

Python UDF性能调优

DataArtsFabric SQL支持配置Python UDF运行时的资源规格和并发度,并支持统计运行时的关键性能指标。

UDF性能监控

使用explain performance可以打印UDF Actor运行的性能指标。如图1所示,统计了函数calculate_0311在每个DN所对应的UDF Actor的性能情况。下文以图中三行性能数据为例进行说明。

图1 Python UDF Actor的性能指标统计
  • executor0000_es_group (UdfName:calculate_0311 time=10907.3 rows=152 loops=1 cpu=1.0U memory=4.0GB timeout=1000s)中:
    • executor0_es_group指的是DN ID。
    • UdfName表示执行UDF的名称。
    • time描述该UDF总运行时间。
    • rows表示在该DN上处理的数据量。
    • loops表示调用UDF的次数。
    • cpu表示该UDF执行时actor所申请的cpu大小,单位为U。
    • memory表示该UDF执行时actor所申请的memory大小,单位为GB。
    • timeout表示该UDF执行时actor单次batch的最大执行时长,单位为秒。超时则会报错。
  • executor0000_es_group [actor 0](Summary: rows=152 bytes=42.11MB rtt=10804.3 execute=2041.0 setup=4003.0 send=4686.0 wait=1725.9 get=15.8 invoke=4748.0 close=1.8 terminate=1.9 serialize=63.1 deserialize=60.4) 描述的是第0个UDF Actor的信息,具体如下:
    • rows表示该actor上处理的数据量。
    • bytes表示该actor处理的数据量大小。
    • rtt表示内核发送数据到actor,以及actor接收处理数据的端到端时间。
    • execute表示该actor实际计算的有效时间。
    • setup表示该actor在初始化后,准备环境和装载udf代码的时间。
    • send表示从内核发送数据到该actor的时间。
    • wait表示内核等待actor返回数据的等待时间。
    • get表示内核获取actor数据成功获取数据的时间。
    • Invoke表示拉起actor的时间。
    • close表示该actor关闭计算的时间。
    • terminate表示数据系统下线actor的耗时。
    • serialize表示对数据序列化的时间。
    • deserialize表示对数据反序列化的时间。
  • executor0000_es_group [actor 0](Details: ip=10.42.0.103 rows=[152, 152] bytes=[42.11MB, 42.11MB] rtt=[10804.3, 10804.3] send=[4686.0, 4686.0] recv=[49.0, 49.0])统计信息中:
    • ip表示actor所在的ip地址。
    • rows表示actor执行的所有batch中最小行数和最大行数。
    • bytes表示actor执行的所有batch中数据大小最小值和最大值。
    • rtt表示actor执行的所有batch中端到端执行时间的最小值和最大值。
    • send表示actor执行的所有batch中从内核发送数据到该actor的最小值和最大值。
    • recv表示actor执行的所有batch中从python发送数据到内核接收的最小值和最大值。

如下图所示,Query Summary中统计了该查询中所有UDF Actor的汇总信息。

Actor total count表示当前query调用的所有actor数量。

图2 Python UDF Actor数据流传输信息总览

相关文档