【问题标题】:MySQL linux server and my.cnf optimizations for many rows多行的 MySQL linux 服务器和 my.cnf 优化
【发布时间】:2013-01-11 01:40:17
【问题描述】:

如何优化 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 硬盘(非 SSD)

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

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

更新广告

【问题讨论】:

    标签: mysql linux ubuntu ubuntu-12.10


    【解决方案1】:

    您需要开始扩展。

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

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

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

    祝你好运!

    【讨论】:

    • 谢谢,知道有什么适合初学者的集群搭建教程吗?
    • 为了避免混淆,这不是一个集群——那是完全不同的东西。这是一个很好的指南:howtoforge.com/mysql_master_master_replication
    • 不幸的是,据我了解,这只会给我带来与 raid 相同的高可用性,更快的读取速度,但据我了解,它不会给我更好的写入,正如我所说:“服务器是仅用于开发,因此安全性、可用性或恢复不是问题。”
    • @clickstefan 高可用性只是一个奖励,正如我在回答中所指出的那样。
    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多