最新历史版本 :定時任務併發數與髒資料說明 返回文檔
編輯時間: 內容長度:图片数:目录数: 修改原因:

目錄:

1. 併發數编辑

1.1 問題描述

由於 FineDataLink 中定時任務需要佔用記憶體和併發資源等,因此使用者可能需要根據實際的使用情況進行任務調整。

閱讀此部分,你可以解決和理解如下問題:

  • 問題一:如何配置定時任務的併發數?

  • 問題二:為什麼我的定時任務跑的比較慢,實際運作的併發數不夠?

  • 問題三:為什麼我的定時任務併發數配置的很高,但是任務運作速度仍然很慢?

1.2 解譯說明

最多能啟動的定時任務數量。

1.2.1 4.1.4 及之後版本

併發數詳細說明參見:併發控制

為了提高定時任務的效率,可以適當調整任務的併發數,以縮短資料搬遷需要的時間。在產品中配置位置如圖所示:

QQ20250718-100924.png


1.2.2 4.1.4 之前版本

FDL 能同時執行的任務數跟 cpu 的執行緒數有關,預設是 cpu 執行緒數的 1/2 。假如 cpu 執行緒數為 8,FDL 則可以同時執行 4 個定時任務,若定時任務數有 5 個,另外一個需要佇列。

1.3 任務併發數配置最佳實踐

  • 任務併發數越大,任務運作需要搶佔的資源越多,,即前面提交任務先搶佔資源運作,後提交的任務後搶佔資源運作。建議合理配置任務併發數,避免大併發任務長時間運作,進而阻擋後續任務獲得資源得到執行。

  • 小資料量的資料表建議配置小併發,小併發需要的執行資源比較少,有利於任務快速搶佔碎片資源得到運作。由於資料量比較小執行耗時可以控制在合理的範圍內。

  • 同一個資料源上定時任務,建議錯峯運作,可以降低對資料源存取的併發壓力。

2. 髒資料臨界值编辑

髒資料容忍功能詳情參見:髒資料容忍

2.1 問題描述

閱讀此部分,可以解決和理解如下問題:

  • 問題一:什麼是定時任務的髒資料?

  • 問題二:如何配置定時任務髒資料限制?

2.2 解譯說明

髒資料臨界值容忍能力用來控制任務在遇到髒資料時的行為,髒資料是指資料條目在寫入目標資料源程式中發生了異常,則此筆資料被視為髒資料。

以下為定時任務髒資料出現的情況:

1)與目標欄位配置不匹配而無法寫入的資料(目標欄位長度/類型不匹配、目標欄位缺失、違反目標欄位非空約束等)。

2)當寫入方式-主鍵衝突策略為「主鍵相同,記錄為髒資料」時,主鍵衝突的資料將被視為髒資料。

由於各類異構系統對資料處理的複雜和差異性,目前寫入失敗的資料均被分類於髒資料。

目前定時任務在進行「任務控制」時,支援髒資料臨界值限制能力,對於支援髒資料臨界值限制的配置:

QQ20250718-101524.png


常見配置場景介紹如下:

  • 不配置髒資料容忍:表示不容忍所有出現的髒資料,只要遇到髒資料就會導致任務失敗。

  • 配置髒資料限制為一個正整數N:表示最多容忍N條髒資料,在髒資料超過N條時,任務會失敗跳出;任務執行程式中,髒資料不會寫入到目標表。

2.3 最佳實踐

  • 關連式資料庫(MySQL、SQL Server、PostgreSQL、Oracle、ClickHouse 等對於資料要求比較敏感的場景,建議不配置髒資料容忍,以即時發現資料品質風險。

  • 對於資料要求不敏感的場景,可以配置髒資料限制,或者配置一個業務上合理的髒資料臨界值上限,以降低日常髒資料處理維運負擔。

  • 關鍵任務配置任務失敗和延遲警報,以即時發現線上問題。

Snipaste_2025-07-18_10-16-08.png


3. 髒資料處理编辑

3.1 查看髒資料條數及原因

定時任務運作時,若存在髒資料,日誌中將會報錯。如下圖所示:

QQ20250718-102125.png


「統計」Tab頁下,可看到髒資料具體條數,點選條數,可看到錯誤類型和錯誤原因。如下圖所示:

QQ20250718-102601.png

QQ20250718-102633.png

3.2 髒資料常見原因及方案

原因及解決方案
報錯範例
表空間不足,可將報錯在百度輸入搜尋解決方案

1)資料無法正常寫入,請做出檢查並修改 異常情況:ORA-01653: unable to extend table XX by 128 in tablespace SJZT

2)報錯:ORA-01654:索引ADMIN.ZYH無法透過128 (在表空間YYBI中)擴展

主鍵有 null資料無法正常寫入,請做出檢查並修改 異常情況:Data loading to remote server failed 

原因:

id 設定了主鍵,將 id 為空的資料寫入

解決方案:

寫入前可將為空的 id 過濾出去

id 不能為空
源資料與目標表欄位長度欄位類型不適配

1)髒資料報錯欄位too long

2)髒資料報錯將截斷字串或二進制資料

2)下圖:

1704187682459752.png

目標資料庫建的表的格式不是utf-8編碼格式的,識別不了中文

注:若寫入中文或生僻字,目標表需要支援這些,排查下目標資料庫的字元集格式、排序規則

--

3.3 處理髒資料

找到造成出現髒資料的原因並解決後,可重試任務。詳情請參見:重試任務

定時任務運作程式中,若遇到髒資料,髒資料不會寫入到目標表中,但正常的資料會順利寫入到目標表中。

產生髒資料後,重試的處理場景:

場景
增量同步的方式
重試後是否會存在資料問題
建議處理措施
全量同步
--
增量同步-使用時間戳


動態參數:如:配置 now-1 作為資料範圍,每次更新前一天資料


在重試時,使用者可以指定本次運作的臨時任務參數值

且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作

獲取目標表的最新資料時間戳

如:每次任務先從目標表獲取最大的時間戳,作為本次同步的起始時間

使用者需要手動刪除目標表大於本批次的資料,以進行重試

且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作

自訂配置表儲存斷點

如:每次任務最後一步儲存本次同步的最大時間至一張表儲存

使用者需要手工修改斷點值,以進行重試

且使用者的任務設計需要支援冪等、即同一資料範圍的定時任務需要支援多次運作

全表比對--