Permintaan I / O RDS Amazon - 1 permintaan = 1 I / O yang dapat ditagih?

9

Saya memiliki database InnoDB yang ingin saya migrasi ke Amazon RDS.

Implementasi saya saat ini, di-host di server saya sendiri, menampilkan sekitar 8 juta permintaan per bulan.

Situs RDS mengatakan bahwa I / O Beri $ 0,10 per 1 juta permintaan

Apakah 1 I / O = 1 permintaan? yaitu, apakah saya akan ditagih $ 80 / bln untuk jumlah penggunaan ini + biaya RDS?

Juga
sumber

Jawaban:

7

PERINGATAN: Berhati-hatilah dengan nomor Anda dan apa yang Anda lihat sebagai Pertanyaan !!!

Mengapa saya memberi peringatan seperti itu ???

Kembali pada bulan Agustus 2011, saya menulis posting di ServerFault yang menjelaskan bagaimana mungkin untuk 1 Miliar Kueri dieksekusi dalam 24 hari .

Inilah seluruh pos itu:

MySQL akan meminta kueri secara internal. Faktanya, hampir semua yang Anda lakukan di MySQL adalah permintaan.

Jika Anda mengaktifkan log umum atau log kueri lambat, semua mysqld tidak akan direkam.

Jika Anda mengaktifkan --log-queries-not-using-indeks , semua yang tidak melibatkan indeks akan masuk ke log lambat.

Katakanlah Anda menjalankan kueri ini:

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)

Ya, TAMPILKAN DATABASE; adalah sebuah query. Bahkan, apa yang setara dengan 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)

Apakah tabel information_schema.schemata memiliki indeks ???

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)

Tidak. Jadi, TAMPILKAN DATABASE; akan mendarat di log umum dan log lambat (dengan --log-kueri-tidak-menggunakan-indeks diaktifkan)

Oleh karena itu, banyak operasi yang kami pikir bukan merupakan permintaan mungkin hanya permintaan, tetapi internal ke mysqld.

Jika Anda menggunakan alat pemantauan apa pun yang terhubung ke mysqld, ini juga akan menjalankan hitungan pada kueri.

Contoh:

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)

Hanya mengambil uptime mysqld adalah permintaan. Secara internal, bagaimana cara MySQL menghitung permintaan yang dieksekusi? Berikut adalah dua variabel status yang mungkin menjelaskan:

  • Kueri : Jumlah pernyataan yang dijalankan oleh server. Variabel ini mencakup pernyataan yang dijalankan dalam program yang disimpan, tidak seperti variabel Pertanyaan. Itu tidak menghitung perintah COM_PING atau COM_STATISTICS.

  • Pertanyaan : Jumlah pernyataan yang dijalankan oleh server. Ini hanya mencakup pernyataan yang dikirim ke server oleh klien dan bukan pernyataan yang dijalankan dalam program yang disimpan, tidak seperti variabel Kueri. Variabel ini tidak menghitung perintah COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE, atau COM_STMT_RESET.

Harap jangan khawatir jika Server MySQL Anda sedang dipantau karena pemantauan yang memanggil variabel status menjalankan kueri secara internal untuk mengambil data yang diminta.

1 miliar dalam 24 hari adalah

  • 41,7 juta kueri per hari
  • 1,736 juta kueri per jam
  • 28.935 kueri per menit
  • 482 kueri per detik

Untuk instance MySQL yang sedang dipantau, angka-angka ini sama sekali tidak masuk akal.

Jika Anda menggunakan MySQL Workbench, MySQL Administrator, atau phpMyAdmin, setiap halaman produk ini menghasilkan atau memperbarui akan memanggil permintaan status kecil ini dan menjalankan nomor dengan cepat.

RINGKASAN

Jika situs Anda memang membuat 8 juta kueri, maka I / O Beri $ 0,10 per 1 juta permintaan, seharusnya menjadi $ 0,80 (80 sen) sebulan. Jika Anda menjalankan kueri 1 Miliar dalam sebulan, $ 100,00 itu. Pastikan benar-benar yakin angka-angka ini dan MENDAPATKANNYA DALAM MENULIS DENGAN CFO ANDA DUDUK BERIKUTNYA UNTUK ANDA !!!

UPDATE 2012-05-02 16:26 EDT

Karena 800 juta kueri / bulan, itu $ 80,00 / bulan

RolandoMySQLDBA
sumber
1
Terima kasih atas jawabannya ... Saya bermaksud mengetikkan 800M, bukan 8M. Apapun, Anda tahu jika 1 permintaan = 1 I / O?
Jika Anda dapat menjawab pertanyaan terkait saya di sini, akan lebih baik: dba.stackexchange.com/questions/49869/…
Klik Upvote
6

Tidak, satu operasi I / O tidak sama dengan satu permintaan. Satu kueri dapat menghasilkan 0 operasi IO jika ditangani oleh cache kueri (dan Anda beruntung), atau dapat mengakibatkan beberapa operasi IO. Berpotensi, ratusan dan ribuan, saya kira, tergantung pada tabel, indeks, kueri, dan detail lainnya.

http://aws.amazon.com/ebs/ menyatakan yang berikut:

Penyimpanan volume untuk volume Standar dibebankan oleh jumlah yang Anda berikan dalam GB per bulan sampai Anda melepaskannya. Volume I / O untuk volume Standar dibebankan oleh jumlah permintaan yang Anda buat untuk volume Anda. Program seperti IOSTAT dapat digunakan untuk mengukur penggunaan I / O sistem Anda kapan saja. Namun, aplikasi dan sistem operasi sering melakukan level caching yang berbeda, jadi untuk volume Standar, Anda kemungkinan akan melihat jumlah permintaan I / O yang lebih rendah pada tagihan Anda daripada yang terlihat oleh aplikasi Anda kecuali Anda menyinkronkan semua I / O Anda ke disk .

iostat adalah utilitas linux tingkat rendah, yang tidak tahu apa-apa tentang permintaan basis data. http://linux.die.net/man/1/iostat

Kutipan di atas adalah untuk layanan EBS, tetapi RDS didasarkan pada EC2 & EBS, jadi saya cukup yakin mereka berarti hal yang sama di RDS.

Ivan Kurmanov
sumber