我正在研究一个生产数据库,其中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从不缓存数据.
警告
在数据库服务器上获取足够的RAM来缓存InnoDB缓冲池中的所有内容(75%的已安装RAM).
相关文章
- mysql - 你还在使用MyISAM还是更喜欢Aria存储引擎?
- 我应该使用mysql来保存日志,还是只是转储到文本文件
- 我是否应该总是更喜欢使用准备好的SQL语句来获得性能优势?
- 存储空间 - 我们应该使用存储空间还是RAID?
- 我应该使用google-app-engine-django还是应用引擎补丁,还是别的?
- 谷歌云存储 - 在谷歌云计算引擎持久性磁盘v / s云存储,我应该使用,为什么?
- 当使用ASP.Net Membership和另外一个表来存储用户信息时,我应该将其他表链接到aspnet_Users还是我自己的表?
- 我应该使用Ubuntu的存储库还是MongoDB的私有存储库来安装MongoDB?
转载注明原文:mysql – 我应该使用除MyISAM之外的存储引擎来优化这些表,还是应该获得更好的磁盘? - 代码日志