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
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:
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.
sumber