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

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

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


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

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

 

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

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

 

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

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

 

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

A4:同Q1。

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Q10: CPU生产火焰图工具只适用JAVA语言么

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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 
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
548 13
|
人工智能 Java 关系型数据库
Java的时间处理与Mysql的时间查询
本文总结了Java中时间与日历的常用操作,包括时间的转换、格式化、日期加减及比较,并介绍了MySQL中按天、周、月、季度和年进行时间范围查询的方法,适用于日常开发中的时间处理需求。
297 0
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
690 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
356 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
397 0
|
Java
Java开发初级6.24.1
1.下面关于泛型的描述中错误的一项是? A. “? extends 类”表示设置泛型上限 B. “? super 类”表示设置泛型下限 C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容 D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过 相关知识点: https://edu.aliyun.com/course/35 正确答案:D 2.下列选项中属于SVN中控制鉴权用户访问版本库的权限默认权限的是() A. write B. read C. none D. null 相关知识点: auth-access:取值范围为"writ
448 0
|
Java 开发工具 git
Java开发初级6.23.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
277 0
|
SQL 前端开发 JavaScript
Java开发初级6.23.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
453 0

相关产品

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

    更多