目錄
問題內容
解決方法
首頁 Java 如何監控 Spring Data JPA 流

如何監控 Spring Data JPA 流

Feb 22, 2024 pm 02:01 PM
日誌監控

php小編柚子為您帶來關於監控Spring Data JPA流的java問答。在開發過程中,監控資料流的即時情況對於系統效能最佳化和故障排除至關重要。本文將介紹如何監控Spring Data JPA流,讓您更了解資料處理過程,及時發現問題並進行相應處理。一起來探討如何有效監測Spring Data JPA流,提升系統穩定性與效能!

問題內容

我正在嘗試按照此部落格上的說明使用 spring data jpa 流。但是,我無法透過任何日誌監控該過程或進度。當進程嘗試批量提取資料時,我是否應該看到日誌中列印多個 sql 查詢?如果不是,那麼我怎麼知道所有行都沒有一次性載入?

其他部落格(例如此部落格和此部落格)建議我應該將mysql 的hint_fetch_size 設為integer.min_value ,我認為這可能是解決方案,但這會引發以下異常:

2024-01-29 14:40:20.843 警告 78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper:sql 錯誤:0,sqlstate:s1000 2024-01-29 14:40:20.843錯誤78247 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.sqlexceptionhelper:串流結果集com.mysql.cj.protocol.a.result. resultsetrowsstreaming@ 4ca63fa5 仍然活躍。當任何流結果集在給定連接上開啟並使用時,不得發出任何語句。在嘗試更多查詢之前,請確保您已對任何活動的流結果集呼叫 .close()。 結束時間:48 org.springframework.orm.jpa.jpasystemexception:無法擷取結果集;巢狀異常是 org.hibernate.exception.genericjdbcexception:無法擷取 resultset 在 org.springframework.orm.jpa.vendor.hibernatejpadialect.converthibernateaccessexception(hibernatejpadialect.java:331)

這是我的儲存庫程式碼:

@QueryHints(value = {
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"),
})
@Query("SELECT s FROM Salary s")
Stream<Salary> findAllStream();
登入後複製

我想我想得到一個保證,如果以上是在 spring data jpa 中使用 stream 查詢的正確方法,因為我自己無法可靠地監控 streaming 的性能?

更新

上述異常是由於在同一呼叫方法中重複呼叫 findallstream 方法而發生的。刪除其中一個修復了該異常。

解決方法

我找不到任何日誌配置來顯示資料是否正在批次提取。但我確實找到了一種在本地測試效能的方法。

為了測試流程功能,我需要存取包含數百萬筆記錄的資料庫。我使用 docker 映像 https://www.php.cn/link/7092d5eb1bbca1a22bdc69ba3f517e68 來使用 mysql 員工資料

設定 docker 映像後,我在將 mysql workbench 與伺服器連接時遇到問題。看起來 docker 映像未配置為接受預設設定的 ssl 連線。我必須停用 use ssl 標誌才能建立連線。此設定出現在 mysql 工作台的 ssl 標籤下。

應用程式中的連接字串也必須以下列方式配置:

spring.datasource.url=jdbc:mysql://localhost:3307/employees?verifyservercertificate=false&usessl=false&requiressl=false
登入後複製

員工資料庫中的資料包含一個名為 salaries 的表,該表約有 280 萬行。

為了進行測試,我編寫了一個小型 spring data jpa 應用程序,該應用程式在存儲庫類中具有以下方法以及一個簡單的控制器來調用這些方法:

@Override
List<Salary> findAll();

@QueryHints(value = {
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_CACHEABLE, value = "false"),
        @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_READONLY, value = "true"),
})

@Query("SELECT s FROM Salary s")
Stream<Salary> findAllStream();
登入後複製

然後我編寫了一小段程式碼,將讀取的資料轉換為 json 對象,然後使用多個執行緒寫回檔案中。這是為了模擬現實案例中的處理。

這是我觀察到的。

  • 使用 list 方法時,記憶體使用量顯著增加。最初的查詢花費了大部分時間,但是當所有資料載入完畢後,實際的資料處理任務很快就完成了。

  • 使用 stream 方法時,對記憶體使用的影響幾乎不明顯。但整體來說,與list方法相比,完成處理部分的表現相似甚至更差。

結論

我的上述發現使我得出結論,存儲庫方法的 stream 返回類型僅應在存在內存不足風險時使用,即獲得 out 內存異常 。否則,如果您的應用程式已經在足夠大的伺服器上運行,則對記憶體使用的整體影響幾乎不會被注意到,並且只有在您的進程快速完成時才會是暫時的。

來自 intellij profiler 的記憶體使用統計資料

  • left -> 當列表方法運行時
  • 右 -> 當流方法運行時

以上是如何監控 Spring Data JPA 流的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在Linux系統中利用PHP腳本進行日誌監控 如何在Linux系統中利用PHP腳本進行日誌監控 Oct 05, 2023 am 11:36 AM

