哪些表应该或可以迁移到InnoDB,哪些表应该保留为MyISAM?


10

按照标题:是否有快速候选列表供表迁移到InnoDB?而且应该保留MyISAM。

一些其他信息

  • 该站点具有相当大的读取负载,但是每小时会插入大约10个带有标签等的节点。
  • 我们大量使用CCK(以形式的大量标准化表格content_field%)。
  • 我们还将视图用于几乎所有的块和页面。但其中许多可以替换为自定义模块(以减少数据库查询和这些查询的繁重程度)。
  • 用户都是匿名的;除了少数已登录的编辑者和网站管理员以外。

整个互联网都不知道如何实际回答这个问题,这很可笑。哪些Drupal表需要最多写入操作并被锁定....谁知道。
JM Becker

Answers:


8

您应该将所有数据转换为InnoDB,以防止表锁定问题。但是,请考虑以下几点:

全文索引

目前,只有MyISAM支持FULLTEXT索引。InnoDB的FULLTEXT索引目前适用于MySQL 5.6,但尚未投入生产。如果您有任何具有FULLTEXT索引的Drupal表,则目前无法将它们转换为InnoDB。

FULLTEXT索引更新

MySQL 5.6现在是GA(仅供生产使用)。请尝试在InnoDB中对FULLTEXT进行索引。

要找到具有FULLTEXT索引的表,请运行以下查询:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

如果没有返回行,则将所有InnoDB表转换为您内心的内容。我写了一篇有关如何仅使用mysql将所有MyISAM表转换为InnoDB的早期文章

MySQL复制

如果您有大量读取的环境,则执行以下操作可以使MyISAM中的读取速度更快:

  • 设置主/从复制
  • 在主机下创建一个或多个读取从机
  • --skip-innodb在所有从站上添加/etc/my.cnf(将数据加载到从站时将表转换为MyISAM)
  • 通过以下命令将每个从站上所有MyISAM表的行格式更改为FIXED: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • 我在DBA StackExchange上发布了一些内容
  • MySQL数据库设计和调优》这本书建议ROW_FORMAT=FIXED在第72,73页使用。这将在内部将所有VARCHAR字段转换为CHAR。它将使MyISAM表更大,但是针对它执行的SELECT将更快。我可以亲自证明这一点。我曾经有一张1.9GB的桌子。我使用更改了格式ALTER TABLE tblname ROW_FORMAT=FIXED。该表最终为3.7GB。SELECT的速度提高了20-25%,而没有改进或更改任何其他内容。

唯一令人头疼的是使您的应用程序意识到单独的读取从属。

结语

如果您在寻找每个存储引擎的其他好处,请查看DBA StackExchange:


4

由于您的网站处于阅读繁重的一面,因此我只需将所有表转换为InnoDB。然后,您可以通过适当调整InnoDB缓冲池和查询缓存的大小来优化读取性能。这样,我们就可以在Drupal托管基础架构中的专用数据库服务器上每秒实现数千个查询。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.