數倉現網案例丨超大結果集接收異常

来源:https://www.cnblogs.com/huaweiyun/archive/2023/07/27/17584487.html
-Advertisement-
Play Games

用戶使用資料庫客戶端工具如navicat、dbeaver等執行超大結果集的查詢語句導致異常中斷,中斷信息Last read message sequence %d is not equal to the max written message sequence %d。 ...


本文分享自華為雲社區《GaussDB(DWS)現網案例之超大結果集接收異常》,作者:你是猴子請來的救兵嗎 。

問題背景

內核版本 GaussDB 8.1.3

問題描述 用戶使用資料庫客戶端工具如navicat、dbeaver等執行查詢語句異常中斷,中斷信息"Last read message sequence %d is not equal to the max written message sequence %d"

問題定位

客戶端異常中斷後有些錯誤信息時不感知的,此時topsql就派上了用場。歷史topsql記錄了查詢作業運行結束時的資源使用情況(包括記憶體、下盤、CPU時間等)和運行狀態信息(包括報錯、終止、異常等)以及性能告警信息。而對於由於FATAL、PANIC錯誤導致查詢異常結束時,狀態信息列只顯示aborted,無法記錄詳細異常信息。

1,此時我們通過歷史topsql查詢視圖查詢語句執行情況

--當前CN

select * from GS_WLM_SESSION_HISTORY;

--所有CN

select * from PGXC_WLM_SESSION_HISTORY;

cke_124.png

根據topsql記錄結果發現語句存在abort_info為

Last read message sequence %d is not equal to the max written message sequence %d

可知,查詢執行遇到FATAL、PANIC錯誤導致查詢異常結束

2,接著確認日誌信息,通過線程ID查看當時語句執行情況,發現客戶端存在異常中斷

cke_125.png

根因分析

前提:

cn_retry開啟+查詢語句+max_cn_temp_file_size臨時文件開啟

發送邏輯:

服務端執行查詢之後,會通過發送緩衝區往客戶端發送數據;當查詢結果集過大,則發送緩衝區滿了之後,會往臨時文件寫數據;當臨時文件超出max_cn_temp_file_size指定的最大值時(此時會禁用cn_retry),需要分批發送,此時會先將已寫入臨時文件的數據發送至客戶端;然後繼續將剩餘數據寫入新的臨時文件發送,以此迴圈,直到所有數據發送完成。

cke_126.png

問題場景:

當臨時文件超出最大值時,先將其發送至客戶端,此時客戶端斷連(如產生oom),數據發送中斷,此時已發送數據量與已寫入臨時文件的數據量不一致,因此產生報錯

Last read message sequence %d is not equal to the max written message sequence %d

此報錯代表已寫入臨時文件的數據與已發送到客戶端的數據量不一致,實際場景為客戶端異常導致的發送數據中斷,因此報錯內容符合預期。

cke_127.png

相關知識

相關guc參數:

1,cn_send_buffer_size:指定CN端數據發送數據緩存區的大小。整型,8~128, 單位為KB。預設8KB

2,max_cn_temp_file_size:指定SQL語句出錯自動重試功能中CN端使用臨時文件的最大值,設定為0表示不使用臨時文件。預設5G

相關日誌記錄:

1,臨時文件超出max_cn_temp_file_size,記錄" %s temp file exceeded, max temp file size : %d KB, current result size : %ld KB"

2,客戶端異常導致數據發送失敗,記錄"could not send data to client [ Remote IP: %s PORT: %s]. detail:%s"

3,數據發送中斷或結束,當已發送數據和已寫入臨時文件的數據量不一致時,記錄"Last read message sequence %d is not equal to the max written message sequence %d"

場景復現

創建普通表即可,導入一定量的數據,執行簡單查詢使其返回較大的結果集,如

select * from store_sales;

為了方便場景復現,臨時將允許的臨時文件最大值調整為500M,便於觸發分批發送。

1,正常接收場景

此時客戶端環境記憶體足夠,可正常接收數據,超大結果集將通過臨時文件下盤的方法分批發送,直到所有數據發送完成。

cke_128.png

2,異常中斷場景

此時客戶端環境允許的數據量優先,超大結果集將分批發送的過程中,客戶端觸發OOM異常中斷,服務端會記錄客戶端異常發送失敗信息以及已發送數據不一致的錯誤信息。

cke_129.png

cke_130.png

改善辦法

1,避免超大結果集的查詢,如果無法避免,則通過分頁或游標多次查詢

2,增大客戶端支持的運行記憶體,防止記憶體不足

知識小結

1,報錯Last read message sequence %d is not equal to the max written message sequence %d為超大結果集返回異常中斷時的報錯,符合預期,需通過業務語句的改寫或客戶端環境的改善來解決。

2,TopSQL查詢監控的原理和適用方法可參考:GaussDB for DWS 資源監控核心技術解密: TopSQL查詢監控解密

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 碼農一枚,Mac作為生產力工具已經有10多年了。 用Mac的原因除了系統清爽,逼格高之外,最主要還是因為作為一個資深全棧,要做Apple相關開發,必須用MacOS系統。😅 與Windows不同,MacOS上流行使用的軟體很多都很小眾,作者也不是大廠,但有很多卻很實用,這裡介紹幾款我常用的免費軟體。 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230726164318392-162588362.png) # 1. 結果集 ## 1.1. sql ```sql select empno,mgr from emp ord ...
  • 一、索引概述 1.1 索引的介紹 索引index:是幫助 Mysql 高效獲取數據 的 有序的數據結構,在數據之外,資料庫系統維護著的滿足特定查找演算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找演算法,這種數據結構就是索引 1.2 索引的優缺點 優點1:提 ...
  • # Spark之探究RDD > 如何瞭解一個組件,先看看官方介紹! ![](https://img2023.cnblogs.com/blog/3161112/202307/3161112-20230727212358040-237097554.png) 進入RDD.scala,引入眼帘的是這麼一段描 ...
  • 向量資料庫是一種專門用於存儲和處理向量數據的資料庫系統。向量數據是指具有多維度屬性的數據,例如圖片、音頻、視頻、自然語言文本等。傳統的關係型資料庫通常不擅長處理向量數據,因為它們需要將數據映射成結構化的表格形式,而向量數據的維度較高、結構複雜,導致存儲和查詢效率低下 ...
  • 忠人之事受人之托 起因是因為一位朋友的資料庫伺服器被重裝了,只剩下一個zbp_post.frm和zbp_post.ibd文件。咨詢我能不能恢復,確實我只用過mysqldump這種工具導出數據 然後進行恢復到資料庫。這種直接備份物理存儲文件還沒有嘗試過。 前提是需要歷史ibd文件的所屬資料庫版本 需要 ...
  • 一、SQL執行頻率 MySQL客戶端 連接成功後,通過show [session | global] status 命令可以提供伺服器狀態信息,通過如下指令,可以查看當前資料庫的insert,update,dalete,select的訪問頻次 show [global | session] stat ...
  • NineData新增了PostgreSQL數據源的支持,這是一個可視化、集成AI、多雲多環境、擁有企業級能力的PostgreSQL解決方案。無論您是個人開發者還是團隊,都可以通過NineData平臺一站式管理您的PostgreSQL數據源。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...