Hibernate自动提交命令强制MySQL在过多的磁盘I / O中运行

亲爱的大家,

我敢肯定,你们中的许多人都在使用Hibernate和MySQL,我自己在这里和那里都使用它。 通常,编程模型是不错的,但是普通的JDBC可以快得多已经不是什么秘密了。 在这篇文章中,我想引起您的注意Hibernate在您MySQL服务器中引起的一个小问题。

如果跟踪Hibernate发送到MySQL数据库SQL,就会发现一致地,Hibernate以“ SET autocommit = 0”开始每个事务,并以“ commit”结束,然后是“ SET autocommit = 1”。 这些语句看似无害,但它们使MySQL将某些内部状态刷新到磁盘上。 简而言之,每次Hibernate调用这两个语句之一时,MySQL都会编写通常不会编写的内容。 因此,与使用普通JDBC相比,使用Hibernate会使您MySQL服务器在磁盘上的依赖更多。

我做了一个小实验来证明这一点。 要重复此实验,请找到带有MySQL数据库的空闲计算机。 机器不应运行任何会导致磁盘I / O的东西,否则效果将不像对我一样容易看到。

首先,我发送了完整的“ SELECT DUAL DUAL”; 命令进入MySQL提示。 像这样:

while true; doecho "SELECT 1 FROM DUAL;"
done | mysql

查看iostat(8)的输出,结果表明机器上没有I / O。 top(1)确实表明机器正在运行。 由此可见,这些SELECT语句不会引起磁盘I / O。

接下来,我添加了Hibernate的自动提交命令,如下所示。

while true; doecho "SET AUTOCOMMIT=0;"echo "SELECT 1 FROM DUAL;"echo "COMMIT;"echo "SET AUTOCOMMIT=1;"
done | mysql

这次,iostat(8)确实表明存在磁盘I / O。 MySQL服务器的工作比以前更加艰苦,同时仍然提供完全相同的答案。 这仅来自单个线程。 您的应用程序可能会在多个线程和连接上同时发出这些语句,从而加剧了问题。

对于无论如何都会导致I / O的查询,我认为这种开销可以忽略不计。 对于小型读取查询,这意味着您突然在数据库服务器上执行磁盘I / O。

我还没有找到一种方法来向Hibernate解释我不想让它将自动提交语句发送到数据库。 您可以在Hibernate中关闭自动提交功能,但是只能关闭Hibernate的内部自动提交功能。 它不会停止将这些命令发送到数据库。

读取Hibernate源代码(尤其是org.hibernate.transaction.JDBCTransaction的源代码)可以看到,Hibernate使它在每次事务处理之前强制自动提交连接为假,并在之后进行重置。 这是硬编码的。 Hibernate*想要*自动提交关闭。

如果我MySQL服务器仅服务于启用了Hibernate的应用程序,我可能会考虑将数据库服务器的默认自动提交模式关闭。 另外,我可以使用elideSetAutoCommits标志,这可能会减少自动提交切换的数量。 但是,这严重破坏了POLA 。 另外,我的服务器不仅仅支持启用了Hibernate的应用程序,因此更改默认设置肯定会破坏其他地方。

所以,这让我陷入困境。 我不能告诉Hibernate不发出“ SET autocommit”,JDBC驱动程序不会禁止它们,也不能告诉MySQL忽略它们。

参考: Hibernate发送自动提交命令会强制MySQL在Java Monitor论坛上从我们的JCG合作伙伴 Kees Jan 做过多的磁盘I / O。

快乐编码
拜伦

相关文章:

  • Hibernate映射集合性能问题
  • DataNucleus 3.0与Hibernate 3.5
  • 提升您的Hibernate引擎
  • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
  • JBoss 4.2.x Spring 3 JPA Hibernate教程

翻译自: https://www.javacodegeeks.com/2011/07/hibernate-autocommit-commands-force.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两个向量之间的夹角公式_关于平面向量夹角求参数取值范围的两种基本解法介绍...

平面向量的夹角问题是考察高中向量知识掌握程度的常考内容,主要涉及到的知识点是平面向量的数量积公式。在这里介绍一道常见的平面向量题目,通过两种最基本的解法,来帮助同学们理解向量之间的夹角。填空题第15题:设平面向量a(-2&a…

一些基本概念的总结

web窗体页: 可以使用web窗体页来创建可编程的web页,这些web页用作web应用程序的用户界面。web窗体页在任何浏览器或客户端设备中像用户提供信息,并使用服务器代码来时间应用逻辑。web窗体页输出几乎可以包含任何支持http的语言。 HTML控件&am…

宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)

