Amazon RDS I / O 요청-쿼리 1 개 = 청구 가능한 I / O 1 개? I / O

Amazon RDS로 마이그레이션하려는 InnoDB 데이터베이스가 있습니다.

내 자체 서버에서 호스팅되는 현재 구현은 한 달에 약 8 백만 건의 쿼리를 보여줍니다.

RDS 사이트에 따르면 I / O 비율은 백만 건당 $ 0.10입니다.

1 I / O = 1 쿼리입니까? 즉,이 사용량 + RDS 요금에 대해 $ 80 / 월가 청구됩니까?



답변

경고 : 당신의 숫자와 당신이 쿼리로 보는 것에 매우주의하십시오!

왜 그런 경고를합니까?

2011 년 8 월 에 ServerFault에 게시물을 작성하여 24 일 내에 10 억 개의 쿼리를 실행할 수있는 방법을 설명했습니다 .

전체 게시물은 다음과 같습니다.

MySQL은 내부적으로 쿼리를 요구합니다. 사실, MySQL에서하는 일은 쿼리입니다.

일반 로그 나 느린 쿼리 로그를 켜면 mysqld가하는 모든 것이 기록됩니다.

당신이있는 경우 –log-쿼리 – – – 인덱스를 사용하지 않는이 모든 것이 느린 로그에 인덱스 땅을 포함하지 활성화.

이 쿼리를 실행한다고 가정 해 봅시다.

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은 실행중인 쿼리를 어떻게 계산합니까? 약간의 빛을 발산 할 수있는 두 가지 상태 변수는 다음과 같습니다.

  • 쿼리 : 서버에서 실행 한 명령문 수입니다. 이 변수에는 질문 변수와 달리 저장된 프로그램 내에서 실행 된 명령문이 포함됩니다. COM_PING 또는 COM_STATISTICS 명령은 계산하지 않습니다.

  • 질문 : 서버에서 실행 한 명령문 수입니다. 여기에는 Queries 변수와 달리 클라이언트가 서버로 전송 한 명령문 만 포함되며 저장된 프로그램 내에서 실행 된 명령문은 포함되지 않습니다. 이 변수는 COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE 또는 COM_STMT_RESET 명령을 계산하지 않습니다.

상태 변수를 호출하는 모니터링이 요청 된 데이터를 검색하기 위해 내부적으로 쿼리를 실행하고 있기 때문에 MySQL 서버를 모니터링하는 경우 걱정하지 마십시오.

24 일 동안 10 억

  • 하루 4170 만 건의 쿼리
  • 시간당 736 만 쿼리
  • 분당 28,935 개의 쿼리
  • 초당 482 개의 쿼리

모니터링중인 MySQL 인스턴스의 경우이 숫자는 전혀 가져 오지 않습니다.

MySQL Workbench, MySQL Administrator 또는 phpMyAdmin을 사용하는 경우 이러한 제품이 생성하거나 업데이트하는 모든 페이지는 이러한 작은 상태 쿼리를 소환하고 숫자를 빠르게 실행합니다.

요약

귀하의 사이트가 실제로 8M 쿼리를하는 경우 1 백만 건의 요청 당 0.10 달러의 I / O 비율은 한 달에 0.80 달러 (80 센트)가되어야합니다. 한 달에 10 억 개의 쿼리를 실행하면 $ 100.00가됩니다. 이 숫자가 뛰어나고 CFO와 함께 서면으로 작성하십시오!

업데이트 2012-05-02 16:26 EDT

한 달에 800M 쿼리이므로 월 $ 80.00입니다.


답변

아니요, 하나의 I / O 작업이 하나의 쿼리와 같지 않습니다. 하나의 쿼리는 쿼리 캐시에 의해 처리되는 경우 IO 작업이 0이되고 운이 좋으면 여러 IO 작업이 발생할 수 있습니다. 테이블, 인덱스, 쿼리 및 기타 세부 정보에 따라 수백 및 수천이 될 수 있습니다.

http://aws.amazon.com/ebs/ 는 다음을 나타냅니다.

표준 볼륨의 볼륨 스토리지는 릴리스 할 때까지 매월 프로비저닝 한 금액 (GB)으로 청구됩니다. 표준 볼륨에 대한 볼륨 I / O는 볼륨에 대한 요청 수에 따라 요금이 청구됩니다. IOSTAT와 같은 프로그램을 사용하여 언제든지 시스템의 정확한 I / O 사용량을 측정 할 수 있습니다. 그러나 응용 프로그램과 운영 체제는 종종 다른 수준의 캐싱을 수행하므로 표준 볼륨의 경우 모든 I / O를 디스크에 동기화하지 않는 한 청구서에 대한 I / O 요청 수가 응용 프로그램보다 적습니다. .

iostat는 데이터베이스 쿼리에 대해 전혀 모르는 저수준 리눅스 유틸리티입니다. http://linux.die.net/man/1/iostat

위의 인용문은 EBS 서비스에 대한 것이지만 RDS는 EC2 및 EBS를 기반으로하므로 RDS에서 동일한 의미를 가지고 있다고 확신합니다.