读Java性能权威指南(第2版)笔记05_数据库性能JDBC

Win10无外网热点搭建全指南:纯局域网通信与设备互联 热点并不是只有共享上网一种用途。在很多工程与办公场景中,我们需要的是让手机、笔记本、开发板等设备临时组成一个纯内网,完成文件传输、端口调试或局域网联机,而不需要任何外网出口。Win10笔记本在不连接互联网的状态下,借助系统移动热点或netsh承载网络,完全可以创建一个无外网热点,实现设备间二层互通。其核心在于利用SoftAP建立虚拟无线接入点,并绕开或禁用ICS的NAT转发。掌握这一技术,可在会议、出差、物联网调试等场景中快速搭建临时局域网,无需额外路由器。本文详细梳理三种实现路径、操作步骤及常见故障排查, 阅读详情

 

1. 影响数据库应用程序性能最重要的因素

1.1. JDBC驱动

1.1.1. JPA底层使用了JDBC

2. 瘦驱动

2.1. 为了让Java应用程序的内存占用很小

2.2. 依赖数据库服务器来完成更多的处理工作

3. 胖驱动

3.1. 工作从数据库移至Java应用程序

3.2. 进行更多处理、消耗更多内存

4. JDBC连接池

4.1. 规则1:让应用程序中的每个线程都有一个连接

4.1.1. 在服务器中,在初始时将线程池和连接池设置为相同的大小

4.1.2. 在独立应用程序中,可以根据应用程序创建的线程数确定连接池的大小

4.1.3. 程序中的任何线程都不必等待可用的数据库连接,并且数据库有足够的资源来处理应用程序施加的负载

4.2. 数据库是瓶颈,规则1就不适用了

4.2.1. 用连接池限制发送到小规模数据库的工作量

4.2.1.1. 应用程序线程可能需要等待一个空闲的连接

4.2.1.2. 如果数据库没有被压垮,系统的总吞吐量会最大化

4.3. 初始化连接对象的成本很高

4.3.1. 在Java中它们经常被池化

4.3.2. 在池化对象所占用的内存和池化将触发的额外GC数量之间取得适当的平衡是非常重要的

4.4. 优化连接池很重要

4.4.1. 减少对垃圾回收器产生不利影响

4.4.2. 减少对数据库的性能产生不利影响

5. 驱动类型

5.1. 1型驱动

5.1.1. ODBC和JDBC之间的桥梁

5.1.1.1. Open Database Connectivity,开放数据库互连

5.1.2. 一个程序必须使用ODBC与数据库进行通信,就必须使用

5.1.3. 性能一般很差

5.2. 3型驱动

5.2.1. 纯Java语言编写

5.2.2. 为特定的架构设计

5.2.3. 有个中间件能提供中间转换过程

5.2.4. 中间件可以位于DMZ中,为数据库连接提供额外的安全保障

5.3. 2型驱动

5.3.1. 使用原生库来访问数据库

5.3.2. 允许Java驱动利用多年来在编写C库上所做的工作

5.3.3. 数据库供应商必须为驱动提供与平台相关的原生库,Java程序也必须设置环境变量才能使用该库

5.3.4. 性能往往非常好

5.4. 4型驱动

5.4.1. 纯Java驱动

5.4.2. 实现了数据库供应商为访问数据库定义的线路协议

5.4.3. 性能通常和2型驱动一样好

5.4.4. 最容易使用

5.5. 推荐使用

6. 预处理语句

6.1. 不是Statement进行JDBC调用

6.1.1. 语句只使用一次

6.1.1.1. 最好使用Statement常规语句

6.2. 使用PreparedStatement场景

6.2.1. 重用

6.2.2. 包含很多JDBC调用的批处理程序

6.2.3. 在其生命周期中会服务大量请求的服务器

6.3. 具有安全性和编程的优势

6.4. 会消耗大量的堆空间

6.4.1. 避免因池化太多非常大的对象而产生GC问题

7. 预处理语句被池化

7.1. 重用PreparedStatement对象关键点

7.1.1. JDBC连接池

7.1.2. JDBC驱动配置

7.2. 必须在每个连接的基础上进行池化

7.2.1. 大多数JDBC驱动和数据框架可以自动地做到这一点

7.2.2. 确保JDBC驱动和数据框架只有一个在管理预处理语句池是非常重要的

7.2.3. 预期JDBC驱动能够更好地池化语句

7.2.3.1. 驱动是针对特定数据库的

