你在这里


InnoDB

在阿里云RDS数据库服务器中将MySQL InnoDB引擎表转为压缩格式

James Qi 2015年10月26日 - 16:56 发布

  今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性、各项指标的监控、调优等都有帮助。

  不过随着近期更多数据库转到RDS上,空间的占用、IOPS的升高等问题也越来越明显,增加RDS空间、升级RDS规格肯定是有用的,但一味这样做的话,费用会明显飙升,还是得想办法优化。

  前一阵子也《试用阿里云RDS的MySQL压缩存储引擎TokuDB》,但因为文件数太多超过系统限制而放弃,也尝试过MyISAM引擎和InnoDB引擎的压缩方式,但阿里云客服说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来换存储空间还是值得的、有余地的。

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

Drupal 7 Ubercart在MySQL 5.6中需要使用InnoDB引擎

James Qi 2015年7月10日 - 09:50 发布

  以前使用的MySQL存储引擎考虑到用多块硬盘放置各个库以便分散负载都是固定为MyISAM,现在搬迁到阿里云RDS后,考虑到查询效率及空间大小也保持继续用MyISAM。不过今天同事发现一个销售数据的网站在购物车结算的时候报错:

PDOException: SQLSTATE[HY000]: General error: 1785 When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions,

  在网上搜索了一下,说是不支持事务的问题,奇怪了以前在MySQL 5.1用MyISAM却是好的,也许是MySQL升级到5.6之后的问题吧。我对数据库的所有表进行了批量转换为InnoDB后,报错就消失了。好在销售网站的数据量不大、访问量也小,转换后对于RDS容量和速度都不会有影响。

列出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 - InnoDB