MySQL服务器的linux性能优化和扩展技巧.PDFVIP

MySQL服务器的linux性能优化和扩展技巧.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MySQL服务器的linux性能优化和扩展技巧

MySQL 服务器的 linux 性能优化和扩展技巧 作者: Yoshinori Matsunbu 作者现在是 DeNA 公司的数据库和基础设施架构师。之前在 SUN 公司工作。他也是 HandlerSocket 的作者。这个是 MySQL 的 NoSQL 插件。 本文是根据他的 PPT 整理而成的,如有不正确敬请指教。 本文主要的内容有如下: 1. 内存和 SWAP 空间管理 2. 同步 I/O ,文件系统和I/O 调度 3. 有用的命令和工具:iostat, mpstat, oprofile, SystemTap, gdb 第一部分 :内存和 SWAP 空间管理 内存也就是随机访问内存 内存是最终要的硬件部件对于 RDBMS(relation database management system)。 内存的访问速度远远超过 HDD (普通硬盘)/SSD (固态硬盘) 内存: 60ns , 但是还没达到每秒 10W HDD : 5ms SSD : 100-500us 他们之间的关系为: 1s = 1000ms 1ms = 1000us 1us = 1000ns 所以 16GB-64GB 对于现在是非常合适的。(好像之前在人人的时候都是 72G ) 热点应用的数据都需要缓存在内存中 当然最小化热点数据大小也是很重要的,主要有以下几种措施: 使用紧凑长度的数据类型(SMALLINT 来替代 VARCHAR/BIGINT, TIMESTAMP 来替代 DATETIME 等等) 不要创建无用的索引 删除不必要的数据或者将这些数据移到存档表中,来保证热点的表尽量的小 下面这个测试就是针对不同内存大小服务器的一个测试,测试数据在 20-25GB (200 个数据仓库,运行一小时),使用的 是 DBT-2 测试,这是一种密集写的测试,服务器的配置为 Nehalem 2.93 * 8 cores, MySQL 5.5.2, 4 RAID 1+0 HDDs 从上面这个表格中我们可以很明显看到巨大的差异当数据全部缓存到内存中。 内存大小会影响所有操作,不管是 SELECT ,还是INSERT/UPDATE/DELETE 操作。 INSERT :当往一个随机排序的索引中插入数据的时候会造成随机的读/写 UPDATE/DELETE : 当更改数据的时候会导致磁盘的读/写 还有一个 提高性能的 方法是使用 直接I/O (Direct I/O ) 从上图中我们可以看到 Direct I/O 就是直接跳过了文件系统的 cache。 Direct I/O 对于完全利用内存是非常重要的。我们可以通过设置 innodb_flush_method=O_DIRECT 来运行。 注:文件I/O 必须是 512byte 为一个单位,同时 O_DIRECT 不能用在 InnoDB 日志文件,二进制日志文件,MyISAM 引擎, PostgreSQL 数据文件等等。 不要分配 太多的内存 这个其实只要分配到足够其它应用程序使用,而不要最后导致系统没有内存可用。 上图中我们可以看到总共系统 32G 内存,而 Mysqld 已经使用了30G ,而系统居然还只有 150M 可用,这样是非常危险。 当系统没有内存可用时会发生什么事情呢? 减少文件系统缓存来分配内存空间,这个文件系统缓存就是上图中 cached 部分 替换掉一些进行来分配内存空间。也就是将一些内存空间移动到 SWAP SWAP 是坏的 进程空间会写入到磁盘上(swap out ),而这些进程空间本应该是写入到内存中的。 当访问磁盘上的进程空间会导致磁盘读写(swap in ) 同时会产生巨量的随机磁盘读写 那也许有些人会想到把swap 大小设置为 0 ,但是这样其实是非常危险的。 因为当内存和 SWAP 都不可用的时候的,OOM Kille (out of memory )就会被启用。OOM Kille 会杀掉任何进程来分配 内存空间。 最耗费内存的进程会被最先杀掉,在 mysql 服务器上这个一般是 mysqld 进程 mysqld 会被中止关闭,而在重启时候会进行崩溃修复。 OOM Kille 的策略是根据/proc/pid/oom_score 来进行倒序排列,也就是 oom_score 最大的会被第一个干掉 通常 mysqld 会拥有最高的值

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档