7.2.3.2. 比更通用的应用程序服务器代码更好

7.3. 连接池的大小很重要

7.3.1. 会缓存预处理语句

7.3.1.1. 语句缓存

7.3.1.2. 会消耗大量的堆空间

7.4. 管理语句池

7.4.1. ConnectionPoolDataSource类的setMaxStatements()方法可以启用或禁用语句池

7.4.1.1. setMaxStatements()方法的值为0,语句池就会被禁用

7.4.2. 配置JDBC驱动来创建和管理语句池

7.4.2.1. 查阅该驱动的文档

7.4.2.2. 设置驱动,将maxStatements属性设定为所需的值(语句池的大小)

7.4.2.3. 额外的设置

7.4.2.3.1. Oracle设置确定是使用隐式语句池还是显式语句池

7.4.2.3.2. MySQL设置另一个属性来启用语句池

7.4.3. 在应用程序代码中创建和管理语句池

8. 事务

8.1. 应用程序对正确性的要求最终决定了事务的处理方式

8.1.1. 不要让对性能的渴望超过应用程序的正确性

8.2. 性能损失

8.2.1. 数据库事务的创建和提交需要时间

8.2.1.1. 确保数据库的更改完全存储到磁盘上

8.2.1.2. 要确保数据库事务日志是一致的

8.2.2. 事务通常会获得一组特定数据的锁

8.3. 事务的开始和结束都基于Connection对象的使用方式

8.3.1. 通过setAutoCommit()方法设置连接有一个自动提交模式

8.4. 事务提交成本很高

8.4.1. 一个目标是在一个事务中执行尽可能多的工作

8.4.2. 另一个目标执行时间应该尽可能短

8.4.3. 矛盾

8.5. 锁可以保护数据的完整性

8.6. 事务隔离模式

8.6.1. TRANSACTION_SERIALIZABLE

8.6.1.1. 序列化事务

8.6.1.2. 成本最高

8.6.1.3. 在事务进行期间,事务访问的所有数据都被锁定

8.6.1.4. 适用于通过主键访问的数据和通过WHERE子句访问的数据

8.6.1.5. 在使用WHERE子句的时候,表会被锁定,这样在事务进行期间就不能添加满足该子句的新数据

8.6.1.6. 每次查询时看到的数据就都是一样的

8.6.2. TRANSACTION_REPEATABLE_READ

8.6.2.1. 重复读

8.6.2.2. 在事务进行期间,被访问的所有数据都被锁定

8.6.2.3. 其他事务可以在任何时候向表中插入新的数据

8.6.2.4. 幻读(phantom read)

8.6.2.4.1. 一个事务重新执行使用某个WHERE子句的查询时,第二次可能会得到不同的数据

8.6.2.5. MySQL默认

8.6.2.6. Oracle不支持

8.6.3. TRANSACTION_READ_COMMITTED

8.6.3.1. 不可重复读

8.6.3.2. 锁定事务进行期间被写入的数据

8.6.3.3. 在事务进行期间,某一时刻读取的数据可能和另一时刻读取的数据不同

8.6.3.4. Oracle默认

8.6.3.5. IBM Db2默认

8.6.4. TRANSACTION_READ_UNCOMMITTED

8.6.4.1. 成本最低

8.6.4.1.1. 不涉及锁

8.6.4.2. 脏读(dirty read)

8.6.4.2.1. 一个事务可以读取在另一个事务中写入(但未提交)的数据

8.6.4.2.2. 第一个事务可能会回滚(写入操作没有实际发生),因此第二个事务会在错误的数据上操作

8.6.4.3. Oracle不支持

8.6.5. TRANSACTION_NONE

8.6.5.1. JDBC规范定义了第5种事务隔离模式

8.6.6. setTransactionIsolation()方法

8.6.6.1. 给数据库提供必要的事务隔离级别

8.6.6.2. 如果数据库不支持给定的级别

8.6.6.2.1. JDBC驱动会抛出异常

8.6.6.2.2. 自动将隔离级别设置为它支持的下一个更严格的级别

8.6.7. 悲观锁(pessimistic locking)

8.6.8. 乐观锁(optimistic locking)

8.6.8.1. 数据访问不存在竞争,采用乐观锁会显著提升性能

8.6.8.2. 当两个数据源之间发生竞争的概率很小时,乐观锁的效果最好

8.7. 结果集

8.7.1. 设置JDBC驱动一次传输的数据行数

8.7.1.1. 可以使用PreparedStatement对象上的setFetchSize()方法

