首页 > 解决方案 > MySQL LOAD DATA INFILE 之后不会清除内存

问题描述

我正在创建一个 CSV 导入器,它将 CSV 文件加载到 MariaDB 10.3.23 数据库中。为此,我在带有 PHP 7.4 环境的 Laravel 7 中使用以下代码:

$query = <<<eof
        LOAD DATA LOCAL INFILE '$this->filePath'
        INTO TABLE `$tableName`
        $characterSet
        FIELDS TERMINATED BY '$this->delimiter'
        ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
eof;

DB::connection()->getpdo()->exec($query);

我正在使用 ploi.io 来部署和监控我的网站,它在监控页面上显示以下屏幕:

在此处输入图像描述

当我重新启动 MariaDB 服务时,RAM-display-line 为 15%,但是每当我开始新的导入(因此是新的 LOAD DATA INFILE)时,使用的 RAM 量就会增加(这并不奇怪),并熬夜。RAM 行的高度差异是由于 CSV 文件大小的差异造成的。看起来它会加载数据,并且不会清空之后用于它的内存。

有想法该怎么解决这个吗?

附言。我不擅长 infra/devops,所以如果你们需要更多信息,请告诉我。

标签: mysqllaravelmemory-managementmariadbload-data-infile

解决方案


SHOW TABLE STATUS LIKE 'the_file_name';

然后添加 Data_length + Index_length。这与消耗但未释放的空间量有关吗?

的价值是innodb_file_per_table多少?


推荐阅读