【七天深入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 
相关文章
|
2月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
2月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
279 119
|
3月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1220 8
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
582 12
|
3月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
471 100
|
3月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
418 0
|
3月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
154 13
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
算法 Java 开发者
Java流程控制:条件与循环结构实战
本文深入讲解编程中的流程控制结构,涵盖条件语句(if-else、switch)、循环结构(for、while、do-while)及循环控制关键字(break、continue)的使用技巧与实战案例,帮助开发者写出更清晰、高效的代码。
|
4月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
916 1

相关产品

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

    更多