8.7.1.2. 默认值因JDBC驱动的不同而不同

8.7.2. 处理大量查询数据的应用程序时应该考虑更改数据的提取大小

8.7.3. 权衡

8.7.3.1. 在应用程序中加载太多数据(给垃圾回收器增加压力)

8.7.3.2. 为了检索一组数据而频繁调用数据库

Unity如何实现数字人口型同步 SALSA LipSync v2是一款实时唇音同步系统,无需音素映射即可根据音频自动生成口型动画。系统提供三大核心功能:基于音频波形分析的智能口型同步、EmoteR表情随机化工具以及Eyes眼睛/头部追踪系统。配置流程简单快捷,只需导入模型后通过一键配置完成基础设置,再添加A/E/I/O/U等基本口型混合变形即可实现基础功能。进阶功能支持表情池管理(手动/随机/强调/重复触发)和眼部动作配置(骨骼旋转或混合变形)。系统支持三种输入方式:本地音频文件分析、麦克风实时输入和文本转语音,为数字人角色提供完整的表情 阅读详情

相关推荐

别再乱改grub.cfg了!手把手教你用GRUB2自定义多系统启动菜单(含UEFI/BIOS双模式配置)

本文详细介绍了如何安全、高效地使用GRUB2自定义多系统启动菜单,涵盖UEFI/BIOS双模式配置。通过避免直接编辑grub.cfg文件,采用正确的配置方法和命令,帮助用户打造稳定且美观的启动环境,特别适合Linux多系统用户和开发者。

weixin_42553471的博客 590

3p0详细配置

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33795833的博客 214

特征提取 Features Extraction

介绍了特征提取的基本概念,从分类变量,文本信息和图片信息中进行特征提取的方法,以及实现特征提取的类库

JasonH2021的博客 1万+

java基础类库——java数据库编程,JDBC连接(原生数据库连接)(十)

java数据库编程,JDBC连接(原生数据库连接)

weixin_54811122的博客 1108

Claude Code Router 401错误修复

claude code router配置相关环境变量问题

如沐春风 6360

告别瞎猜!用通达信/同花顺这些资金流向函数,一眼看穿主力动向(附实战公式)

本文详细解析了通达信/同花顺资金流向函数的实战应用,帮助投资者精准识别主力动向。通过12个核心资金函数的组合逻辑,构建主力行为监控体系,避免未来函数陷阱,识别主力对倒行为,并提前捕捉异动。适合股票投资者提升自选股分析能力。

weixin_42522964的博客 1227

jdbc原生连接数据库工具类

