Aurora,我的数据在哪里? MySQL的极端IOPS优化
#aws #database #mysql #sustainability

今天,我决定在Amazon Aurora上再进行一次荒谬的测试,这次是与不同的MySQL引擎一起玩的。

对mysql和aurora进行了一些荒谬的实验

Amazon RDS和Amazon Aurora完全支持MySQL DB实例的InnoDB存储引擎。有一些功能,例如Snapshot Restore,仅支持InnoDB存储引擎。但是InnoDB并不是MySQL或Aurora mysql

的RDS上唯一可用的

您可以看到所有引擎启用了运行一个简单的发动机:

MySQL> show engines;

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

innodb是默认引擎,您应该使用的每个表格。除非您不关心表中存储的数据。

但是InnoDB是不是RDS上最快,最轻的存储引擎。不,我不是在谈论Myisam,我说的是垃圾垃圾箱,BLACKHOLE存储引擎:

黑洞存储引擎充当一个黑洞,它接受数据但将其扔掉并且不存储。检索总是返回空的结果。

什么?

优化IOP和数据问题较少的最佳方法不是首先将数据保留。好的,我们将少存储数据,但是我们真的在CPU使用方面有好处吗?它真正花费了多少,存储(无用)数据?

有什么真正的差异?

我们将运行一个小实验,以4 ACU(约8GB)的固定尺寸运行Aurora无服务器实例。

让我们创建一个简单的表格和一个程序,以几个(百万和无用的)记录填充它。这里没有任何幻想,每个电话只有一些随机数和500万记录。


CREATE TABLE data
(id bigint(20) NOT NULL AUTO_INCREMENT,
datetime TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
value float DEFAULT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB;

DELIMITER $$
CREATE PROCEDURE generate_data()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 5000000 DO
    INSERT INTO data (datetime,value) VALUES (
      FROM_UNIXTIME(UNIX_TIMESTAMP('2022-01-01 01:00:00')+FLOOR(RAND()*31536000)),
      ROUND(RAND()*100,2));
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

现在,我们可以调用我们的简单过程(两次,看到结果不是随机性和可重现的),并将数据库的指标与InnoDB和黑洞发动机进行比较。我们在执行之间有点睡觉(200秒),以具有更清晰的指标:

CALL generate_data();
SELECT sleep(200);
CALL generate_data();

SELECT sleep(200);
ALTER TABLE data ENGINE=BLACKHOLE;

CALL generate_data();
SELECT sleep(200);
CALL generate_data();

,获胜者是...

正如预期的那样,数据库的CPU负载差异很大,存储(无用)数据并不便宜。

CPU: InnoDB versus BLACKHOLE

插入吞吐量增加,减少了运行该过程所需的时间。

Insert Throughput: InnoDB versus BLACKHOLE

你在开玩笑吗?

否,在某些角案件中运行简单:

ALTER TABLE myUselessTable ENGINE=BLACKHOLE;

并不是完全疯狂。在场景中:

  1. 紧急按钮。好的,您的数据库确实已经用完了IOPS,您没有逻辑上的分类来将流量分开以分开实例。垂直缩放将无济于事。如果您有一些数据可能会丢失,那么在黑洞上运行桌子可能是淘汰的监狱卡。

  2. 加快应用程序更改。好的,您的产品中不再那么酷了,您决定停止收集数据并删除数据,但几天或几周内将没有修复 /新版本。您可能很幸运,并且能够在此期间放弃记录。

3 测试您的新酷功能对写入IOPS对复杂工作负载的影响。像在这些虚拟测试中一样,尝试有或没有黑洞。您可能会得到一些有用和可怕的数字。

可持续性?

每个人都谈论可持续性,让我们添加最终音符。上个月,我参加了Sheen Brisals在柏林Serverless Architecture Conference的无服务器中的可持续性的演讲。 Sheen的关键信息之一是摆脱无用的数据:如果您不需要数据,请不要存储它。

If you don't need the data, don't keep it

Gert Leenders最近分享了一个similar view

没有数据访问的情况下,Petabyte数据湖没有价值。

我完全同意,best way to have fewer problems with data is not to have the data。无用数据的成本不仅是存储。

不需要存储的商店数据。您不仅要进行不需要的存储空间。您正在燃烧CPU周期。你正在加热地球。您正在排出信用卡。您正在放慢应用程序。

您甚至可能不需要更改产品来削减一些好处。继续使用那个简单的Alter表。

或删除整个数据库并停止该RDS / Aurora实例。好,也许我只是在开玩笑。