OSTRZEŻENIE: Bądź bardzo ostrożny ze swoimi liczbami i tym, co postrzegasz jako zapytanie !!!
Dlaczego daję takie ostrzeżenie ???
W sierpniu 2011 roku napisałem post w ServerFault, wyjaśniając, w jaki sposób możliwe jest wykonanie 1 miliarda zapytań w ciągu 24 dni .
Oto cały post:
MySQL będzie wywoływał zapytania wewnętrznie. W rzeczywistości prawie wszystko, co robisz w MySQL, jest zapytaniem.
Jeśli włączysz dziennik ogólny lub dziennik powolnych zapytań, wszystko, co robi mysqld, zostanie zapisane.
Jeśli masz włączoną opcję --log-queries-not-using-indexes , wszystko, co nie obejmuje indeksów, ląduje w wolnym dzienniku.
Załóżmy, że uruchamiasz to zapytanie:
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)
Tak, POKAŻ BAZY DANYCH; jest zapytaniem. W rzeczywistości, co ekwiwalent schematu informacyjnego ???
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)
Czy tabela information_schema.schemata ma 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)
Nie. POKAŻ BAZY DANYCH; wylądowałby w dzienniku ogólnym i dzienniku powolnym (z włączoną opcją --log-queries-not-using-indexs)
Dlatego wiele operacji, które naszym zdaniem nie stanowią zapytania, może być tylko zapytaniem, ale wewnętrznym dla mysqld.
Jeśli korzystasz z jakichkolwiek narzędzi monitorowania, które są podłączone do mysqld, spowoduje to także zwiększenie liczby zapytań.
Przykład:
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)
Samo odzyskanie czasu działania mysqld to zapytanie. W jaki sposób MySQL zlicza wykonywane zapytania? Oto dwie zmienne statusu, które mogą rzucić nieco światła:
Zapytania : liczba instrukcji wykonanych przez serwer. Ta zmienna obejmuje instrukcje wykonywane w przechowywanych programach, w przeciwieństwie do zmiennej Pytania. Nie liczy poleceń COM_PING ani COM_STATISTICS.
Pytania : Liczba instrukcji wykonanych przez serwer. Dotyczy to tylko instrukcji wysyłanych do serwera przez klientów, a nie instrukcji wykonywanych w przechowywanych programach, w przeciwieństwie do zmiennej Queries. Ta zmienna nie uwzględnia poleceń COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE ani COM_STMT_RESET.
Nie przejmuj się, jeśli serwer MySQL jest monitorowany, ponieważ monitorowanie wywołujące zmienne statusu uruchamia zapytania wewnętrznie w celu pobrania żądanych danych.
1 miliard w ciągu 24 dni to
- 41,7 miliona zapytań dziennie
- 1,736 miliona zapytań na godzinę
- 28 935 zapytań na minutę
- 482 zapytań na sekundę
W przypadku monitorowanej instancji MySQL liczby te wcale nie są dalekosiężne.
Jeśli korzystasz z MySQL Workbench, MySQL Administrator lub phpMyAdmin, każda strona generowana lub aktualizowana przez te produkty przywoła te małe zapytania o status i szybko uruchomi numery.
PODSUMOWANIE
Jeśli Twoja witryna rzeczywiście wysyła zapytania o wartości 8 mln, wówczas współczynnik we / wy 0,10 USD za 1 milion żądań powinien wynosić 0,80 USD (80 centów) miesięcznie. Jeśli wykonasz 1 miliard zapytań w ciągu miesiąca, to 100,00 $. Upewnij się, że te liczby się przesuwają i DOSTARCZAJĄC SIĘ DO PISANIA Z TWOIM SIEDZIBĄ CFO NASTĘPNIE DLA CIEBIE !!!
AKTUALIZACJA 2012-05-02 16:26 EDT
Ponieważ jest to 800 milionów zapytań / miesiąc, to 80,00 USD / miesiąc
Nie, jedna operacja We / Wy nie jest równa jednemu zapytaniu. Jedno zapytanie może spowodować 0 operacji We / Wy, jeśli jest obsługiwane przez pamięć podręczną zapytań (i masz szczęście) lub może spowodować wiele operacji We / Wy. Potencjalnie setki i tysiące, jak sądzę, w zależności od tabel, indeksów, zapytań i innych szczegółów.
http://aws.amazon.com/ebs/ stwierdza, co następuje:
iostat to niskopoziomowe narzędzie linux, które nie wie nic o zapytaniach do baz danych. http://linux.die.net/man/1/iostat
Powyższy cytat dotyczy usługi EBS, ale RDS opiera się na EC2 i EBS, więc jestem całkiem pewien, że w RDS oznaczają to samo.
źródło