Percona 的人寫了一篇關於 MySQL 跑在 AWS 上不同種類 EBS 的效能差異:「Performance of Various EBS Storage Types in AWS」,不過這篇的描述部份不是很專業,重點是直接看測試資料建立自己的理解。
他的方法是在 AWS 上建立了相同參數的 gp2
、gp3
、io1
、io2
空間,都是 1TB 與 3000 IOPS,但他提到這應該會一樣:
So, all the volumes are 1TB with 3000 iops, so in theory, they are the same.
但這在「Amazon EBS volume types」文件上其實都有提過了,先不管 durability 的部份,光是與效能有關的規格就不一樣了。
在 gp2 的部份直接有提到只有保證 99% 的時間可以達到宣稱的效能:
AWS designs gp2
volumes to deliver their provisioned performance 99% of the time.
而 gp3 則是只用行銷宣稱「consistent baseline rate」,連 99% 都不保證:
These volumes deliver a consistent baseline rate of 3,000 IOPS and 125 MiB/s, included with the price of storage.
在 io*
的部份則是保證 99.9%:
Provisioned IOPS SSD volumes use a consistent IOPS rate, which you specify when you create the volume, and Amazon EBS delivers the provisioned performance 99.9 percent of the time.
另外在測試中 gp2
與 gp3
的 throughput 看起來也沒調整成一樣的數字。在 1TB 的 gp2
中會給 250MB/sec 的速度,1TB 的 gp3
則是給 125MB/sec,除非你有加買 throughput。
另外從這句也可以看出來他對 AWS 不熟:
The tests were only run in a single availability zone (eu-west-1a).
在「AZ IDs for your AWS resources」這邊有提過不同帳號之間,同樣代碼的 AZ 不一定是一樣的區域,需要看 AZ ID:
For example, the Availability Zone us-east-1a
for your AWS account might not have the same location as us-east-1a
for another AWS account.
To identify the location of your resources relative to your accounts, you must use the AZ ID, which is a unique and consistent identifier for an Availability Zone. For example, use1-az1
is an AZ ID for the us-east-1
Region and it is the same location in every AWS account.
在考慮到只有設定大小與 IOPS 的情況下,剩下的測試結果其實跟預期的差不多:io2
貴但是可以得到最好的效能,io1
的品質會差一些,gp3
在大多數的情況下其實很夠用,但要注意預設的 throughput 沒有 gp2
高。