我正在开发一个生产数据库,它的 4 个最大的表每个包含 400 万到 1000 万行,每个包含大约 15 个字段,并在不同的字段类型(数字、varchar 和文本)上有索引。总index_length
容量为 2.2GB,总容量data_length
为 6GB。所有这些表都使用 MyISAM,它们的读/写比为 66/33。
这是空闲时间 /etc/init.d/mysql status 的输出:
Server version 5.1.37-1ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
...
Threads: 27 Questions: 5430994 Slow queries: 59 Opens: 298 Flush tables: 1 Open tables: 128 Queries per second avg: 182.695
Run Code Online (Sandbox Code Playgroud)
在高峰时段,每秒的查询数约为 300。
在过去的几周里,数据库变得如此缓慢,有时查询会锁定 2 分钟以上。所以,我增加到key_buffer_size
4GB(我机器上有 8GB)。锁定时间减少了。但是在高峰时段还是难以忍受,尤其是读写比接近50/50的时候。
服务器在虚拟环境中运行,因此 I/O 不是很好,并且大多数选择查询ORDER BY <some_indexed_field>
在平均 50k 行的结果集上执行。
之前我已经成功地调整了这个数据库,但现在它仍然较小,但现在我被卡住了。
更新: 白天磁盘利用率很容易达到 100%。