我有一个表,里面有一个 longblob 字段,单个字段数据大小可能有几百 M 到 1G 以上,客户端多个线程查询或者写入多行的时候,会导致内存使用剧增,感觉是把整个 longblob 数据载入内存了。
请问这个怎么优化,看到官方有提到 max_allowed_packet,感觉这个没什么意义,因为你不增大它,就会报错,增大了又会让整个 buffer 载入内存缓冲区。官方原文"The packet message buffer is initialized to net_buffer_length bytes, but can grow up to max_allowed_packet bytes when needed"
请问有什么办法限制吗。
别说把数据用其他方式存了,没办法,只能从 mysql 本身着手,尴尬。
1
sujin190 2020-05-21 16:29:29 +08:00
似乎 mysql 应该不支持单行流式传输吧,mysql 的协议也不支持流式传输吧,而且这样显然事务也没法做了,所以你这不太符合 mysql 使用方式估计很难找到靠谱解决方案了
实在不行或许可以考虑分片,整个大数据分成 16K 的小段,每小段编个码放到一行里,写入的时候一行一行写也间接实现了流式传输写入,读取的时候也可以用 unbuffer 模式可以很好的支持流式传输 话说你这不分片,就算 mysql 不爆内存,你应用服务器也得爆吧,你这是存的视频数据么?认值说还真没人这么干,太低效了 |
2
rogwan 2020-05-21 16:32:22 +08:00 via iPhone
超过几百 M 的文件存 MySQL 里,这个场景本身就有问题。应该取出来当文件存。
|