使用 Amazon Aurora 时,多个较小的 SQL 查询会导致更多 IOP 和更多成本吗?
Do multiple smaller SQL queries result in more IOPs & more cost using Amazon Aurora?
Amazon Aurora pricing page 提到:
For I/O charges, let’s assume the same database reads 100 data pages
from storage per second to satisfy the queries running on it. This
would result in 262.8 million read I/Os per month (100 pages per
second x 730 hours x 60 minutes x 60 seconds).
这里的“数据页”是什么意思?
Similarly, let’s assume your application makes changes to the database affecting an average of 10 data pages per second. Aurora will charge one I/O operation for up to 4 KB of changes on each data page. If the volume of data changed per page is less than 4 KB, this would result in 10 write I/Os per second.
与单个大型 SQL 查询相比,多个较小的 SQL 查询产生的 IOP 是否更多?
What is meant by "data pages" here?
对于 MySQL 兼容的 Aurora,每个数据库页面 16 KB & 对于 PostgreSQL 兼容的 Aurora 8 KB(来源: Amazon Aurora FAQs).
Do multiple smaller SQL queries result in more IOPs than a single large SQL query?
不一定,但有可能。
这里的关键是您只根据需要将查询优化为 read/write,而不是不必要地拆分。
太多小于 4KB 的小写入将意味着您将无缘无故地在长 运行 中付出更多,并且您最好进行至少 4KB 或更多的更改以获得最大 'bang for your buck'.
例子
假设我们要将 22KB 的数据写入数据库。
如果在一个查询中完成,您需要支付 6 I/O 次操作的费用。
-> 22KB / 4KB = 5,余数2
-> 5 I/O 操作和额外的 1 I/O 操作。 (占剩余的 2KB)
如果在 5 个不同的查询中完成,由您拆分,您也只需为 6 个 I/O 操作付费(因此我说 不一定 )。
但是,如果在查询拆分中完成,使每个查询 小于 小于 4KB,那么您将支付比需要更多的费用,因为您会消耗更多 I/O操作。
例如如果您的查询每个只向数据库写入 2KB,理论上您将1支付 11 I/O 操作的费用,这将是额外的 5 I/O 操作。
-> 22KB / 2KB = 11 I/O 次操作
1 如文档所述,写入操作的数量 可能 更少,但这取决于内部 Aurora 写入 I/O 优化,可以在某些情况下将小于 4 KB 的写入操作组合在一起。换句话说,他们可能会为您组合操作,但不能保证。
Amazon Aurora pricing page 提到:
For I/O charges, let’s assume the same database reads 100 data pages from storage per second to satisfy the queries running on it. This would result in 262.8 million read I/Os per month (100 pages per second x 730 hours x 60 minutes x 60 seconds).
这里的“数据页”是什么意思?
Similarly, let’s assume your application makes changes to the database affecting an average of 10 data pages per second. Aurora will charge one I/O operation for up to 4 KB of changes on each data page. If the volume of data changed per page is less than 4 KB, this would result in 10 write I/Os per second.
与单个大型 SQL 查询相比,多个较小的 SQL 查询产生的 IOP 是否更多?
What is meant by "data pages" here?
对于 MySQL 兼容的 Aurora,每个数据库页面 16 KB & 对于 PostgreSQL 兼容的 Aurora 8 KB(来源: Amazon Aurora FAQs).
Do multiple smaller SQL queries result in more IOPs than a single large SQL query?
不一定,但有可能。
这里的关键是您只根据需要将查询优化为 read/write,而不是不必要地拆分。
太多小于 4KB 的小写入将意味着您将无缘无故地在长 运行 中付出更多,并且您最好进行至少 4KB 或更多的更改以获得最大 'bang for your buck'.
例子
假设我们要将 22KB 的数据写入数据库。
如果在一个查询中完成,您需要支付 6 I/O 次操作的费用。
-> 22KB / 4KB = 5,余数2
-> 5 I/O 操作和额外的 1 I/O 操作。 (占剩余的 2KB)
如果在 5 个不同的查询中完成,由您拆分,您也只需为 6 个 I/O 操作付费(因此我说 不一定 )。
但是,如果在查询拆分中完成,使每个查询 小于 小于 4KB,那么您将支付比需要更多的费用,因为您会消耗更多 I/O操作。
例如如果您的查询每个只向数据库写入 2KB,理论上您将1支付 11 I/O 操作的费用,这将是额外的 5 I/O 操作。
-> 22KB / 2KB = 11 I/O 次操作
1 如文档所述,写入操作的数量 可能 更少,但这取决于内部 Aurora 写入 I/O 优化,可以在某些情况下将小于 4 KB 的写入操作组合在一起。换句话说,他们可能会为您组合操作,但不能保证。