MySQL 性能调优简介 温铭  金山互联网安全公司 安全技术研发中心
哪里可以调优 MySQL  配置参数 索引 操作系统 / 硬件 应用 SQL 语句
MySQL 配置参数 使用 Innodb 引擎,而不是 MyISAM --- 行锁;事务; 参数的调优对 Innodb 非常重要 --- 默认参数性能很差 Innodb 不会对参数做任何自我优化
innodb_buffer_pool_size 最重要的参数 缓存 Innodb 的索引和数据 --- 根据你的数据量来分配,太大就浪费 可以设置为物理内存的 80% --- 要给操作系统和其他缓存留有足够的内存,不然会有内存竞争 负载过重时, Innodb 分配的值可能会多 10%
innodb_log_file_szie 对写操作频繁的数据库很重要 更大的日志文件  =  更少的数据刷新 更大的日志文件  =  更长的恢复时间 怎么选择合适自己应用的值? ---innodb_log_buffer_size 设置为每秒的数据量,  innodb_log_file_size 设置为半个小时的数据量(因为默认有两个日志文件) --- 怎么确定每秒数据量见这里
innodb_flush_log_at_trx_commit 看应用的要求 1 :默认值,最安全。每个事务提交时不仅会写到日志,也会刷新到磁盘。即使停电也不会丢失数据 0 :最不安全,效率最高。事务提交时不做任何操作,每秒钟刷新到日志和磁盘。数据库崩溃会丢失 1 秒的事务 2 :每个事务提交时写到日志,每秒刷新到磁盘一次。系统崩溃会丢失 1 秒的事务
innodb_flush_method Innodb 刷新数据到磁盘的方法 默认是 fsync() --- 操作系统和数据库会缓存两份数据 (double buffering) O_DIRECT --- 绕过操作系统的缓存 --- 如果是大量随机写入操作, O_DIRECT 会提高效率。但是顺序写入和读取效率都会降低。所以使用 O_DIRECT 需要根据需求测试。可以看一下 taobao DBA 团队的一个小测试
其他重要参数 skip-name-resolve interactive_timeout default-character-set max_connections thread_concurrency
索引 Clustered Primary   Key Secondary Index
索引 主键占用空间越小越好 不要用随机值做主键。比如 MD5 根据主键查询速度最快 联合索引 --- 最左前缀 不做不必要的索引 --- 空间;时间;缓存 只有几个值的字段不必索引
字段 考虑扩充的情况下用最省的类型 ---bool or int ; char() or varchar(); ip 类型 ---inet_aton  和 inet_ntoa  函数 命名规范 表的设计。范式,反范式
操作系统 / 硬件 Linux 最常见,熟悉的人多,好维护 sun 的 Solaris 和服务器对 MySQL 有专门的优化 选择最新的稳定版本 --- 优化;硬件支持; 文件系统: XFS 当然,要支持 64 位
操作系统 / 硬件 内存:越多越好! --- 优化数据库最廉价有效的方案 更快的 CPU UPS 有 BBU( 电池备份单元 ) 的 Raid 卡 RAID10 硬盘 --- 优化完参数后,提高性能最显著的方法
应用 数据库只负责数据,不管逻辑 谨慎使用存储过程和触发器 缓存,还是缓存,缓存是第一位的 避免硬盘操作 统计 读写分离  ?MySQL proxy...
应用 把复杂的判断和逻辑留给代码,而不是数据库 key-value database ---Tokyo Cabinet/Tyrant ; MongDB ; MemcacheDB... 数据库不是救世主,不是存储系统,更不是垃圾桶
SQL 语句 如果你一眼看不明白这个 SQL 语句是干嘛的,就重写吧 explain 每一个 SQL 语句,确认是否用到索引 --- select * from table where date(create_time) > '2009-1-1'  不要在 innodb 引擎的表上使用 count(*) 批量 insert 和 update 开启慢查询日志,把超过一秒的操作拉出来示众
持续优化必备工具 Maatkit (mk)   :  a collection of 20+ scripts  Hack MySQL Kit (hmk)
最好的提高方法 官方文档 高质量 blog 集合: http://planet.mysql.com/ http://hackmysql.com/
DBA 还做了哪些? !!!备份!!! 持续优化 安全和稳定 异常处理 灾难恢复 设计 审查
Q&A

MySQL调优