如何在Linux系統中利用PHP腳本進行日誌監控隨著Linux系統的廣泛應用,對於系統的監控和日誌分析變得越來越重要。而其中,使用PHP腳本進行日誌監控是一種常見的方式。本文將介紹如何使用PHP腳本實現簡單的日誌監控,並提供具體的程式碼範例。一、建立PHP腳本文件首先,在Linux系統上建立一個名為「log_monitor.php」的文件,該文件將用於監控指定

如何透過Linux工具實現日誌監控和警報? 如何透過Linux工具實現日誌監控和警報? Jul 28, 2023 pm 08:41 PM

如何透過Linux工具實現日誌監控和警報?在日常的伺服器管理和維運過程中,即時監控和分析日誌是非常重要的。 Linux系統提供了一些強大的工具,可以幫助我們實現日誌監控和警報的功能。本文將介紹如何使用Linux工具來監控和警報日誌,並提供一些程式碼範例。使用tail指令即時查看日誌tail指令可以即時查看日誌檔案的更新內容。透過使用tail命令,我們可以在終端機窗

深入探究:Golang如何實現檔案監控功能 深入探究:Golang如何實現檔案監控功能 Feb 23, 2024 am 09:27 AM

Golang作為一種高效、簡潔的程式語言,在文件處理方面有著出色的表現。其中,文件監控是一個非常常見且有用的功能,可以幫助我們即時監測檔案系統中的變化,以便及時做出相應的處理。本文將深入探究Golang如何實現檔案監控功能,並提供具體的程式碼範例,幫助讀者更好地理解和應用這項功能。為何需要文件監控功能?在現代軟體開發過程中,文件操作是一個非常重要的環節。特別是

原始碼編譯安裝PHP PDO MySQL:實用技巧與注意事項 原始碼編譯安裝PHP PDO MySQL:實用技巧與注意事項 Mar 07, 2024 pm 09:27 PM

原始碼編譯安裝PHPPDOMySQL:實用技巧與注意事項PHP是一種廣泛應用的伺服器端腳本語言,而MySQL是一個流行的開源關係型資料庫管理系統,兩者結合使用能夠為網站開發提供強大的支援。在實際開發中,經常需要使用PHPPDO擴充來連接MySQL資料庫,以實現資料的儲存與操作。本文將介紹如何透過原始碼編譯安裝PHP,並設定PDO連接MySQL的方法,同時提

解決Linux伺服器日誌遺失問題的方法 解決Linux伺服器日誌遺失問題的方法 Jun 30, 2023 pm 04:37 PM

如何解決Linux伺服器上的系統日誌遺失問題摘要:在Linux伺服器上,系統日誌對於監控和故障排除非常重要。然而,有時候系統日誌可能會遺失或未能正常記錄,造成故障排查困擾。本文將介紹一些解決方案,協助解決Linux伺服器上的系統日誌遺失問題。引言:在Linux伺服器上,系統日誌是一種非常重要的資源,它用於記錄系統和應用程式的運作狀態、錯誤訊息、警告訊息以及

MySql的日誌監控:如何快速偵測和分析MySQL的錯誤和異常 MySql的日誌監控:如何快速偵測和分析MySQL的錯誤和異常 Jun 15, 2023 pm 09:42 PM

隨著網路和大數據時代的到來,MySQL資料庫作為一種常用的開源資料庫管理系統,被越來越多的公司和組織所採用。但是,在實際的應用過程中,MySQL資料庫也會出現各種各樣的錯誤和異常,例如係統崩潰、查詢逾時、死鎖等。這些異常對系統的穩定性和資料的完整性會造成嚴重的影響,因此,快速偵測和分析MySQL的錯誤和異常是一項非常重要的工作。日誌監控是MySQL的重要功能

如何解決Oracle服務遺失的問題? 如何解決Oracle服務遺失的問題? Mar 08, 2024 pm 04:27 PM

解決Oracle服務遺失的問題Oracle資料庫是眾多企業和組織首選的關係型資料庫管理系統,但在實際使用過程中,有時會遇到資料庫服務遺失的情況,影響系統正常運作。本文將介紹如何解決Oracle服務遺失的問題,並給出具體的程式碼範例,幫助讀者更好地處理這個常見的資料庫故障。一、檢查Oracle服務狀態在解決Oracle服務遺失問題前,首先需要確認服務的目前狀態。

如何進行PHP秒殺系統的日誌監控與故障排查 如何進行PHP秒殺系統的日誌監控與故障排查 Sep 19, 2023 am 08:24 AM

如何進行PHP秒殺系統的日誌監控與故障排查引言:隨著電商產業的快速發展,秒殺活動成為吸引消費者的重要方式。而在秒殺活動中,系統的穩定性和高並發處理能力是至關重要的。為了確保秒殺系統的正常運行,需要進行日誌監控和故障排查。本文將介紹如何使用PHP進行秒殺系統的日誌監控和故障排查,並提供一些程式碼範例。一、日誌監控設定日誌等級在秒殺系統的設定檔中,我們可以設