本文主要摘译自这里

MySQL 曾经有独立的公司。但那间公司后来被 Sun 微系统公司获取了。 Sun 微系统公司又被 Oracle 获取了。原 MySQL 开发者担心 MySQL 成为闭源软件,因此成立了一家SkySQL 公司维护开源的 MySQL 分支—MariaDB。

MariaDB 支持的存储引擎包括:

  1. InnoDB/XtraDB 后者是前者的加强版,属于事务性存储引擎,也叫 ACID-compliant(ACID 遵从的)。XtraDB 是 Percona 开发的存储引擎,整体向下兼容。使用普通的 mysqldump 会耗尽 cpu(因为要把数据库转化成正经的 SQL 语句)。而 xtrabackup 在大库上的备份、还原、冗余都表现得更好(因为像 Oracle 一样是二进制备份吗?)。
  2. TokuDB。另一个事务性存储引擎。以高压缩率著称(最高25倍压缩)。适合小空间存储大数据。
  3. MyISAM。MySQL 上最古老的存储引擎。非事务性存储引擎,只支持表级锁,不支持 MVCC。
  4. SphinxSE。非事务性存储引擎。这名字和古希腊猜谜语的怪兽,斯芬克斯一样。本以上是用来做搜索引擎的,所以需要外部服务。
  5. MEMORY。非事务性存储引擎。如其名字一样,只支持在内存中读写数据,可以当缓存用。
  6. 其他引擎,Federated 与 Cassandra。

性能调优的话题

  1. 寻找好的硬件。最好用 SSD + RAID 10。
  2. 要有良好的 schema 设计,也要有良好的 query 设计。
  3. 使用查询缓存。但是写事务较多的场景就不适合查询缓存了。最多使用512MB 的查询缓存就足够了。
  4. 使用 EXPLAIN。可以看到查询计划,甚至可以通过 SET optimizer_trace=”enabled=on”看到优化器追踪结果。
  5. 调高相应的内存参数,如tmp-table-size = 1G max-heap-table-size = 1G。可以用 Mysqltuner 来查看内存参数是否足够。
  6. 注意,上面的内存参数只是存临时表的内存空间,实际上还有 join buffer 和 sort buffer。他们有助于提升 join 和 sort 的效率。
  7. 还有 buffer pool 相关参数,也很重要。
  8. 关掉文件系统中的 noatime 选项。
  9. 使用裸盘作为存储。