คำเตือน: ระมัดระวังตัวเลขของคุณและสิ่งที่คุณมองว่าเป็นการสอบถาม !!!
ทำไมฉันถึงส่งคำเตือนแบบนี้ ???
ย้อนกลับไปในเดือนสิงหาคม 2011, ผมเขียนโพสต์ใน ServerFault อธิบายว่ามันเป็นไปได้สำหรับ 1 พันล้านแบบสอบถามที่จะดำเนินการใน 24 วัน
นี่คือโพสต์ทั้งหมด:
MySQL จะเรียกการสอบถามภายใน อันที่จริงแล้วทุกอย่างที่คุณทำใน MySQL เป็นข้อความค้นหา
หากคุณเปิดใช้งานบันทึกทั่วไปหรือบันทึกการสืบค้นที่ช้าทุกอย่าง mysqld จะได้รับการบันทึก
หากคุณเปิดใช้งาน--log-query-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)
ใช่แสดงฐานข้อมูล; เป็นแบบสอบถาม อันที่จริงแล้วอะไรคือ data_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-query-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)
เพียงแค่เรียก uptime ของ mysqld เป็นแบบสอบถาม ภายใน MySQL มีวิธีการนับแบบสอบถามที่ถูกดำเนินการอย่างไร ต่อไปนี้เป็นตัวแปรสถานะสองตัวที่อาจทำให้เกิดแสง:
คำค้นหา : จำนวนข้อความสั่งที่ดำเนินการโดยเซิร์ฟเวอร์ ตัวแปรนี้รวมคำสั่งที่เรียกใช้ภายในโปรแกรมที่เก็บไว้ซึ่งแตกต่างจากตัวแปรคำถาม มันไม่นับคำสั่ง COM_PING หรือ COM_STATISTICS
คำถาม : จำนวนงบที่ดำเนินการโดยเซิร์ฟเวอร์ ซึ่งรวมถึงข้อความสั่งที่ส่งไปยังเซิร์ฟเวอร์โดยไคลเอนต์เท่านั้นไม่ใช่ข้อความสั่งที่ดำเนินการภายในโปรแกรมที่เก็บไว้ซึ่งแตกต่างจากตัวแปรข้อความค้นหา ตัวแปรนี้ไม่นับคำสั่ง COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE หรือ COM_STMT_RESET
โปรดอย่ากังวลหากเซิร์ฟเวอร์ MySQL ของคุณกำลังถูกตรวจสอบเนื่องจากการตรวจสอบที่เรียกใช้ตัวแปรสถานะกำลังเรียกใช้แบบสอบถามภายในเพื่อดึงข้อมูลที่ร้องขอ
1,000,000 ใน 24 วันคือ
- 41.7 ล้านคำค้นหาต่อวัน
- 1.736 ล้านข้อความค้นหาต่อชั่วโมง
- 28,935 ข้อความค้นหาต่อนาที
- 482 คำค้นหาต่อวินาที
สำหรับอินสแตนซ์ MySQL ที่กำลังถูกตรวจสอบตัวเลขเหล่านี้ไม่ได้ถูกเรียกไกล
หากคุณใช้งาน MySQL Workbench ผู้ดูแลระบบ MySQL หรือ phpMyAdmin หน้าใด ๆ ที่ผลิตภัณฑ์เหล่านี้สร้างหรืออัปเดตจะเรียกคิวรีแบบสถานะเล็ก ๆ เหล่านี้และเรียกใช้ตัวเลขอย่างรวดเร็ว
สรุป
หากไซต์ของคุณทำการสอบถาม 8 ล้านครั้งดังนั้นอัตรา I / O $ 0.10 ต่อการร้องขอ 1 ล้านครั้งควรเท่ากับ $ 0.80 (80 เซนต์) ต่อเดือน หากคุณดำเนินการ 1 พันล้านแบบสอบถามในหนึ่งเดือนนั่นคือ $ 100.00 โปรดตรวจสอบให้แน่ใจว่าตัวเลขเหล่านี้หลอกลวงและได้รับมันในการเขียนด้วย CFO ของคุณนั่งถัดไปกับคุณ !!!
อัพเดท 2012-05-02 16:26 EDT
เนื่องจากเป็นข้อความค้นหา 800M / เดือนนั่นคือ $ 80.00 / เดือน