首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为大型BLOB更新优化MySQL

如何为大型BLOB更新优化MySQL
EN

Database Administration用户
提问于 2013-07-17 18:45:43
回答 2查看 11.8K关注 0票数 2

我有一张能容纳大气泡(高达10米)的桌子,并且经常更新。问题是UPDATE语句可能需要1秒才能执行,而且由于应用程序的设计,这会阻塞UI。我需要加快更新/插入语句的速度。有什么方法可以通过调优MySQL服务器/存储引擎/etc来实现呢?

所讨论的表是InnoDB,我尝试过对压缩进行调优,但这似乎并没有多大的区别。客户端与服务器位于同一台机器上,因此不存在网络开销。服务器为MySQL 5.5

EN

回答 2

Database Administration用户

发布于 2013-07-18 17:49:52

这看起来像是InnoDB架构调优的工作!

BLOB数据在哪里会成为InnoDB的瓶颈?三地

Place #1 : InnoDB日志文件

如果正在编写许多更新BLOB数据的事务,那么InnoDB日志文件(由诺姆b设置)的大小可能是一个瓶颈。

Place #2 : InnoDB日志缓冲区

如果InnoDB日志缓冲区设置得比BLOB本身小,那么它(由诺姆b设置)可能会成为一个严重的瓶颈。缺省值为800万。您可能需要调整它的大小,以容纳多个具有该气泡的行。或许1.28亿美元将是一个很好的起点。这也可以减少写入InnoDB日志文件时的磁盘I/O。

Place #3 : MySQL数据包

什么是MySQL包?

根据

第99页第1至3段对此作了如下解释:

MySQL网络通信代码是在假定查询总是相当短的前提下编写的,因此可以将查询发送到服务器,并由服务器在一个块中进行处理,这在MySQL术语中称为数据包。服务器为一个临时缓冲区分配内存以存储数据包,并且它的请求足够满足它的需要。这种架构需要一种预防措施,以避免服务器耗尽内存--限制数据包的大小,这个选项实现了这一点。有关此选项的相关代码可在sql/net_serv.cc中找到。看看my_net_read(),然后按照对my_real_read()的调用,特别注意net_realloc()。这个变量还限制了许多字符串函子的结果的长度。有关详细信息,请参阅sql/field.cc d.cc和sql/intem_STFIC.cc。

无论何时有MySQL数据的传输,MySQL分组将MySQL数据传输到操作系统和网络中。与InnoDB日志缓冲区一样,MySQL数据包也必须容纳多个BLOB。

尾声

我过去曾讨论过这个话题。

警告

压缩可能会使事情变得更糟。为什么?

压缩InnoDB表时,每当读取该表的数据和索引页时,该页和未压缩的页面副本在InnoDB缓冲池中共存。如果要使表压缩,则必须展开(innodb缓冲池(由innodb设置)。我写了这篇文章,还更新了我的一个旧答案:诺姆b_文件_船型梭鱼

更新2013-07-19 16:11 EST

基于你上次的评论

初步印象:虽然调优InnoDB缓冲区有点帮助,但似乎更多的改进来自于关闭这个特定表的二进制日志。还在监视演出..。

我有个建议

您可能需要重新架构您的InnoDB文件,以便所有.ibd文件都在数据卷上,而其他MySQL组件(ibdata1、ib_logfile0、ib_logfile1、所有二进制日志)可以挂载到另一个磁盘上。我之前在一篇关于PostgreSQL:英特尔S3700在SSD上的写性能的文章中提到过这个问题,问这个问题的人说他的表现提高了10%。

更新2013-07-26 15:33 EST

因为我问

问题: 1)数据库服务器上有多少RAM ? 2)显示变量如‘innodb_file_per_table’的结果如何;3)运行SELECT SUM(data_length+index_length) FROM information_schema.tables WHERE engine='InnoDB';时得到了什么?

你说过

8gb内存,4gb可供MySQL使用。‘'innodb_file_per_table','ON’。之和是3316736000

我建议如下(如果您还没有这样做)

  • 诺姆b设置为3G
  • 诺姆b设置为1G

试试看!!

票数 4
EN

Database Administration用户

发布于 2013-07-18 12:42:44

1)对于有几个列的表,为了减少对不使用BLOB列的查询的内存需求,可以考虑将BLOB列拆分为一个单独的表,并在需要时使用联接查询引用它。

2)由于检索和显示BLOB值的性能要求可能与其他数据类型非常不同,因此可以将特定于BLOB的表放在不同的存储设备上,甚至是单独的数据库实例上。例如,检索BLOB可能需要大的顺序磁盘读取,它比SSD设备更适合传统硬盘驱动器。

您可以引用这个现有的SO链接以及https://stackoverflow.com/questions/5318961/optimizing-mysql-files-in-database-blob

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/46543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档