【七天深入MySQL实战营】答疑汇总Day3 MySQL Java 开发实战

简介: 【开营第三课,MySQL Java 开发实战】 讲师:义泊,阿里云技术专家。课程内容:深入浅出ORM框架MyBatis;连接池框架HikariCP和druid的剖析和最佳实践;Java应用性能问题诊断技巧。 答疑汇总:特别感谢班委@陈亮 同学

【开营第三课,MySQL Java 开发实战】
讲师:义泊,阿里云技术专家。
课程内容:深入浅出ORM框架MyBatis;连接池框架HikariCP和druid的剖析和最佳实践;Java应用性能问题诊断技巧。
答疑汇总:特别感谢班委@陈亮 同学


Q1MySQL 联合索引所有列的时候,为什么任意条件查询都会命中索引?

A1:比如表在ABC三列建了联合索引而且三列的顺序是ABC,如果查询条件是ABC字段或者AB字段肯定是会命中索引的,只有A字段也会命中索引,但是只是BC字段或者C字段是无法命中的。

 

Q2mysql对于如订单主从表开发,订单主表的数量合计,金额合计是查询时通过select sum实时查询好,还是在主表设计合物理字段,当从表数据发生变化时写入物理字段好?

A2:实时查询对数据的准确性是最好,但设计合计字段会有维护成本,需要看你实际的应用场景,做相应的取舍。比如只是统计订单的销量,对数据准确性和实时性要求不高,可以考虑用合计字段。

 

Q3mysql跨异构库关联查询,如跨sqlserver。有没有sql层面的实现方案,用多数据源+java编码实现很麻烦?

A3:在DB层面mysql不支持跨异构数据源的查询,反向sqlserver可以用link等方式实现。

 

Q4MySQL 联合索引所有列的时候,为什么任意条件查询都会命中索引?

A4:同Q1

 

Q5:复用数据库连接池,mybatis一级缓存会自动释放么?

A5:建议参考《深入理解mybatis原理》,其中详细讲解 了一级和二级缓存机制。

 

Q6:分库分表一般建议开发程序改造还是使用中间件透明分片?

A6:在电商体系这两种方式都有。一般用Cobar较多,进行水平拆分和垂直拆分。

 

Q7MySQL内存消耗逐渐升高直至OOM,内存参数已限制,该如何自动释放centos下的连接内存占用?

A7:如果是基于硬件条件的限制导致只能通过关闭连接来释放内存,需要考虑应用设计上是否需要优化,另外硬件本身的规格参数是否匹配。此类情况除了相关的性能调优,仍需要日常进行各项性能指标监控,找到问题真正原因去解决。自动从进程或线程关闭连接数解决不了根本问题。

 

Q8:一个系统应用最多连几个数据源

A8:取决于系统应用的需要,通常十个及以上都可以,看实际应用场景。

 

Q9:问当缓存穿透,多个请求命中同一个锁,怎么保证快速返回,不发生死锁?

A9:如果都是查询,共享锁是可以并发查询的,如果有更多事务更新会导致block。后面请MySQL内核方面专家来分享。

 

Q10CPU生产火焰图工具只适用JAVA语言么

A10:火焰图跟语言没有关系,输入固定的数据结构就会返回相应的图形。如果要剖析到某个语言内部,需要看语言是否支持拿出内部堆栈再进行分析。

 

Q11:我有个问题,前几天遇到公司一个故障,就是网站访问忽然卡动,不是连续的,如果从 Java 方面的话,看那些方面?这个大致会是那几个方面的问题?

A11:原因很多,比如网络阻塞,数据库有慢查询做DDL等,java应用代码占用CPU过高,依赖第三方接口时接口响应慢,都可能影响性能。这种情况建议通过建立DB层、系统层、java应用层的性能监控指标去分析从而判断故障点。

 

Q12:如果服务器cpu到百分之90以上,一般没响应,这时候不重启服务器如何,处理比较好?

A12:这个问题与Q12相似,还是要通过监控指标去找到实际原因,解决本质的问题。另外通过一些命令比如查看进程和线程的状态等等去辅助判断。

 

Q13:项目中采用druid进行多数据源配置的时候,怎么保持事务一致性

A13:可以考虑用分布式事务。

 

Q14:多张大表(亿级别)inner join,性能如何提高,走了索引的

A14:几个层面去看,数据量以及数据分布的影响,不同数据类型的索引类型是否合适以及mysql版本等等。如果可以优化的参数都已调优,关注热点数据是否都在cache中,合理的拆分数据去解决。

 

Q15haotim,应用使用hikari数据库链接池,时不时报错,communication  link failure

但是数据库wait time out设置8小时,连接池默认是maxlifetime30分钟,还有什么排查思路呢?

A15:要看是否连接池里面的报错,还是后台mysql的连接是否正常。关注后台的hikaricp 活跃连接数,需要看具体的问题进行分析。可以看hikaricp的官方文档进行排查。

 

Q16:之前用druid连接池,有遇到提示表或视图不存在,但是实际存在,需要重启数据库才能恢复,不知道这种问题应该从哪方面开始排查?

A16:是否druid连接在重启后自动重连,需要看实际情况分析。



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
安全 Java 领域建模
Java 17 探秘:不容错过的现代开发利器
Java 17 探秘:不容错过的现代开发利器
1304 0
|
11月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
513 13
|
12月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
524 3
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
543 2
|
12月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
426 0
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
792 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多