我正在尝试执行大约200,000个现有MySQL行的批量更新。 更具体地说,我需要更新这些行中的八个空LONG BLOB字段,每个字段都有一个〜0.5 Mb的文件(使用LONG BLOB的原因是,在某些特殊情况下,存储的文件很大;但是,在批量处理中不考虑这些文件)更新)。 需要插入的文件存储在本地磁盘上。

我正在使用编写的MATLAB脚本来遍历存储这些文件的每个文件夹,读取文件并将它们转换为十六进制表示,然后执行UPDATE查询以用每一行的八个文件更新八列。

最初,一切运行得很快。 但是,我注意到在完成几千次查询后,事情真的开始放慢了速度。 我做了一些有关优化MySQL和InnoDB系统变量的研究,并将innodb_buffer_pool_size增加到25G,将innodb_buffer_pool_instances增加到25。

进行此修改后,情况再次加速,但在又进行了数千次查询后速度下降了。 我做了更多的研究,并试图弄乱其他一些变量,例如innodb_log_buffer_sizeinnodb_log_file_size都增加到100M只是为了看看会发生什么。 我还将innodb_write_io_threadsinnodb_read_io_threads设置为16,因为我正在具有32 GB RAM的相当高端的服务器上运行所有这些程序。 不幸的是,这些修改没有多大帮助,现在我陷入了每次查询都需要花费几分钟才能完成的问题。

有人对我如何优化此过程并使其尽快运行有任何建议或想法吗?

谢谢,

#1楼 票数:0

innodb_buffer_pool_instances = 8可能会以较少的开销满足您的需求。

innodb_log_buffer_size = 10M在内存中已累积10M之后写入innodb_log_file之前会“缓冲”。 缓冲区* 10 =日志文件大小的比率是合理的。

当innodb_log_buffer_size与innodb_log_file_size相同时,实际上没有缓冲。 使buffer_size小于日志文件的大小。

  ask by joekleespies translate from so

未解决问题?本站智能推荐:

2回复

优化简单的mysql更新查询

一个简单的更新查询会花费太多时间。 我需要优化此查询。 没有联接,它不需要那么多时间。 简单的更新查询如下: 请提出一些建议。
2回复

MySQL性能:嵌套插入/重复密钥与多个更新

有谁知道什么会更有效率和使用更少的资源: 方法1 - 使用单个SELECT语句从一个表中获取数据,然后迭代它以在另一个表上执行多个UPDATE。 EG(伪代码,execute()运行查询): 方法2 - 使用单个INSERT .. ON DUPLICATE KEY UPDATE语句和嵌
1回复

MySQL和性能

我相当频繁地在MySQPL表上进行50,000+次更新。 我这样尝试过: 您可能会想到,这需要一段时间。 我大约在45秒内进行测量。 因此,我尝试创建一个临时表,以便可以在更少的查询中完成相同的工作。 看起来像这样: 一开始我喜欢这种解决方案是因为我假设减少查询几乎总是会更快。
1回复

MySQL批量更新40K行,服务器资源友好查询

我有40K行之类的东西,我必须像这样运行更新查询: column1是TEXT column2是Varchar(150) ...而且我想使用mysql查询什么是服务器资源更友好的。 我想使用这样的东西: 我的问题是我可以 在一个查询中以这种方式更新多少行 ? 还有其他服务器
2回复

改进通过联接更新大表的性能

目前,我有一个具有架构的表,如下所示: 在此表中将m1,m2和m5设置为索引,在我的情况下,唯一/主变量不适用。 随着数据变得越来越大(每天增加100,000个新行),update命令变得越来越慢。 我想知道是否有任何方法可以改善以下陈述。 我非常确定,在select语句中,如果
2回复

InnoDBSmall更新非常慢,性能问题

我有一个更新脚本,它每晚都会更新我的数据库。 这是一个约有1万个项目的小型数据库。 对于每个表,更新速度很快,但只有一个。 在连接表上这非常慢。 联接表是项目表和类型表之间的链接,如下所示: 引擎是InnoDB。 在引用的表上有两个外键,在两列上有一个唯一键。 同样,在每列上
1回复

MYSQL查询调整,用于通过下一个表的数据更新一个表的数据

我有两个表: 以前的设计师直接在表1 [personaddresslist]中添加了城市名称。 现在我对其进行规范化,并将表1中的城市名称替换为表2中的城市ID 我使用过的查询: 更新人员地址列表,将CityList设置为CITY = cityList.ID,其中CITY = C
2回复

N行后的MySQL更新

我需要更新一个表,除了它的前1000个记录。 我的查询是这样的: 我知道子查询approcah将在这里工作,但我有一个巨大的表,其中200000条记录满足WHERE条件,并且它正在增长。 所以我认为如果我遵循子查询方法,它将不会随着DB的增长而扩展。 我也看到在UPDATE查询中指定