首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该为通知表选择MyISAM吗?

我应该为通知表选择MyISAM吗?
EN

Drupal用户
提问于 2013-06-10 00:20:29
回答 3查看 240关注 0票数 4

通过对所有表使用Drupal6和MariaDB 10 InnoDB引擎,我注意到在InnoDB表上将查询插入到notifications_*表中效率很低。例如,在我的slow_query_log中经常出现这样的情况:

代码语言:javascript
复制
INSERT INTO notifications_event (module, type, action, oid, uid, params, created, counter)
VALUES ('XXX', 'XXX', 'XXX', XXX, XXX, 'XXX', XXX, XXX);

INSERT INTO notifications_fields (sid, field, value, intval)
VALUES(XXX, 'XXX', 'XXX', XXX);

问题

  • 将这样的表转换为MyISAM是个好主意吗?
  • 使用这种混合存储引擎有什么坏处吗?
  • 是否有更好的解决方案来缩短插入时间?
EN

回答 3

Drupal用户

发布于 2013-06-10 20:18:30

免责声明:纯MySQL透视图

IMHO,你应该把它作为InnoDB。MyISAM在高写的情况下不是很好。为什么?

锁定粒度

每次在MyISAM表上发出插入、更新或删除查询时

  • 查询执行一个完整的表锁。
  • 所有其他需要执行插入、更新或删除查询的查询都是以先到先得的方式处理的。

InnoDB具有行级锁定。为了适应这种情况,InnoDB缓存缓冲区池、日志缓冲区和撤消日志中的插入、更新和删除。

数据缓存

MyISAM缓存密钥缓冲区中每个MyISAM表的.MYI文件中的索引页。

MyISAM不缓存数据。它必须从操作系统中获得这一点。您可以更改MyISAM的行格式,以提高从磁盘读取的速度,而牺牲了表的磁盘使用量的两倍。写入速度可以通过并发插入来调整。

InnoDB在InnoDB缓冲池中缓存数据和索引页。您可能需要一个合适的大小来容纳数据和索引。

尾声

你只需要调整一些重要的设置。以下是我过去来自DBA StackExchange的一些建议。

赞成InnoDB

赞成MyISAM

虽然我倾向于InnoDB,但我将由您来决定要使用哪个存储引擎并进行调优。

票数 2
EN

Drupal用户

发布于 2013-06-10 11:09:58

使用SQL数据库进行任何操作都是众所周知的Drupal问题。很多数据,比如通知和看门狗,无论如何都不需要SQL,它们只是一个键值对。

InnoDB使用了一种更为复杂的锁定策略。它非常适合您经常同时读写的表,但对于任何单个任务来说都要慢一些。MyISAM更简单,而且速度更快,如果您只是偶尔添加,而很少同时尝试阅读。也就是说,你在晚上给它写信,整天读它。

不同引擎之间的连接是缓慢的,请记住这一点。

如果可行,将通知的表移动到nosql解决方案。基于RAM的,如果你有足够的内存,只是镜像到磁盘。不过,它可能需要对这个模块进行黑客攻击,因此它最终可能几乎是不可能的。

票数 1
EN

Drupal用户

发布于 2013-06-11 06:28:12

你说你有足够的内存。如果你想冒险,试试MemSQL吧。它消除了方程中的主要瓶颈-- HDD。它还声称是无锁的,并为频繁插入优化。

开发人员说,从MySQL过渡是很容易的应该是与API兼容的替代品。

来自塞德拉基问题的想法。

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

https://drupal.stackexchange.com/questions/75689

复制
相关文章

相似问题

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