宿迁学院是几本 学生评价怎么样好不好(10条)考生之前的努力奋斗就是为了高考报志愿时有更多的底气和把握。而俗话说,三分考、七分报,有很多考生和家长都还不太了解大学的一本、二本、三本之分,本科高校只有一个层次和等级,就是(本…

Google Guava:您永远不会知道的5件事

每个开发人员都可以使用哪些鲜为人知的Google Guava功能? 它是那里最受欢迎的库之一,它是开源的,您可能已经知道了,它来自人们玩Quidditch作为一项真正的运动的地方(至少在The Internship上 )。 它不是哈利…

hql中获取前一天的数据_PostgreSql 怎么获取数据库中关键系统信息(一)

如何通过SQL 的方式获得数据库中的一些关键信息,是一个DB最正常的工作,如何通过一些SQL来获得PG的一些关键的参数和信息或者是数据库中的一些信息是需要知道的一件事情。以下是部分 1一般来说每种数据库中都有一个或几个系统的数据库,在PG中s…

计算机信息技术为教育带来的变化,信息技术对课堂教学带来的变化

信息技术对课堂教学带来的变化谈一谈信息技术对教育教学的影响以及给课堂教学带来的变化龙川县培英学校 骆俊武在信息技术迅速发展的今天,计算机的应用、网络技术应用,直接影响着学校的的教育教学系统、学校的教育模式、教第一文库网师的教学方法。与传统…

abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢

指定一个默认脚本解释器“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。他指明了当我们没有指定解释器的时候默认的解释器。为什么建议要在首行加上脚本默认解释器,因为有的操作系统的默认解释器不是sh…

html比赛项目,趣味运动会最新个人比赛项目

趣味运动会中也有很多个人能参加的趣味比赛项目。今天小编就与大家分享趣味运动会个人赛项目,仅供大家参考!趣味运动会个人赛项目一:《懒惰的自行车》在前面车筐上放标志规则:自行车在规定的跑道上(约50厘米宽,15米长的跑道)行驶&…

CentOS 6.3 下编译Nginx(笔记整理)

1. 安装关联程序 [rootlocalhost opt]# yum search gcc [rootlocalhost opt]# yum install gcc-c [rootlocalhost opt]# yum install make [rootlocalhost opt]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel2. 下载Nginx [rootlocalhost files]# ta…

unity 是厘米还是米_1种“竹节参”,植株有40厘米高,能挂果,果子成熟后变红,珍贵...

很多顽强的野生植物会在竹林里生长,我们都知道价值比较高的七叶一枝花、金线莲等植物,就会生长在湿润的竹林里,它们喜欢湿度比较高的环境,所以在其它比较潮湿的地方也有。不过还有1种“竹节参”,它在竹林里也是常见的&…

计算机主板diy,Pc-硬件-装机DIY-〖菜鸟入门篇〗电脑主板图解

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼主板(线路板)是如何制造出来的呢?PCB的制造过程由玻璃环氧树脂(Glass Epoxy)或类似材质制成的PCB“基板”开始。制作的第一步是光绘出零件间联机的布线,其方法是采用负片转印(Subtractive transfer)的方式将…

JS中的三种弹框

1.alert();"弹框提示" 2.confirm();“确认信息”3.prompt();"输入信息"转载于:https://www.cnblogs.com/hr2014/p/3637692.html

python 窗口 网页 访问_同事用Python操控浏览器运行,引的妹子围观不止!

Python可以做的事情很多,小编也正在奋力挖掘中,今天给大家分享一下,如何用Python来控制浏览器的运行及操作!嗯 关于这个,大体有两种方式,且听小编一一列举:一、使用系统自带库 os这个方法的话任…

获取打开文件的路径和文件名

System.IO.Path.GetFileName(filename) //返回带扩展名的文件名System.IO.Path.GetFileNameWithoutExtension(filename) //返回不带扩展名的文件名 System.IO.Path.GetFullPath(filename) //返回文件所在目录及文件名 System.IO.Path.GetDirectoryName(filename) //返回文件所在…

北邮计算机系统结构课件,TEC-8 运算器组成实验(北邮).ppt

TEC-8 运算器组成实验(北邮)TEC-8 北京邮电大学计算机学院实验中心系统结构实验室 * 55H 1 55H 1 1 ↑ 55H 55H 00 00 00 55H 0 1 0 0 1 1 1 11 0AAH 55H 0 K0 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14 K1 K2 ㈡微程序方式 1.实验准备将控制器转换开关拨到微程序位…

8g可用 安装内存16g_同样是16g内存,为啥都选两条8G,不选16G单条,这难道有啥讲究?...

相信大家在看一些大神的配置,或者蜗牛这种装机小编的配置的时候,发现内存经常是两条8G,而不是一条16G,很多小伙伴也发出了疑问,难道这里面有什么讲究?这就要扯到双通道,一般来说CPU或者主板的内存控制器有两…

Generate GUID using vbscript

在 .msi 中 的 Component table,查看 ComponentId 列,是一个16进制数的字符串, 用 InstallShield IDE 添加一个 component ,ComponentId 会自动生成,点击“Generate GUID” 会重新生成一个新的 ComponentId&#xff0c…

计算机控制论文,计算机控制系统论文.ppt

《计算机控制系统论文.ppt》由会员分享,可在线阅读,更多相关《计算机控制系统论文.ppt(23页珍藏版)》请在人人文库网上搜索。1、双容水箱液位串级控制系统设计,班 级:电自09101班 答 辩 人:黄xx 指导教师:张xx,内容,安…

ps怎么对比原图快捷键_PS教程:P图前后,你还能认出这是同一个人吗?

编按:PS一直被誉为亚洲四大邪术之一,比如下图你敢相信这是同一个人吗?是不是隐隐约约回忆起了乔碧萝殿下的辉煌?但话说回来,谁不想看到最好的自己呢?今天我们就看看PS如何将人脱胎换骨,学会这招…

另一个Java 8 Lamdbas和Streams示例

我一直落后于Java 8所关注的功能,因此在这篇文章中,我将简要介绍我对lambda和stream的初步经验。 和往常一样,我将专注于Podcast课程: package org.codingpedia.learning.java.core;import java.util.Comparator;public class P…