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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 【开营第三课,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连接在重启后自动重连,需要看实际情况分析。



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
197 66
|
24天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
117 26
|
28天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
55 2
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
346 1
|
3月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
237 6
|
3月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
109 5
|
3月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
132 1
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
131 0

相关产品

  • 云数据库 RDS MySQL 版