Your SlideShare is downloading. ×
MySQL调优
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

MySQL调优

1,545
views

Published on

Published in: Technology

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,545
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
83
Comments
0
Likes
10
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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