通过对所有表使用Drupal6和MariaDB 10 InnoDB引擎,我注意到在InnoDB表上将查询插入到notifications_*表中效率很低。例如,在我的slow_query_log中经常出现这样的情况:
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);发布于 2013-06-10 20:18:30
IMHO,你应该把它作为InnoDB。MyISAM在高写的情况下不是很好。为什么?
每次在MyISAM表上发出插入、更新或删除查询时
InnoDB具有行级锁定。为了适应这种情况,InnoDB缓存缓冲区池、日志缓冲区和撤消日志中的插入、更新和删除。
MyISAM缓存密钥缓冲区中每个MyISAM表的.MYI文件中的索引页。
MyISAM不缓存数据。它必须从操作系统中获得这一点。您可以更改MyISAM的行格式,以提高从磁盘读取的速度,而牺牲了表的磁盘使用量的两倍。写入速度可以通过并发插入来调整。
InnoDB在InnoDB缓冲池中缓存数据和索引页。您可能需要一个合适的大小来容纳数据和索引。
你只需要调整一些重要的设置。以下是我过去来自DBA StackExchange的一些建议。
Jan 11, 2013:插入性能极差的MySQL / Percona服务器Dec 06, 2012:InnoDB插入速度更快Aug 03, 2012:用于solr索引的mysql innodb表中的缓慢插入性能Jul 04, 2012:InnoDB插入性能能力May 03, 2012:InnoDB和MyISAM哪个更快?Jan 03, 2012:用于高端和繁忙服务器的优化my.cnfSep 20, 2011:最好的MyISAM和InnoDBAug 12, 2011:哪个数据库管理系统适合超高速读取和简单的数据结构?虽然我倾向于InnoDB,但我将由您来决定要使用哪个存储引擎并进行调优。
发布于 2013-06-10 11:09:58
使用SQL数据库进行任何操作都是众所周知的Drupal问题。很多数据,比如通知和看门狗,无论如何都不需要SQL,它们只是一个键值对。
InnoDB使用了一种更为复杂的锁定策略。它非常适合您经常同时读写的表,但对于任何单个任务来说都要慢一些。MyISAM更简单,而且速度更快,如果您只是偶尔添加,而很少同时尝试阅读。也就是说,你在晚上给它写信,整天读它。
不同引擎之间的连接是缓慢的,请记住这一点。
如果可行,将通知的表移动到nosql解决方案。基于RAM的,如果你有足够的内存,只是镜像到磁盘。不过,它可能需要对这个模块进行黑客攻击,因此它最终可能几乎是不可能的。
发布于 2013-06-11 06:28:12
你说你有足够的内存。如果你想冒险,试试MemSQL吧。它消除了方程中的主要瓶颈-- HDD。它还声称是无锁的,并为频繁插入优化。
开发人员说,从MySQL过渡是很容易的应该是与API兼容的替代品。
来自塞德拉基问题的想法。
https://drupal.stackexchange.com/questions/75689
复制相似问题