mysql服務--記錄一次操做歸檔千萬級數據錯誤

問題

業務上有一張回傳狀態記錄數據,隨着業務及時間的發展,這張表的數據量達1400W條數;應需求作歸檔操做;應數據量大使用delete操做效率低,不現實;方案操做記錄以下:node

##鎖表---->備份新數據---->重命名錶;
----鎖表
LOCK TABLES node_flow read local; 將當前表設置爲只讀,不能進行插入或更新操做。
UNLOCK TABLES;鎖住表了,使用UNLOCK進行釋放。
----備份數據
INSERT INTO node_flow_copy SELECT * FROM node_flow WHERE create_time > '2020-05-01'
----重命名錶
ALTER TABLE node_flow RENAME TO node_flow_20200603;
RENAME TABLE node_flow_copy TO node_flow;

因表數據比較大,在執行INSERT語句時出現報錯;
"ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction"的問題。
###解決;
1)在執行insert操做時,運行的進程被卡住,分析緣由;mysql

----查看數據庫進程列表;
  Show processlist;
  kill id;
  操做發現command顯示killed,sql被阻塞了;
----查看數據庫鎖及鎖等待;
select * from information_schema.innodb_locks;
select * from information_schema.innodb_lock_waits;
----查看數據進程 及鎖、觸發器
show processlist;
show engine innodb status\G;
Show triggers from DB_NAME;
-----查看系異常統進程;
Iotop
perf top -p `pidof mysqld`

2)肯定調整innodb內存使用大小解決卡住問題sql

----查看數據庫內存大小的問題
show variables like 'innodb_buffer_pool%';
發現innodb_buffer_pool_size只有5M,感受緣由就是由於buffer pool太小,
增長buffer\_pool的大小到20G
 select 20\*1024\*1024\*1024;
 set global innodb\_buffer\_pool\_size=21474836480;
 再使用show processlist;等待一下killd狀態不在了;
相關文章
相關標籤/搜索