Amazon RDS I / O请求-1个查询= 1个可计费I / O?


9

我有一个要迁移到Amazon RDS上的InnoDB数据库。

我当前的实施托管在我自己的服务器上,每月显示大约800万次查询。

RDS网站说I / O费率为每100万个请求$ 0.10

1个I / O = 1个查询吗?也就是说,我会为此使用量+ RDS费用向我收取$ 80 / mo的费用吗?

Answers:


7

警告:请特别注意您的电话号码和查询内容!

我为什么要发出这样的警告?

早在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.schemata是否具有索引?

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如何计算正在执行的查询?以下是两个状态变量,可能会有所启发:

  • 查询:服务器执行的语句数。与Questions变量不同,此变量包括在存储的程序中执行的语句。它不计算COM_PING或COM_STATISTICS命令。

  • 问题:服务器执行的语句数。与Queries变量不同,这仅包括客户端发送给服务器的语句,而不包括在存储的程序中执行的语句。此变量不计算COM_PING,COM_STATISTICS,COM_STMT_PREPARE,COM_STMT_CLOSE或COM_STMT_RESET命令。

请不要担心是否正在监视您的MySQL Server,因为调用状态变量的监视正在内部运行查询以检索请求的数据。

24天内的10亿是

  • 每天4170万次查询
  • 每小时173.6万次查询
  • 每分钟28,935个查询
  • 每秒482个查询

对于正在监视的MySQL实例,这些数字根本不会牵强。

如果您使用的是MySQL Workbench,MySQL Administrator或phpMyAdmin,则这些产品生成或更新的任何页面都将召唤这些小小的状态查询并快速增加编号。

摘要

如果您的站点确实进行了800万次查询,则每100万个请求的I / O费率0.10美元/月,应为0.80美元(80美分)。如果您一个月内执行10亿次查询,则$ 100.00。请绝对确保这些数字准确无误,然后与您旁边的CFO一起撰写!!!

更新2012-05-02 16:26 EDT

由于它是8亿个查询/月,所以每月80.00美元


1
感谢您的回答...我的意思是键入800M,而不是8M。无论如何,您是否知道1个查询= 1个I / O?

如果你能在这里回答我的相关问题,这将会是巨大的:dba.stackexchange.com/questions/49869/...
点击给予好评

6

不,一个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中的含义相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.