-1

如何优化 linux MySQL 服务器以更快地查询具有多行(最多 10 亿行)的表。

服务器仅用于开发,因此安全性、可用性或恢复不是问题。

这是一个例子:

ALTER TABLE link ADD UNIQUE KEY url_index(url(255))
  • 持续时间>6h
  • 链接数(~ 2000 万)
  • CPU 使用率低 (~19%)
  • 高 IO(iotop mysql 主要返回 600 KB/s 读取和 500 KB/s 写入,99% IO 一些峰值达到 2-3 MB/s)

链接表:

CREATE TABLE `links` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `url` varchar(2000) NOT NULL,
  `domain` varchar(255) DEFAULT NULL  
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=27765646 DEFAULT CHARSET=utf8;

我有一个专用的 linux 服务器(ubuntu 12.10)

  • 6 GB 内存
  • 1 TB 硬盘(非 SSD)

my.cnf (http://pastebin.com/vx6BNqrE)

我可以在软件方面优化什么(查询/表设计和 my.cnf 或其他服务器配置)以及在 RAM 以外的硬件方面应该首先升级什么(不幸的是 RAM 不可升级,因为只有 3 个 RAM 插槽可用)。

更新

4

1 回答 1

1

您需要开始扩展,而不是四处进行可能会在一小时内为您带来更多交易的微优化。

首先,获得SSD。如果您需要更多空间,请对它们进行 RAID。如果您真的关心性能,SSD 是巨大的,尤其是在查看您的 IO 时。

其次,一台服务器只能走这么远。您需要开始设置将减轻一些负载的从站,它们还可以作为一个漂亮的故障转移。

MySQL 并不是真正为按需模式更改而设计的,所以 alter table 很难回答;实际上,我会停止服务以防止锁定,运行更改表,然后将其与错过的内容同步,并与其他服务器一起跟进。你真的应该只选择一个模式并坚持下去。

祝你好运!

于 2013-01-11T01:55:54.680 回答