jdbc原生连接数据库工具类 在有些项目中,我们需要用到原生的Java技术来编写,这样就会用到jdbc来连接数据库,jdbc的连接步骤就只有加载驱动得到连接等等,我们可以把重复的抽取代码抽取出来,提高效率 下面开始 首先创建一个类,我命名为JdbcUtil.java 第一步就是加载驱动,由于驱动我们只需要加载一次,所以放在静态代码块中 public class JdbcUtil { static { try { Class.forName("com.mysql.jdbc.Driver");

laolitou2的博客 724

大数据面试 逻辑题

逻辑题大致分为比较逻辑题、分析逻辑题、综合逻辑题、抽象逻辑题、概括逻辑题、推理逻辑题、论证逻辑题等,由于这类题比较考验综合素质,因此也一直是各大企业笔试、面试时经常喜欢考察的题目类型之一。很多童鞋认为逻辑题很难,其实不然。多做练习,打开思路,这类题还是可以轻易化解的。 下面为大家整理了网络上最全的75道逻辑判断测试题。在每道题目下方有答案,是用白色显示的,反选就可以看到啦~ 【1】假设有一个池...

zzq_0916s的博客 4423

c3p0 数据库连接池

c3p0 数据库连接池手册 定义 c3p0是一个成熟的、高并发的JDBC连接池,它随Hibernate一同分发,希望提供一个优秀的J2EE企业级应用的数据源实现。 使用情形 c3p0: 提供与基于驱动器管理的JDBC驱动和java.sql.DataSource视图都兼容的获取数据库连接的类。 透明化了数据源的连接和PreparedStatement,使传统的

jay1110C的博客 2393

FPGA信号处理系列文章——分数倍插值抽取滤波器(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA信号处理系列文章——分数倍插值抽取滤波器(一)前言信号流matlab模型频谱示意图分析总结 前言 变采样率滤波器不仅仅存在整数倍插值和整数倍抽取的情况,还会存在分数倍插值抽取的情况。那这种情况下要怎么处理呢 信号流 分数倍插值抽取滤波器的信号流是什么?信号先进行插值,再进行FIR滤波,最后进行抽取 matlab模型 %signal 定点化数据输入 coeff_val_fir = importdata('fir.coe'); si

gzy0506的博客 1万+

AUTOSAR从入门到精通-汽车电子电气架构(EEA)(二)

需求的传递并非完全是瀑布式的单向传递,而是双向的,只有被下游接受了的需求才是有效的需求,而且,下游是可以反向对上游提出需求的。当街区的设计完成之后,接下来要做的就是每栋建筑的详细设计,建筑的设计者发布的图纸中规定了房屋的主要结构、所在位置与周边环境的相互关系,以及屋中各种组件的位置与相互之间结合的关系,比如砖混结构、房屋的具体位置和朝向、卧室与客厅的相对位置与尺寸、马桶在卫生间中的位置等,还会对各种建筑材料的选取原则给出具体的标准,比如水泥的标号,钢筋的型号,各种电线的等级要求等等。

getusushu的博客 373

JDBC_数据库连接池的使用

今天主要说说JDBC数据库连接池的好处以及分类,使用数据库连接池可以有效的节约资源,是必须掌握的技术,下面一起来看看为什么使用JDBC数据库连接池吧。 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:

斗鹰的技术专栏 582

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 231

Java性能权威指南(第2版)读后总结与感想

语言在不断进化发展、jvm也在不断进化发展,在采用java 8 不变的情况下,使用包含新的垃圾回收算法的jdk,使用新的垃圾回收算法能够获得更好的性能体验。了解不难,学精很难,性能调优不仅仅是技术活,更是一门艺术,需要考虑的场景、判断的条件纷繁复杂,各种开关也会相互影响,使用的不好,还不如采用默认方式。验证、测试自然少不了各种工具,既有原生自带的,也有开源或者商业的第三方工具,在这个方面,介绍的也较详细,能够帮忙我们分析性能问题的源头。有些性能建议是包治百病的,比如,使用更小的对象;

lyingSeven的博客 209

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Java】JDBC全面指南 —— 你的JDBC学习终点站

【Java】JDBC全面指南 —— 你的JDBC学习终点站 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在Java开发的世界中,数据库操作是不可或缺的一部分。无论你是初入编程领域的新手,还是经验丰富的老手,掌握Java Database Connectivity (JDBC) 都是提升你数据库操作能力的关键。《JDBC全面指南》正是为此而生,它不仅提供了从基础到高级...

gitblog_06532的博客 997

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

读Java性能权威指南(第2版)笔记06_数据库性能JPA&SpringData

除非正在使用的JPA实现支持查询缓存,否则使用JOIN查询经常会对性能造成负面影响,因为它没有利用L2缓存

lyingSeven的博客 215

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java性能权威指南-总结23

警如,应用程序运行的服务器比较弱,是个双核的机器,它连接的是一个性能强大、调优良好的数据库服务器,那么在这种情况下,很可能应用还没施加多大的压力到数据库,应用服务器自身的CPU就已经达到了100%。典型的情况下,这种设置能取得最好的性能:所有的程序线程都不需要等待数据库连接的释放,数据库亦有足够的资源处理来自应用程序的负荷。对于JDBC驱动程序的性能要保持谨慎怀疑的态度:经常会出现这样的情况,即某个驱动程序在特定的环境下表现的性能优于其他供应商,但在自己的环境中,采用同样的配置效果却不尽人意。

weixin_42583701的博客 395

Java性能权威指南-总结24

典型的情况下,这种设置能取得最好的性能:所有的程序线程都不需要等待数据库连接的释放,数据库亦有足够的资源处理来自应用程序的负荷。典型的情况下,这种设置能取得最好的性能:所有的程序线程都不需要等待数据库连接的释放,数据库亦有足够的资源处理来自应用程序的负荷。2.跟其他的对象池一样,对连接池的调优也是非常重要的,我们需要确保连接池不会对垃圾收集造成负面的影响。为了优化性能,需要考虑这些问题:如何调整程序,优化事务的实现,让事务自身更加高效,以及在事务中如何持有锁,才能让应用程序的整体性能有更好的扩展性。

weixin_42583701的博客 517

JDBC MySQL 连接 URL 完整权威指南

本文是JDBC连接MySQL数据库的URL配置权威指南,详细解析了连接URL的完整结构、100+个参数的分类说明及最佳实践。内容主要包括:JDBC URL标准格式(协议/主机/端口/数据库名/参数)、6大类参数详解(连接网络、身份认证、会话行为、性能优化、高可用、调试日志)、核心参数推荐值(如SSL设置、时区配置、批处理优化等),以及开发环境与生产环境的具体配置示例。重点强调了性能优化参数(如rewriteBatchedStatements)和安全隐患(allowPublicKeyRetrieval),并提

python15397的博客 1837

数据库中间件:Mycat 权威指南+Mycat 实战笔记,双管齐下

以上便是我在复习学习Mycat过程中所需的(收集整理的)相关学习资源:Mycat 权威指南 + Mycat 实战笔记 ,希望对你们有帮助。

Park33的博客 525

终于有人把性能优化讲清楚了,阿里架构师推荐的Java性能权威指南

Java给大部分人的感觉就是慢,有严重的性能问题。其实程序慢的问题,与语言无关,与Java无关。Java应用的性能优化也是一个老生常谈的话题,但是只要我们深入的了解性能调优方法,走遍天下都不怕!大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事。工欲善其事必先利其器,如果我们能真正掌握性能优化的核心原理,那么将会有很大收获。

知识分享官 320

读Java性能权威指南(第2版)笔记13_堆内存下

当对象的数量不太多时,软引用的效果才会好,否则,还是要考虑使用更传统的、大小有界的对象池,并且以LRU缓存形式实现。被封装的这个对象被称为所引对象。使用了31 GB的堆并启用了压缩的oop的程序,通常比使用了33 GB堆的程序快。一旦更多的内存被添加到堆中以弥补未压缩的引用所使用的空间,GC周期的数量就会减少。不确定引用会消耗自身的内存,而且会长时间持有其他对象的内存,应尽量少用。限流对池性能的影响是有利的,池允许对稀缺资源的访问进行限流。普通类的大型对象池带来的性能问题肯定会比解决的问题还多。

lyingSeven的博客 236

Java性能权威指南-总结14

不过,这样解决同步问题对整体性能没什么帮助:初始化一个Random对象的开销非常大,而且持续创建这个类的实例,与在多个线程间共享一个类实例的同步瓶颈相比,性能可能更差。但是保存的对象数不可能会超过线程数,大部分时间两者是相同的。对于一般的对象重用,这里的经验是,在初始化对象需要很长时间时,不用畏惧探索用对象池或线程局部变量技术来重用那些创建开销高昂的对象。有一种有趣的变化,初始化的开销不是特别高,但是释放的成本很高,因为这些对象要依赖对象终结操作(finalization)来确保释放掉所用的原生内存。

weixin_42583701的博客 869

终于有人把性能优化讲清楚了!京东架构师推荐的Java性能权威指南

总之,性能优化之路虽充满挑战,但只要我们持续探索、不断实践,就一定能在这条道路上越走越顺。相信通过对其中知识的吸收和运用,我们能够在工作中更加游刃有余,让程序的性能得到显著提升。未来,随着技术的不断发展,性能优化的重要性将愈发凸显。让我们紧跟时代步伐,不断更新知识,为打造更高效、更优质的程序而努力!

jcc4261的博客 363

终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了

Java给大部分人的感觉就是慢,有严重的性能问题。其实程序慢的问题,与语言无关,与Java无关。Java应用的性能优化也是一个老生常谈的话题,但是只要我们深入的了解性能调优方法,走遍天下都不怕! 大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事。 工欲善其事必先利其器,如果我们能真正掌握性能优化的核心原理,那么将会有很大收获。 市面上真正适合学习的性

一入Java深似海 214

终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南

市面上真正适合学习的性能优化方面的资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃。线程池与ThreadPoolExecutor、线程同步、JVM线程调优、监控线程与锁。操作系统的工具和分析、Java监控工具、性能分析工具、Java任务控制。Java和JIT编译器版本、高级编译器调优、编译器中级调优、逆优化。web容器的基本性能、线程池、对象序列化、XML和JSON处理。缓冲式.I/O、类加载、Java原生接口、异常、字符串的性能。

Trouvailless的博客 486
上一篇: 读Java性能权威指南(第2版)笔记04_ Java SE API技巧下
下一篇: 读Java性能权威指南(第2版)笔记06_数据库性能JPA&SpringData
躺柒
博客等级 码龄4年 7004粉丝 1321原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值