搜尋
首頁Java如何監控 Spring Data JPA 流

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中文網其他相關文章!

陳述
本文轉載於:stackoverflow。如有侵權,請聯絡admin@php.cn刪除
如何在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命令,我们可以在终端窗

解决Linux服务器日志丢失问题的方法解决Linux服务器日志丢失问题的方法Jun 30, 2023 pm 04:37 PM

如何解决Linux服务器上的系统日志丢失问题摘要:在Linux服务器上,系统日志对于监控和故障排除非常重要。然而,有时候系统日志可能会丢失或未能正常记录,给故障排查造成困扰。本文将介绍一些解决方案,帮助解决Linux服务器上的系统日志丢失问题。引言:在Linux服务器上,系统日志是一种非常重要的资源,它用于记录系统和应用程序的运行状态、错误信息、警告信息以及

源码编译安装PHP PDO MySQL:实用技巧与注意事项源码编译安装PHP PDO MySQL:实用技巧与注意事项Mar 07, 2024 pm 09:27 PM

源码编译安装PHPPDOMySQL:实用技巧与注意事项PHP是一种广泛应用的服务器端脚本语言,而MySQL是一个流行的开源关系型数据库管理系统,两者结合使用能够为网站开发提供强大的支持。在实际开发中,经常需要使用PHPPDO扩展来连接MySQL数据库,以实现数据的存储与操作。本文将介绍如何通过源码编译安装PHP,并配置PDO连接MySQL的方法,同时提

深入探究:Golang如何实现文件监控功能深入探究:Golang如何实现文件监控功能Feb 23, 2024 am 09:27 AM

Golang作为一种高效、简洁的编程语言,在文件处理方面有着出色的表现。其中,文件监控是一个非常常见且有用的功能,可以帮助我们实时监测文件系统中的变化,从而及时做出相应的处理。本文将深入探究Golang如何实现文件监控功能,并提供具体的代码示例,帮助读者更好地理解和应用这一功能。为何需要文件监控功能?在现代软件开发过程中,文件操作是一个非常重要的环节。特别是

如何解决Oracle服务丢失的问题?如何解决Oracle服务丢失的问题?Mar 08, 2024 pm 04:27 PM

解决Oracle服务丢失的问题Oracle数据库是众多企业和组织首选的关系型数据库管理系统,但在实际使用过程中,有时会遇到数据库服务丢失的情况,影响系统正常运行。本文将介绍如何解决Oracle服务丢失的问题,并给出具体的代码示例,帮助读者更好地处理这一常见的数据库故障。一、检查Oracle服务状态在解决Oracle服务丢失问题前,首先需要确认服务的当前状态。

MySql的日志监控:如何快速检测和分析MySQL的错误和异常MySql的日志监控:如何快速检测和分析MySQL的错误和异常Jun 15, 2023 pm 09:42 PM

随着互联网和大数据时代的到来,MySQL数据库作为一种常用的开源数据库管理系统,被越来越多的公司和组织所采用。但是,在实际的应用过程中,MySQL数据库也会出现各种各样的错误和异常,如系统崩溃、查询超时、死锁等。这些异常对系统的稳定性和数据的完整性会造成严重的影响,因此,快速检测和分析MySQL的错误和异常是一项非常重要的工作。日志监控是MySQL的重要功能

PHP与Slack集成:如何实现日志监控与警报机制PHP与Slack集成:如何实现日志监控与警报机制Sep 13, 2023 am 10:30 AM

PHP与Slack集成:如何实现日志监控与警报机制引言:在现代的软件开发中,日志监控和警报机制是非常重要的,它们能及时发现并解决系统中的问题。Slack是一种广泛应用的团队协作工具,它提供了强大的信息传递和实时通知功能。本文将介绍如何使用PHP语言将日志监控与Slack集成起来,从而实现实时的警报通知机制。一、什么是Slack?Slack是一种团队协作工具,

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

記事本++7.3.1

記事本++7.3.1

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具