前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个MySQL连接问题的优化过程

一个MySQL连接问题的优化过程

作者头像
jeanron100
发布2019-06-18 19:59:50
5330
发布2019-06-18 19:59:50
举报

今天有一个开发同事反馈说通过sqoop在大数据和MySQL之间同步数据的时候,报了一个连接失败的错误。

org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

顺着这些错误日志定位发现是大数据集群的新增节点无法访问MySQL导致。

经过梳理,发现这个连接的问题竟然和大数据集群操作有关。问题的过程是这样的:

大数据集群管理员新增了集群节点,对于分布式系统来说这是对业务透明的。

sqoop做数据流转的时候,恰好数据就在新增的节点上面,但是新增节点是没有访问MySQL的权限的,也就导致了我们开始时所说的问题。

对于这个问题,我们划分了4个角色,也是归属于4个不同的小组,彼此独立:

1)大数据管理组,集群节点的操作对于业务来说应该是透明的。

2)数据分析组,他们使用大数据集群,同时做数据流转的工作,对他们来说对于大数据集群的节点也是不关心的

3)数据库管理组,因为涉及到大数据到数据库的数据流转,DBA不知道大数据新增节点会涉及哪些数据库的权限变更。

4)数据业务组,他们使用最终的数据,对于他们来说只识别MySQL端

通过上面的一些角色和基本的分工,我们发现看起来是一个简单的问题,实际上是一个流程化的工作。上游不关心下游的使用,下游不知晓上游的变更,信息在流转中出现了缺失。

所以这个问题只是冰山一角,这映射出权限管理的一个通用的问题。对于上下游之间如何衔接和有效配合,我们多个小组做了讨论,初步的想法就是通过邮件的方式来建立这个流程,我们可以叫它是一个邮件链。信息由变更发起方通知,在这里就是大数据管理组,他们发布变更通知的时候,需要同时附带关联的MySQL集群,而这个信息显然不是大数据管理组来获得,而是应该有数据分析组来提供,对于他们来说应该需要明确数据流转的细节,而这个邮件信息初步确认之后,DBA收到这个邮件信息之后就会根据提供的信息开通相应的权限,而这个操作对于数据使用方来说是无感知的。

而这个问题仅仅是个开始,我们在处理权限问题的时候发现这个数据流转相关的单表有近400G,数据量在17亿左右。 对于MySQL来说,这个表的数据操作就是一颗不定时炸弹,一旦出现慢查询,那执行时间都会无限放大。

经过分析,我们大体理解了这几个大表的业务逻辑,大数据集群会去做计算,把计算后的结果数据导入MySQL中,这个导入的频率是T+1,也就意味着这是一个延迟1天的数据流转操作,比如今天是6月13日,那么流转的数据是6月12日这一天的。 所以按照数据的生成规律来看,使用典型的周期表业务就可以支持这种数据管理方式。

假设表为test_data,则周期表为:test_data_20190601,test_dat_20190602,test_data_20190603

和业务方做了初步的沟通,会发现周期表可以实现这个需求,但是对于目前的问题来说,需要相关的多方都改动业务逻辑代码,要完成这个联调还是需要花费一些时间的。 所以业务同学是倾向于通过删除数据的方式,尽可能保留原来的表名,我们经过沟通提出了潜在的问题,即数据流转写入的时候,假设数据有300万,则在binlog中会记录这300万的数据变化,而要删除以前的数据,假设也有300万,则binlog也会记录这300万的数据变化,这样一来数据的代价就是600万,而使用周期表的方式,我们就可以很容易的控制表的数据,确认删除的数据使用drop产生的binlog很少,所以从功能和性能角度来说,我们是不建议在一张大表中存放数据按照时间维度来删除的。

在当前的情况下,尽可能让双方都不做变更,我们可以间接的实现周期表,即表test_data名字不变,在20190603的这一天,写入test_data的数据是20190602的数据,则DBA在数据流转之后,就可以把表test_data改名为20190602,而复制完整的表结构信息新建表test_data.

这样一来整个数据库中的列表信息如下:

test_data

test_data_20190601

test_data_20190602

test_data_20190603

使用这种方式之后,对于业务使用经过确认是不需要改动的,但是对于DBA来说可以更加有效的管理数据。

下午的时候经过确认把原来的近400G的大表做了rename操作,整个数据流转的过程就更加轻量了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档