一次系统升级的过程

简介: 【问题背景】公司的一个销售系统运行了有5年的时间了,最近需要对该系统升级,其中有个问题一直导致整个升级过程一直停滞;升级的过程中,需要对一个表做添加字段的操作,直接运行alter语句进行操作,需要消耗大概8个小时,由于操作的过程中会进行锁表的操作,但是业务允许的停机操作只有4个小时;经过了一系列的测试终于完成了系统的更新,以下是更新过程中的一些经验。

【问题背景】公司的一个销售系统运行了有5年的时间了,最近需要对该系统升级,其中有个问题一直导致整个升级过程一直停滞;升级的过程中,需要对一个表做添加字段的操作,直接运行alter语句进行操作,需要消耗大概8个小时,由于操作的过程中会进行锁表的操作,但是业务允许的停机操作只有4个小时;经过了一系列的测试终于完成了系统的更新,以下是更新过程中的一些经验。

 

【1】环境说明:

数据库版本:5.5.36

数据库架构:主从架构

数据库引擎:innodb

需要修改的表大小:300W行,大小4GB

 

计算表占用的空间,方法如下

 
 
 
 

 

alter  table add column的原理:整个过程跟oracle的在线重定义表很像,首先创建一个临时表,再把数据从源表一条条insert到这个临时表中,当所有的数据都insert完成后,再把运来的表drop掉,把临时表rename成源表;

  • 整个过程会对源表进行加锁的操作,避免这个过程被锁定;
  • 临时表会写到数据库的tmp空间里,当这部分的空间不足时,再写入到磁盘中;

 

知道了我们要处理的对象和整个操作的原理之后,初步的优化如下:

1、参数的调优

修改参数tmp_table_size和max_heap_table_size的值

mysql>  show variables like '%tmp%';
+-------------------+----------+
| Variable_name     | Value    |
+-------------------+----------+
| max_tmp_tables    | 32       |
| slave_load_tmpdir | /tmp     |
| tmp_table_size    | 16777216 |
| tmpdir            | /tmp     |
+-------------------+----------+
4 rows in set (0.00 sec)

max_tmp_tables 默认值为32M

tmp_table_size默认值为16M

 

调整后的参数为

max_tmp_tables 值为256M

tmp_table_size值为128M

 

调整结果:经过调整后,整个过程的更新速度提升了30%;

 

2、使用pt-online-schema-change工具

通过上面的优化后,还是不能达到要求,万能的谷歌告诉我,这个mysql在线增加字段其实很多大的互联网公司都会碰到的,Percona公司早就为这种业务场景提供了相应的解决方法:使用pt-online-schema-change进行添加字段,这种方法跟oracle的在线重定义表很像。这样再进行增加列的同时,不会影响当前业务的插入操作;

 

详细的操作如下:

2.1 pt-online-schema-change的下载,通过下载percona-toolkit软件即可,软件的下载方法已经介绍过,麻烦找下本博客的连接;

2.2 设置可以直接运行命令,在/usr/local/percona-toolkit/bin目录下运行, ln pt-table-checksum    /usr/bin/pt-table-checksum

 

2.3 使用方法,

pt-online-schema-change的执行分成试运行和执行两个步骤

  • 试运行
pt-online-schema-change --alter "ADD org_id INT(11) NULL DEFAULT 0 COMMENT '组织ID' " D='pos',t='record_detail' -uroot -p123456 --dry-run

 

 

  • 执行
pt-online-schema-change --alter "ADD org_id INT(11) NULL DEFAULT 0 COMMENT '组织ID' " D='retail',t='record_detail' -uroot -p123456 –execute

 

【2】经过以上操作,在两个夜深人静的晚上,顺利的完成了系统的升级;有时候我们遇到的很多问题,其实网上都有了很好的解决方法,学以致用,感谢网友们的智慧;

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

技术博客:猎人笔记                                                数据库技术群:367875324 (请备注数据库类型)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

相关文章
|
安全 Unix Linux
操作系统紧急故障修复常见有效方案
操作系统是计算机系统的核心软件之一,如果操作系统出现了紧急故障,将会引起系统的宕机,严重影响业务系统的可用性。因此,对操作系统的紧急故障进行修复是必不可少的。本文将介绍操作系统紧急故障的常见有效方案。
297 1
|
5月前
|
运维 供应链 安全
构建网络环境的铜墙铁壁:从微软蓝屏事件反思系统安全与稳定性
【7月更文第22天】近期,一起由软件更新引发的“微软蓝屏”事件震撼全球,凸显了现代IT基础设施在面对意外挑战时的脆弱性。此事件不仅影响了数百万台设备,还波及航空、医疗、传媒等多个关键领域,造成了难以估量的经济损失和社会影响。面对这样的挑战,如何构建更为稳固和安全的网络环境,成为了全球IT行业共同面临的紧迫任务。
90 3
|
5月前
|
SQL 监控 测试技术
软件交付问题之项目发布后要关注监控的有效性,如何解决
软件交付问题之项目发布后要关注监控的有效性,如何解决
|
5月前
|
关系型数据库 MySQL 测试技术
数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
【7月更文挑战第21天】数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
135 1
|
5月前
|
运维 监控 负载均衡
在软件部署阶段,系统工程的目标是确保软件能够顺利、稳定地部署到目标环境中,并满足用户的需求。
在软件部署阶段,系统工程的目标是确保软件能够顺利、稳定地部署到目标环境中,并满足用户的需求。
|
7月前
|
弹性计算 运维 Shell
系统升级
【4月更文挑战第29天】
28 0
|
监控 算法 调度
转:时间片轮转算法对电脑监控软件的影响
时间片轮转算法是操作系统中常用的一种进程调度算法,它就像是个大调度师,负责把CPU时间切成小块,让一帮进程轮番上阵,保证大家都有公平的机会争夺计算力,好让系统不再卡顿。现在,要是把这时间片轮转算法和电脑监控软件捆绑在一起,就像是一对独特的组合拳,会激发出一堆影响。比如监控效率会变得咋样,员工的个人秘密会不会被窥探,还有系统的资源会不会被合理利用,用户体验会不会哭唧唧?下面,我们就一起来探讨一下时间片轮转算法对电脑监控软件的影响——
94 0
|
安全 Windows
计算机系统更新出现你的设备中缺少重要的安全和质量修复
计算机系统更新出现你的设备中缺少重要的安全和质量修复
603 1
计算机系统更新出现你的设备中缺少重要的安全和质量修复
|
存储 测试技术 数据安全/隐私保护
干货 | 环境问题还是测试的老大难?两个步骤轻松搞定
干货 | 环境问题还是测试的老大难?两个步骤轻松搞定
|
JSON 运维 网络协议
平稳运行半年的系统宕机了,记录一次排错调优的全过程!
最近发生了一件很让人头疼的事情,已经上线半年且平稳运行半年系统在年后早高峰的使用时发生了濒临宕机的情况。访问速度特别慢,后台查到大量time_wait的连接,从代码层面到架构层面到网络层面排查了几天几夜,总算是有了结果。