我正在使用下面的选择查询从表中搜索。
"Select * from authentication_codes where client_id=6"
列 client_id 是整数类型,我也索引了该列。表中有总36751694
记录,authentication_codes
其中20200000
属于 client_id 6。
每当我同时达到 4 次以上 SQL 查询时,mysql 就会因错误"mysql server gone away"
而崩溃,CPU 利用率会达到 95%。
相同查询的解释命令输出如下
mysql> explain Select * from authentication_codes where client_id=6 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: authentication_codes
type: ref
possible_keys: index_authentication_codes_on_client_id
key: index_authentication_codes_on_client_id
key_len: 5
ref: const
rows: 18475849
Extra: Using where
1 row in set (0.00 sec)
同时命中 3 个 SQL 请求语句后,使用 top 命令的 CPU 利用率如下
top - 09:13:43 up 2:28, 4 users, load average: 1.94, 0.67, 0.52
Tasks: 123 total, 2 running, 121 sleeping, 0 stopped, 0 zombie
%Cpu(s): 91.0 us, 2.8 sy, 0.0 ni, 5.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.4 st
KiB Mem: 4046840 total, 2439948 used, 1606892 free, 6836 buffers
KiB Swap: 0 total, 0 used, 0 free. 1929160 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4543 mysql 20 0 886304 176544 7068 S 188.0 4.4 2:53.83 mysqld
我的服务器有 4GB 的内存和 2 个 CPU 核心。Mysql 表使用数据库引擎 Innodb。
谢谢,