我应该使用 MyISAM 以外的存储引擎来优化这些表还是应该获得更好的磁盘?

MrD*_*MrD 5 mysql myisam database-tuning

我正在开发一个生产数据库,它的 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_size4GB(我机器上有 8GB)。锁定时间减少了。但是在高峰时段还是难以忍受,尤其是读写比接近50/50的时候。

服务器在虚拟环境中运行,因此 I/O 不是很好,并且大多数选择查询ORDER BY <some_indexed_field>在平均 50k 行的结果集上执行。

之前我已经成功地调整了这个数据库,但现在它仍然较小,但现在我被卡住了。

更新: 白天磁盘利用率很容易达到 100%。

Rol*_*DBA 10

你必须使用 InnoDB。这是为什么:

InnoDB 相对于 MyISAM 的主要优势

MyISAM 在大量读取的环境中表现出色。尽管您可以在每个表的基础上配置私有缓存,但 MyISAM 从不缓存数据。

InnoDB 是您最好的选择!!!

警告

在 DB 服务器上获得足够的 RAM 以缓存 InnoDB 缓冲池中的所有内容(已安装 RAM 的 75%)。