Search code examples
google-cloud-sql

Cloud-SQL-Storage Engine memory supported?


The GoogleCloudSQL FAQ states that

For MySQL Second Generation instances, InnoDB is the only storage engine supported

My experiment indicates that engine=memory is possible, at least for temporary tables.

CREATE TEMPORARY TABLE mt (c CHAR(20)) ENGINE=memory;
Query OK, 0 rows affected

SHOW CREATE TABLE mt;
+---------+----------------+
| Table   | Create Table   |
|---------+----------------|
| mt      | CREATE TEMPORARY TABLE `mt` (
  `c` char(20) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8                |
+---------+----------------+
1 row in set
Time: 0.022s

INSERT INTO mt (c) VALUES ('waaa' );
Query OK, 1 row affected
Time: 0.017s

SELECT * FROM mt;
+------+
| c    |
|------|
| waaa |
+------+
1 row in set
Time: 0.019s

Is this avaiable but unsopported? Might google disable this without giving notice? Is this just left out of the FAQ because the message is that one should use innodb instead of myisam?

Thanks for your time.


Solution

  • Even though it is possible to use MEMORY tables to create tables (temporary tables only), it is not supported by Google Cloud, as it does not provide the same consistency as the InnoDB engine and may be prone to errors.

    Besides, in newer Cloud SQL instances with 2nd Generation MySQL the use of any storage engine other than InnoDB will result in an error, such as:

    ERROR 3161 (HY000): Storage engine MEMORY is disabled (Table creation is disallowed)
    

    As of this moment, for Cloud SQL instances that use 2nd Generation MySQL, the only supported storage engine is InnoDB. If you can use the MEMORY engine on your instance, that means it is an older version. As the MEMORY engine is unsupported, Google may disable this feature without giving notice, as you comment.

    My advice would be that although right now you can use the MEMORY engine for temporary tables in your Cloud SQL instance, please stick to the InnoDB engine as it is the only one supported by Google. The same message that mentions MyISAM also applies to other storage engines.