Mysql

Amazon RDS I/O 請求 - 1 個查詢 = 1 個計費 I/O?

  • February 2, 2021

我有一個想要遷移到 Amazon RDS 的 InnoDB 數據庫。

我目前的實現,託管在我自己的伺服器上,每月顯示大約 800 萬次查詢。

RDS 網站稱每 100 萬個請求的 I/O 速率為 0.10 美元

1 I/O = 1 查詢嗎?即,我是否會為這個使用量 + RDS 費用支付 80 美元/月的費用?

警告:對你的數字和你認為的查詢要非常小心!!!

我為什麼要發出這樣的警告???

早在 2011 年 8 月,我在 ServerFault 上寫了一篇文章,解釋瞭如何在 24 天內執行 10 億個查詢

這是整個文章:

MySQL 將在內部呼叫查詢。事實上,您在 MySQL 中所做的任何事情都是查詢。

如果您打開一般日誌或慢查詢日誌,mysqld 所做的一切都會被記錄下來。

如果您啟用了–log-queries-not-using-indexes,則所有不涉及索引的內容都會出現在慢日誌中。

假設您執行此查詢:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.06 sec)

是的,顯示數據庫;是一個查詢。其實什麼information_schema等價???

mysql> select schema_name "Database" from information_schema.schemata;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.08 sec)

表 information_schema.schema 有索引嗎???

mysql> show create table information_schema.schemata\G
*************************** 1. row ***************************
      Table: SCHEMATA
Create Table: CREATE TEMPORARY TABLE `SCHEMATA` (
 `CATALOG_NAME` varchar(512) NOT NULL DEFAULT '',
 `SCHEMA_NAME` varchar(64) NOT NULL DEFAULT '',
 `DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
 `DEFAULT_COLLATION_NAME` varchar(32) NOT NULL DEFAULT '',
 `SQL_PATH` varchar(512) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

不,不是的。所以,顯示數據庫;將登陸一般日誌和慢日誌(啟用–log-queries-not-using-indexes)

因此,很多我們認為不會構成查詢的操作可能只是一個查詢,而是mysqld內部的。

如果您使用任何連接到 mysqld 的監控工具,這也會增加查詢次數。

例子:

mysql> show global status like 'uptime'; select * from information_schema.global_status where variable_name='uptime';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 613   |
+---------------+-------+
1 row in set (0.00 sec)

+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| UPTIME        | 613            |
+---------------+----------------+
1 row in set (0.00 sec)

只是檢索 mysqld 的正常執行時間是一個查詢。在內部,MySQL 如何計算正在執行的查詢?這裡有兩個狀態變數可能會有所啟發:

  • Queries:伺服器執行的語句數。與 Questions 變數不同,此變數包括在儲存程序中執行的語句。它不計算 COM_PING 或 COM_STATISTICS 命令。
  • 問題:伺服器執行的語句數。與 Queries 變數不同,這僅包括客戶端發送到伺服器的語句,而不包括在儲存程序中執行的語句。此變數不計算 COM_PING、COM_STATISTICS、COM_STMT_PREPARE、COM_STMT_CLOSE 或 COM_STMT_RESET 命令。

如果您的 MySQL 伺服器正在被監控,請不要擔心,因為呼叫狀態變數的監控正在內部執行查詢以檢索請求的數據。

24天10億是

  • 每天 4170 萬次查詢
  • 每小時 173.6 萬次查詢
  • 每分鐘 28,935 個查詢
  • 每秒 482 次查詢

對於一個被監控的 MySQL 實例,這些數字一點也不牽強。

如果您使用 MySQL Workbench、MySQL Administrator 或 phpMyAdmin,這些產品生成或更新的任何頁面都會呼叫這些小的狀態查詢并快速執行數字。

概括

如果您的站點確實進行了 800 萬次查詢,那麼 I/O 速率 $ 0.10 per 1 million requests, should be $ 每月 0.80(80 美分)。如果您在一個月內執行 10 億次查詢,則為 100.00 美元。請絕對確保這些數字是正確的,並與坐在您旁邊的首席財務官一起寫下!!!!

更新 2012-05-02 16:26 EDT

由於它是 8 億次查詢/月,因此是 80.00 美元/月

不,一次 I/O 操作不等於一次查詢。一個查詢如果由查詢記憶體處理,可能會導致 0 次 IO 操作(你很幸運),也可能導致多次 IO 操作。我猜可能有成百上千,這取決於表、索引、查詢和其他細節。

http://aws.amazon.com/ebs/聲明如下:

標準卷的捲儲存按您每月預置的 GB 量收費,直到您釋放它。標準卷的捲 I/O 按您對捲髮出的請求數收費。**諸如 IOSTAT 之類的程序可用於隨時測量系統的確切 I/O 使用情況。**但是,應用程序和作業系統通常執行不同級別的記憶體,因此對於標準卷,您可能會看到賬單上的 I/O 請求數量少於應用程序看到的數量,除非您將所有 I/O 同步到磁碟.

iostat 是一個低級的 linux 實用程序,它對數據庫查詢一無所知。http://linux.die.net/man/1/iostat

上面的引用是針對 EBS 服務的,但是 RDS 是基於 EC2 和 EBS 的,所以我相當有信心它們在 RDS 中的意思是一樣的。

引用自:https://dba.stackexchange.com/questions/17426