如何优化 Linux MySQL 服务器以更快地查询多行(最多 10 亿)表。
服务器仅用于开发,因此安全性、可用性或恢复不是问题。
这是一个例子:
ALTER TABLE link ADD UNIQUE KEY url_index(url(255))
- 持续时间>6小时
- 链接数(约 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 HDD(非 SSD)
my.cnf (http://pastebin.com/vx6BNqrE)
我可以在软件方面优化什么(查询/表设计和 my.cnf 或其他服务器配置),以及在 RAM 之外的硬件方面应该首先升级什么(不幸的是 RAM 不可升级,因为只有 3 个 RAM 插槽可用)。
更新
最佳答案
您需要开始扩展,而不是进行可能在一小时内增加几笔交易的微观优化。
首先,获得一 block SSD。如果您需要更多空间,请对它们进行 RAID。如果您真的关心性能,SSD 就很大,尤其是在 IO 方面。
其次,一台服务器只能走这么远。您需要开始设置从属设备来减轻部分负载,它们还可以用作漂亮的故障转移。
MySQL 并不是真正为按需模式更改而设计的,因此更改表很难回答;实际上,我会让服务器停止服务以防止锁定,运行更改表,然后将其与丢失的内容同步备份,并与其他服务器一起执行。您实际上应该只选择一种模式并坚持使用它。
祝你好运!
关于MySQL linux 服务器和 my.cnf 优化多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270322/