数据治理中心 DATAARTS STUDIO-性能过慢处理方案:源端优化

时间:2024-09-13 17:14:06

源端优化

  • Mysql优化
    表1 全量阶段

    参数名

    类型

    默认值

    说明

    scan.incremental.snapshot.backfill.skip

    boolean

    true

    全量阶段是否跳过读取binlog数据,默认为true。跳过读取binlog数据可以有效降低内存使用。需要注意的是,跳过读取binlog功能只提供at-least-once保证。

    scan.incremental.snapshot.chunk.size

    int

    50000

    分片大小,决定了全量阶段单个分片最大数据的数据条数以及分片个数。分片大小越大,单个分片数据条数越多,分片个数越小。

    当表的条数过多时,作业会划分较多的分片,从而占用过多的内存导致内存问题,请解决表的条数适当调整该值。

    当scan.incremental.snapshot.backfill.skip为false时,实时处理集成作业会缓存单个分片的数据,此时分片越大,占用内存越多,引发内存溢出,在此场景小,可以考虑降低分片大小。

    scan.snapshot.fetch.size

    int

    1024

    全量阶段抽取数据时,从Mysql侧单次请求抽取数据的最大条数,适当增加请求条数可以减少对Mysql的请求次数提升性能。

    debezium.max.queue.size

    int

    8192

    数据缓存队列条数,默认为8192,当源表中单条数据过大时(如1MB),缓存过多数据会导致内存溢出,可以考虑减小该值。

    debezium.max.queue.size.in.bytes

    int

    0

    数据缓存队列大小,默认为0,即表示缓存队列不考虑数据大小,只按照数据条数计算。在debezium.max.queue.size无法有效限制内存占用时,考虑显式设置该值来限制缓存数据的大小。

    jdbc.properties.socketTimeout

    int

    300000

    全量阶段连接Mysql的socket超时时间,默认为5分钟。当Mysql负载较高,作业出现SocketTimeout异常时,考虑增大该值。

    jdbc.properties.connectTimeout

    int

    60000

    全量阶段连接Mysql的连接超时时间,默认为1分钟。当Mysq负载较高,作业出现ConnectTimeout异常时,考虑增大该值。

    表2 增量阶段

    参数名

    类型

    默认值

    说明

    debezium.max.queue.size

    int

    8192

    数据缓存队列条数,默认为8192,当源表中单条数据过大时(如1MB),缓存过多数据会导致内存溢出,可以考虑减小该值。

    debezium.max.queue.size.in.bytes

    int

    0

    数据缓存队列大小,默认为0,即表示缓存队列不考虑数据大小,只按照数据条数计算。在debezium.max.queue.size无法有效限制内存占用时,考虑显式设置该值来限制缓存数据的大小。

  • Oracle优化
    表3 全量阶段

    参数名

    类型

    默认值

    说明

    scan.incremental.snapshot.backfill.skip

    boolean

    true

    全量阶段是否跳过读取Redo log数据,默认为true。由于Oracle初始化LogMiner 较慢,因此在Oracle场景下,跳过读取Redo log数据可以有效提升全量抽取的性能,同时减低内存的使用。需要注意的是,跳过读取binlog功能只提供at-least-once保证。

    scan.incremental.snapshot.chunk.size

    int

    50000

    分片大小,决定了全量阶段单个分片最大数据的数据条数以及分片个数。分片大小越大,单个分片数据条数越多,分片个数越小。

    当表的条数过多时,作业会划分较多的分片,从而占用过多的内存导致内存问题,请解决表的条数适当调整该值。

    当scan.incremental.snapshot.backfill.skip为false时,实时处理集成作业会缓存单个分片的数据,此时分片越大,占用内存越多,引发内存溢出,在此场景小,可以考虑降低分片大小。

    scan.snapshot.fetch.size

    int

    1024

    全量阶段抽取数据时,从Mysql侧单次请求抽取数据的最大条数,适当增加请求条数可以减少对Oracle的请求次数而提升性能。

support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1611.html