1. 概述
1.1 版本
FineBI 版本 | 功能變更 |
---|---|
6.0 | 1)依賴內建「FineBI 直連效能分析插件」 插件預設不啟動,需手動啟動 插件版本跟隨 JAR 自動更新 2)僅支援實時資料下的效能分析 |
6.0.16 | 1)功能不再由插件提供,直接合並至產品 2)支援實時資料和抽取資料下的效能分析 3)優化執行階段的耗時計算邏輯 |
1.2 應用場景
當使用者遭遇以下問題時,即便進行了反覆檢查,仍無法確定問題所在,甚至可能導致伺服器當機。
在建立自助資料集時,某些步驟執行速度較慢。
在預覽自助資料集時,某個步驟表現較為遲緩。
在預覽儀表板時,發現操作速度相對較慢。
在編輯組件時,注意到操作回应較為緩慢。
1.3 功能簡介
FineBI提供「效能分析」功能,幫助使用者更迅速、更方便地解決以下方面的效能問題:儀表板預覽、編輯操作,以及自助資料集的編輯程式。
1.4 注意事項
1)FineBI 6.0.16 及之後版本,「效能分析」功能由產品預設提供。
FineBI 6.0.15 及之前版本,「效能分析」功能依賴產品內建「FineBI 直連效能分析插件」。
插件預設禁用,隨產品版本自動更新,如需使用「效能分析」功能,請 啟動 插件。
2)FineBI 6.0.16 及之後版本,「效能分析」功能支援實時資料和抽取資料下的效能分析。
FineBI 6.0.15 及之前版本,「效能分析」功能僅支援實時資料下的效能分析,不支援抽取資料。
2. 操作步驟
2.1 執行效能分析
在FineBI多處支援「效能分析」功能。
內容 | 位置說明 |
---|---|
資料 | 「我的分析」主題中,資料編輯介面,支援進行「效能分析」 |
組件 | 「我的分析」主題中,組件編輯介面,支援進行「效能分析」 |
儀表板 | 「我的分析」主題中,儀表板編輯介面,支援進行「效能分析」 |
「我的分析」主題中,儀表板預覽介面,支援進行「效能分析」 | |
「目錄」中查看儀表板時,支援進行「效能分析」 |
2.2 查看核心資訊
點選「效能分析」按鈕後,線上展示效能分析核心資訊。「核心資訊」可幫助使用者初步判斷出現效能問題的原因。
如下圖所示:
「核心資訊」表欄位介紹如下表所示:
欄位 | 說明 |
---|---|
使用者 | 觸發效能分析的FineBI使用者 |
一級資源名稱 | 效能分析內容為資料時:一級資源名稱為資料集名稱 效能分析內容為儀表板時:一級資源名稱為儀表板名稱 |
二級資源名稱 | 效能分析內容為資料時:二級資源名稱為資料集中分析步驟名稱 效能分析內容為儀表板時:二級資源名稱為儀表板中組件名稱 |
查詢ID | UUID,每次查詢請求的唯一編號 |
查詢等待時間(ms) | 從使用者點選查詢到進入查詢準備階段的時間 |
查詢準備階段(ms) | 查詢的執行計劃解析 查詢內容為直連資料時:代表生成 SQL 的階段 查詢內容為抽取資料時:代表抽取引擎的查詢描述生成的階段 |
查詢執行時間(ms) | 查詢內容為直連資料時:代表直連資料庫執行時間 查詢內容為抽取資料時:代表抽取引擎計算時間 |
資料傳輸時間(ms) | 查詢結果傳回給FineBI的時間 若直連引擎自己計算,則沒有該時間 |
記憶體計算時間(ms) | 所有FineBI程式碼的計算時間 例如樹引擎分頁計算,二次計算等 |
前端渲染時間(ms) | 後端計算完畢之後,前端js計算、渲染和展示的時間之和 |
總查詢時間(ms) | 從使用者點選查詢到前端載入完成的總時間 |
查詢開始時間 | 使用者觸發效能檢查的時間點,精確到秒 |
2.3 查看詳細資訊
如需進一步確認出現效能問題的原因和了解下一步的處理方式,可查看對應查詢的「詳細資訊」。
1)線上查看單個查詢請求的詳細資訊:點選對應「查詢ID」,查看此次查詢的效能明細。
2)匯出此物件的所有查詢請求的詳細資訊:點選「匯出詳細資訊」按鈕,匯出明細資訊表格到本地。
3)「詳細資訊」表欄位介紹如下表所示:
資料列名稱 | 說明 |
---|---|
使用者 | 觸發效能分析的FineBI使用者 |
一級資源名稱 | 效能分析內容為資料時:一級資源名稱為資料集名稱 效能分析內容為儀表板時:一級資源名稱為儀表板名稱 |
二級資源名稱 | 效能分析內容為資料時:二級資源名稱為資料集中分析步驟名稱 效能分析內容為儀表板時:二級資源名稱為儀表板中組件名稱 |
組件類型 | 1:分組表 2:交叉表 3:明細表 4:圖表 5:自助資料集 6:篩選元件 7:正文組件 |
查詢ID | UUID,每次查詢請求的唯一編號 |
執行階段 | 1)等待開始階段 因為瀏覽器的限制導致查詢之前需要佇列 2)查詢準備
3)SQL 執行
4)資料傳輸 資料庫傳回的結果傳給 BI 伺服器花的時間 5)記憶體計算 直連引擎計算的時間 6)等待結束 等待結束階段(把儀表的所有組件都打包成一個請求時會有該資料),最先出來的組件要等到最後出來的組件的等待時間 7)前端渲染
|
片段ID | 一次查詢有可能會有多個查詢請求 例如建立資料連結,SQL 執行,資料傳輸都可能再被拆分成多個請求,需要分別統計考量 |
耗時(ms) | 若該階段有統計時間,則記錄該階段的耗時 |
片段內容 | 建立資料連結階段記錄資料連結名 SQL 執行階段記錄執行的 SQL ,SQL 超過 3w 字元的,匯出的檔案會生成兩個 sheet ,包含詳細資訊和超出 3w 字元的 SQL 如果有臨時表注入邏輯,查詢 SQL 前面會有,excel insert cost xxx | selcet * ....這樣的識別符號 |
傳回結果集行數 | 記錄資料傳輸階段,記憶體計算階段,前端渲染階段的傳回結果集行數 |
傳回結果集列數 | 記錄資料傳輸階段,記憶體計算階段,前端渲染階段的傳回結果集列數 |
執行引擎類型 | 抽取 直連 |
開始時間 | 「執行階段」的開始時間 |
結束時間 | 「執行階段」階段的結束時間 |
異常資訊 | 當某個階段出現錯誤時,列印報錯資訊 |
查詢請求合計 | 記錄本次查詢的所有執行階段耗時總和 記錄本次查詢的開始和結束時間 |
總合計 | 記錄所有查詢的所有執行階段耗時總和 記錄所有查詢的開始和結束時間 |
2.4 效能反饋
1)非超管發現範本問題後,可點選「效能分析>效能反饋」按鈕,將範本效能反饋給管理者。如下圖所示:
2)超管收到效能反饋訊息提示,可根據反饋督促對應人員優化儀表板/資料集。
3. 注意事項
3.1 邏輯詳解
核心資訊中的各個時間段,以及詳細資訊中的各個執行階段,匹配和計算邏輯可參考下表:
核心資訊 時間段 | 詳細信息 執行階段 | 說明 |
---|---|---|
查詢等待時間 | 等待開始階段 | 定義說明: 從使用者點選查詢到進入查詢準備階段的時間,因為瀏覽器的限制導致查詢之前需要佇列 一般6個瀏覽器傳送請求未傳回時,會阻擋第7個及之後瀏覽器的請求 計算邏輯: 6.0.16及之後:[(請求傳回的時間點-開始發請求的時間點)-後端查詢消耗的時間點] 6.0.15及之前:請求傳回的回应中服務端開始時間StartTime(BI伺服器時間)- 查詢請求的開始時間(使用者瀏覽器的時間)(由於瀏覽器和伺服器時區/時間可能不一致,因此存在時間為負數的情況) 異常排查方向: 1)查詢併發過高 2)超出瀏覽器併發限制 |
查詢準備階段 | 執行計劃構建 | 定義說明: FineBI直連引擎在拿到查詢請求時構建如何組織查詢的階段 計算邏輯: Widget生成BICriteria或者HyperCriteria的程式 ETLContext生成ETLFlow的程式 異常排查方向: 資料集/範本/組件太複雜 |
SQL生成及優化 | 定義說明: 對應的查詢轉換成 SQL 以及對 SQL 進行優化的階段 計算邏輯: SQL 的生成和優化的時間 | |
- | 建立資料庫連結 | 定義說明: SQL執行前,需要獲取和資料庫的連結 計算邏輯: DataBaseSouceEngine中資料庫連結建立的時間 |
查詢執行時間 | SQL執行 | 定義說明: 資料庫執行查詢的時間或TCERID引擎執行時間 由於執行時間包括臨時表的時間,因此SQL執行時間可能比日誌中要長 SQL 執行階段記錄執行的 SQL ,SQL 超過 3w 字元的,匯出的檔案會生成兩個 sheet ,包含詳細資訊和超出 3w 字元的 SQL 如果有臨時表注入邏輯,查詢 SQL 前面會有excel insert cost xxx | selcet * ....之類的識別符號 計算邏輯: DataBaseSouceEngine中資料庫的查詢時間 異常排查方向: 1)資料庫效能問題 2)SQL語句需要優化 |
資料傳輸時間 | 資料傳輸 (資料庫-BI) | 定義說明: 資料庫的查詢結果傳回給FineBI伺服器的時間, 計算邏輯: 資料庫查詢結果集傳輸到BI伺服器的時長+資料壓縮時長/資料模型生成時長 如果沒有這兩部分,時間為0是正常的 異常排查方向: 1)若資料庫查詢結果集傳輸到BI伺服器的時長過大,請排查伺服器網路問題 2)若資料模型構建耗時過大,請優化分析邏輯 |
記憶體計算時間 | 記憶體計算 | 定義說明: 直連引擎計算的時間,所有BI程式碼的計算時間 計算邏輯: 自助資料集無記憶體計算時間,儀表板中包含以下程式: 分組時間:postGroup time 排序計算時間:tree sort 分頁計算時間:groupPage procedure time: 依據排序計算時間:treeSortGist 樹過濾計算時間:groupTreeFilter 樹構建時間:treeMaker time 異常排查方向: 查詢傳回的結果集過大,需要優化分析邏輯 |
前端渲染時間 | 資料傳輸 (BI伺服器-使用者瀏覽器) | 定義說明: FineBI伺服器將資料傳給使用者瀏覽器的時間 計算邏輯: 後端結束的時間點-前終止收到資料的時間點 |
前端渲染 | 定義說明: 後端計算完畢之後,前端js計算、渲染和展示的時間之和 計算邏輯: 組件最終渲染出來的時間點-前端拿到資料的時間點 異常排查方向: 分頁行數過大 | |
總查詢時間 | - | 從使用者點選查詢到前端載入完成的總時間 |
查詢開始時間 | - | 使用者觸發效能檢查的時間 |
3.2 常見問題
問題描述 | 原因分析 |
---|---|
「匯出詳細資訊」按鈕為灰色,無法匯出 | 原因分析:正在執行查詢中,無法同時匯出詳細資訊 解決方案:請耐心等待查詢結束,即可匯出詳細資訊 |
查詢等待時間為負數 | 原因分析: 6.0.15及之前,查詢等待時間=請求傳回的回应中服務端開始時間StartTime(BI伺服器時間)- 查詢請求的開始時間(使用者瀏覽器的時間) 由於瀏覽器和伺服器時區/時間可能不一致,導致毫秒級的差異,因此存在時間為負數的情況 解決方案:請升級工程至6.0.16及以上版本,查詢等待時間邏輯優化 |
查詢執行時間為0 | 原因分析:查詢命中了快取,沒有從資料庫全新取數 解決方案:可先修改單表的快取策略,再進行效能分析 |
查詢執行時間與後臺日誌時間不一致 | 原因分析: 資料集使用臨時表製作,效能分析時會計算臨時表的執行時間,而後臺日志中不計算此段時間,因此兩者不一致 解決方案:正常情況,無需解決 |
總查詢時間≠分項耗時合計值 | 原因分析: 一個組件可能觸發了多個SQL,而多條SQL並不一定是依次執行的。 查詢執行時間=所有SQL執行時間總和 總查詢時間中的查詢執行時間=從第一條SQL執行開始,到最後一條SQL執行結束的時長 兩者並不相等,因此總查詢時間可能會小於分項耗時合計值 解決方案:無 |
單個查詢的詳細資訊中,存在多個SQL生成及優化階段 | 原因分析: 一個組件可能觸發了多個SQL 例如去重、中位數、fixed等操作,由於需要計算父節點的合計值,就需要傳送多條SQL 解決方案:正常情況,無需解決 |