mysqlサービス--1回の操作で1000万レベルのデータアーカイブエラーを記録

1347 ワード

に質問
業務には1枚の回送状態記録データがあり、業務と時間の発展に伴い、この表のデータ量は1400 W条数に達した.必要に応じてアーカイブ操作を行う.データ量が大きくdeleteを使用すると操作効率が低く、現実的ではない.シナリオ・オペレーションの記録は次のとおりです.
##  ---->     ---->    ;
----  
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(HY 000):Lock wait timeout exceeded;try restarting transaction」の質問です.###解決する1)insert操作を実行すると、実行するプロセスが引っかかり、原因を分析する.
----         ;
  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メモリ使用サイズの調整によるジャム問題の解決
 ----            
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     ;