你在这里


MyISAM

Drupal 6数据库MyISAM转InnoDB后性能下降打补丁

James Qi 2015年7月20日 - 14:50 发布

  周末把云数据库RDS进行了配置升级,上面的一些站点数据表从MyISAM转为了InnoDB,今天早上来发现IOPS异常升高,网站打开困难,查看实时实例会话,发现有很多这样的语句堆积:

SELECT COUNT(pid) FROM url_alias

  在Google中搜索了一下,这篇文章说明很多人也遇到过这种问题COUNT(*) is an expensive query in InnoDB.,Drupal 6默认的数据库表引擎是MyISAM,上面那句统计数量的查询语句瞬间可以执行完,但对InnoDB引擎来说需要全表扫描来获得统计数据,当我们网站的页面数量众多的时候,就非常消耗数据库服务器的资源。而Pressflow版本就针对性解决了这样的问题:What makes Pressflow scale: #1 faster core queries,而Drupal 7的默认引擎是InnoDB,应该也不存在这样的问题。

试用阿里云RDS的MySQL压缩存储引擎TokuDB

James Qi 2015年7月12日 - 22:09 发布

  以前就用过自己搭建MySQL服务器的两种存储引擎MyISAM和InnoDB(也用过一点Memory方式),在今年初转向阿里云关系型数据库服务RDS的时候,看到可调参数中有一个TokuDB,不过不太了解也没有管。

  最近同事转给我阿里云介绍TokuDB的文章,其中压缩存储的特性对我们来说很有吸引力,因为我们的数据库一般都偏大,已经转到阿里云的就有几百个GB了,加上以后要转的肯定是TB数量级的,而且目前还是用的MyISAM,如果用InnoDB的话,那还要扩大数倍,仅仅是存储的费用就让人难以承受。但MyISAM存在表容易损坏的问题,往后用的人越来越少,Drupal 7 以后默认的支持引擎都改为InnoDB,阿里云也推荐不要使用MyISAM。

  据说这个TokuDB与InnoDB的特性很类似,而改用压缩方式后特别适合大数据时代的应用,但数据的压缩解压必定带来CPU在这方面的消耗,这不是大的问题,我关注的主要是IOPS和连接数是否会增加,如果这两个参数基本维持稳定的话,用CPU来换存储空间还是值得的、有余地的。

  虽然今天是周末,但也还是找了几篇文章、网站查看:

列出MySQL数据库服务器上所有库和表及引擎属性

James Qi 2014年5月2日 - 23:30 发布

  最近在对国内服务器进行硬盘的替换升级的时候,发现有一台服务器把数据库迁移到新硬盘后,以前的老硬盘依然非常繁忙(用iostat检查),仔细查看后,发现有一些MySQL数据库用的InnoDB格式,即使把数据库目录搬迁后,实际数据依然放置在以前的硬盘上。

  Drupal 7默认是采用InnoDB数据库引擎以利用其一些独特的特性,但我们的系列网站数据量很大,需要分散放置各子网站的数据库才好,所以我们都是改为使用MyISAM数据库,以前曾经修改过Drupal的Core文件来实现数据库引擎的变更,但这在Drupal系统升级的时候就丢失了,这样导致一些新建网站的数据库表,以及一些老网站中部分升级新产生的数据表,都采用了InnoDB引擎。

  以前发现上面这样的情况,我们都是单独修改引擎或者用程序批量修改,这在我以前的一篇博客文章《将Drupal 7默认的MySQL引擎从InnoDB改为MyISAM》中有记录,现在依然采用这个办法来批量修改。

将Drupal 7默认的MySQL引擎从InnoDB改为MyISAM

James Qi 2012年3月22日 - 13:24 发布

  前段时间安装Drupal 7的时候就遇到自动在MySQL中使用InnoDB的情况,而且好像是即使MySQL默认引擎为MyISAM也依旧使用InnoDB。虽然InnoDB有自己的特点,Drupal 7选用这个也正常,但对于我们来说,有多个子网站的时候,以前是将数据库分散到多块硬盘上的,就需要用MyISAM来让每个子网站有独立的目录比较方便,所以还是需要能使用MyISAM。

  按照网上找到的一篇文章,修改includes/database/mysql/shema.inc这个文件可以解决,虽然修改drupal core文件不是一个很好的办法,先这样用。

83行:

'mysql_engine' => 'InnoDB',

改为:

'mysql_engine' => 'MyISAM',

订阅 RSS - MyISAM