Mysql
MySQL - 載入文件後刷新記憶體
我正在使用 LOAD FILE 命令載入 CSV 文件中的大量數據。它工作正常,載入該文件後,它執行一些數據轉換……
問題是,例如載入 12 個文件(每個文件 400 MB)後,mysql 程序幾乎消耗了所有可用記憶體,它沒有刷新,所以機器速度變慢,我需要重新啟動 mysql 才能繼續載入數據文件。
MySQL 8.0.17
任何想法如何解決這個問題?
- 添加了儲存過程
BEGIN DECLARE sequenceid INT; DECLARE `_rollback` BOOL DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; START TRANSACTION; INSERT INTO filenamedt (filename, filedate, fileinitialid) VALUES (CAfilename, now(), (SELECT MAX(imp_sequence_id) + 1 FROM imp_siscori_sequence)); INSERT INTO imp (select imp, ordem, CONCAT(TRIM(data),'01')) FROM temp_imp); INSERT INTO imp_data (imp_id, unid_comerc, incoterm) (SELECT imp_id, TRIM(unidadeComercial), TRIM(incoterm), TRIM(natInformacao) FROM temp_imp ); INSERT INTO imp_description (imp_id, imp_description) (SELECT imp_id, TRIM(descricaoProduto) FROM temp_imp); UPDATE imp_sequence SET imp_sequence_id = (SELECT MAX(imp_id) + 1 FROM temp_imp_siscori); TRUNCATE TABLE temp_imp; SET @m = (SELECT MAX(imp_sequence_id) + 1 FROM imp_sequence); SET @s = CONCAT('ALTER TABLE temp_imp AUTO_INCREMENT=', @m); PREPARE stmt1 FROM @s; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; IF `_rollback` THEN ROLLBACK; ELSE COMMIT; END IF;
如果你不使用 MyISAM 做任何事情(你不應該),那麼
key_buffer_size 999997440
改為只有 10M。那是浪費的千兆字節。此外,這對於您的 8GB RAM 來說似乎相當大:
tmp_table_size 268435456
. 將其降低到 16M。
每秒速率 = RPS
為您的 AWS RDS 性能組考慮的建議
innodb_flush_neighbors=2 # from 0 to speed reduction of innodb_buffer_pool_pages_dirty of 11,890 innodb_lru_scan_depth=100 # from 1024 to conserve 90% of CPU cycles used for function innodb_change_buffer_max_size=50 # from 25 to expedite LOADing data read_rnd_buffer_size=64K # from 512K to reduce handler_read_rnd_next RPS of 16,317
Rick James 2020-06-12 22:40 的兩個建議都將節省 RAM。
有關其他建議,請查看我的個人資料、聯繫資訊的網路個人資料和可免費下載的實用程序腳本以幫助進行性能調整。