搜尋
首頁資料庫mysql教程Hibernate性能优化

Hibernate性能优化

Jun 07, 2016 pm 02:50 PM
hibernate最佳化原創效能

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-141.html (1)大量分页查询时,及时session.clear(),可能导致内存溢出; 大集合遍历:如寻找敏感词汇; 注:内存泄漏,Java本身不会内存泄漏,但是Java调用的底层C会内存泄

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-141.html

(1)大量分页查询时,及时session.clear(),可能导致内存溢出;
大集合遍历:如寻找敏感词汇;
 注:内存泄漏,Java本身不会内存泄漏,但是Java调用的底层C会内存泄漏。
(2)1+N问题:(典型面试题)
 一个实体A关联着另一个实体B,查询所有的实体A时,原本一条sql语句就可完成,结果后面却多了N条查询各个A关联的实体B的查询语句的问题,影响性能。
 解决办法:A. 实体B设置为LAZY;
           B.BatchSize多次单条查询合并成少次的多条查询,减少sql次数;
           C.join fetch:设置外连接,把后面要查询的也一起查出来,减少查询次数。
(3)BatchSize多次单条查询合并成少次的多条查询,减少sql次数。
(4)List的Iterator:
   A.List:Query查询到的List是直接一条sql查询所有结果;
   B.Iterator:只查询表的最小主键,接下来每访问一条才发送一条sql语句查询具体的记录,但是Iterator使用了Hibernate的缓存,同一个session查询两次,底层sql只发送一次而已,它会自己去缓存中查询结果是否已经有了,减少sql查询次数。
(5)一级缓存、二级缓存、查询缓存(面试题)
   A.一级缓存:session中的缓存,查询过一次之后的同一个session下再次查询会从缓存中查询;
   B.二级缓存:SessionFactory级别的缓存,可以跨越session,Hibernate没有实现,需要使用第三方二级缓存实现,默认EHCache,需要EHCache和Logging的jar;
     a.打开二级缓存:Hibernate主配置文件设置打开缓存并指定二级缓存实现类;
        @Cache注解:标注需要缓存到二级缓存的实体Entity;
        Ehcache.xml:EHCache二级缓存的配置文件,可设置多个缓存配置,根据
        name选择设置的属性配置;
     b.适用二级缓存:经常访问、改动不大、数量有限;
     c.load、iterator默认使用二级缓存,list有往二级缓存加数据但是查询时不使用;
     d.query若要使用二级缓存,需要打开查询缓存,
        true
        setCachable(true);指明Query打开二级缓存;
     e.缓存算法:LRU最近最少使用、FIFO(先进先出)、LFU(最近最不常使用)
   C.查询缓存:特殊的二级缓存,专门用于查询操作;
(6)二级缓存使用步骤:
   A.导入ehcache的jar和commons-logging的jar;
   B.类路径加入ehcache的配置文件,里面配置缓存配置;
   C.hibernate的全局配置文件配置开启二级缓存;
   D.标签设置要开启二级缓存的实体类;
   E.:usage设置缓存策略,region设置要使用的EHCache配置选项,include设置是否缓存该实体所关联的关联实体。
(7)事务并发处理(面试):
事务基础知识见JDBC笔记;
  A. 悲观锁:解决不可重复读,load添加第三个参数设置;
悲观地认为别人总想着影响自己,直接加锁,防止别人的影响;
  B. 乐观锁:解决多人同时修改,程序中实现;
乐观地认为别人不会来影响自己,加一个记录版本号的属性,@Version,事务开始时检查版本号,到真正要修改时再检查版本号,若版本号不变,则正确执行,版本号变了说明被影响了,报错;
(8)一定要设置连接池!!!
(9)一定注意数据库的全表查询是禁止的,关联关系的多方直接不延迟也是禁止的,Hibernate会把整个表加入内存和一级缓存,很容易导致内存溢出。

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-141.html

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

描述MySQL異步主奴隸複製過程。描述MySQL異步主奴隸複製過程。Apr 10, 2025 am 09:30 AM

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

mysql:簡單的概念,用於輕鬆學習mysql:簡單的概念,用於輕鬆學習Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL:數據庫的用戶友好介紹MySQL:數據庫的用戶友好介紹Apr 10, 2025 am 09:27 AM

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDB緩衝池如何工作,為什麼對性能至關重要?InnoDB緩衝池如何工作,為什麼對性能至關重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL:初學者的數據管理易用性MySQL:初學者的數據管理易用性Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

與MySQL中使用索引相比,全表掃描何時可以更快?與MySQL中使用索引相比,全表掃描何時可以更快?Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。