一次系統升級的過程
【問題背景】公司的一個銷售系統執行了有5年的時間了,最近需要對該系統升級,其中有個問題一直導致整個升級過程一直停滯;升級的過程中,需要對一個表做新增欄位的操作,直接執行alter語句進行操作,需要消耗大概8個小時,由於操作的過程中會進行鎖表的操作,但是業務允許的停機操作只有4個小時;經過了一系列的測試終於完成了系統的更新,以下是更新過程中的一些經驗。
【1】環境說明:
資料庫版本:5.5.36
資料庫架構:主從架構
資料庫引擎:innodb
需要修改的表大小:300W行,大小4GB
計算表佔用的空間,方法如下
select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB from information_schema.tables where table_schema='schema_name' and table_name = 'table_name'; |
alter table add column的原理:整個過程跟oracle的線上重定義表很像,首先建立一個臨時表,再把資料從源表一條條insert到這個臨時表中,當所有的資料都insert完成後,再把運來的表drop掉,把臨時表rename成源表;
- 整個過程會對源表進行加鎖的操作,避免這個過程被鎖定;
- 臨時表會寫到資料庫的tmp空間裡,當這部分的空間不足時,再寫入到磁碟中;
知道了我們要處理的物件和整個操作的原理之後,初步的最佳化如下:
1、引數的調優
修改引數tmp_table_size和max_heap_table_size的值
mysql> show variables like '%tmp%'; |
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 (請備註資料庫型別)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1806414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記一次uboot升級過程的兩個坑boot
- synchronized升級過程synchronized
- 打怪(githug)升級過程Git
- 記一次系統演變過程
- 一次Linux系統被***的分析過程Linux
- 一次HIS系統卡頓原因排查過程分享
- 一次Linux系統被攻擊的分析過程Linux
- 升級 PHP7 過程記錄PHP
- Red Hat核心升級過程記錄
- 怎麼升級win11系統?升級Win11系統的方法
- 記一次Linux系統被入侵的排查過程(一)Linux
- 豐田系統,是福特系統的升級版?
- Fedora 30系統的升級方法
- 關於aix的系統升級AI
- MySQL升級過程中的一些心得-1MySql
- MySQL升級過程中的一些心得-2MySql
- ModStartCMS 系統升級指引
- CentOS系統核心升級CentOS
- 詳細瞭解 synchronized 鎖升級過程synchronized
- oracle小版本升級patch過程和分析Oracle
- 記升級 macOS Mojave 過程中的一件小事Mac
- bitnami redmine版本由2.3.1升級至3.2.2過程
- 一場版本升級引發的效能血案的追凶過程
- 京東二面:Sychronized的鎖升級過程是怎樣的Zed
- linux 升級系統核心Linux
- OA系統迎合時代升級
- 升級AIX作業系統AI作業系統
- AIX系統升級記錄AI
- FreeBSD 升級系統(轉)
- 深圳信獅一次 Linux 系統被攻擊的分析過程Linux
- 一次利用mv線上遷移資料、切換系統的過程
- win10 系統如何升級_電腦怎麼升級系統win10Win10
- java併發筆記四之synchronized 鎖的膨脹過程(鎖的升級過程)深入剖析Java筆記synchronized
- 升級RH9.0到2.6.5核心全過程(轉)
- 系統 儲存過程儲存過程
- 記一次FreeBSD系統中mysql服務異常的排查過程MySql
- 由門禁系統引起的升級改造
- 觀咆哮有感——系統升級的疼薦