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

我正在研究一个生产数据库,其中4个最大的表每个包含400万到1000万行,每个包含大约15个字段,不同字段类型(数字,varchar和文本)的索引. index_length总数为2.2GB,data_length为6GB.所有这些表都使用MyISAM,它们的读/写比率为66/33.

这是空闲时间/etc/init.d/mysql状态的输出:

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

在高峰时间,每秒的查询数约为300.

在过去的几周里,数据库变得非常慢,有时查询锁定了2分钟.所以,我将key_buffer_size增加到4GB(我的机器上有8GB).锁定时间减少了.然而,在高峰时段它仍然无法忍受,特别是当读/写比率接近50/50时.

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

我已经成功地调整了这个数据库,然后它仍然更小,但现在我被卡住了.

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

最佳答案
你必须使用InnoDB.原因如下:

InnoDB相对于MyISAM的主要优势

> InnoDB caches data and index pages, whereas MyISAM only caches index pages.
> InnoDB专为ACID-compliant transactions设计
> InnoDB专为行级锁定而设计,MyISAM使用table-level locking.
> InnoDB专为Multiversion Concurrency Control, critical for transaction isolation设计
> InnoDB可以调到engage multiple cores

MyISAM在阅读繁重的环境中非常棒.虽然您可以基于每个表配置私有缓存,但MyISAM从不缓存数据.

InnoDB is your best bet !!!

警告

在数据库服务器上获取足够的RAM来缓存InnoDB缓冲池中的所有内容(75%的已安装RAM).

转载注明原文:mysql – 我应该使用除MyISAM之外的存储引擎来优化这些表,还是应该获得更好的磁盘? - 代码日志