《MySQ概述及优化》PPT课件.ppt_第1页
《MySQ概述及优化》PPT课件.ppt_第2页
《MySQ概述及优化》PPT课件.ppt_第3页
《MySQ概述及优化》PPT课件.ppt_第4页
《MySQ概述及优化》PPT课件.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL概述及优化简介,2009-12-05,演讲人:张秀程,MySQL概述 MySQL优化 MySQL核心技术手册简介,目录索引,MySQL概述,什么是MySQL,MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 MySQL官方网站:,MySQL历史,1979年, 报表工具,数据引擎 1996年,MySQL 1.0 (3.11.1) 发布,支持SQL 2000年,成立 MySQL AB 公司 2008年1月,Sun公司以10亿美元收购MySQL AB公司 2009年4月,Oracle公司以74亿美元收购Sun公司,MySQL架构,MySQL存储引擎比较,MyISAM vs InnoDB,MyISAM 是MySQl的默认类型,基于传统的ISAM类型,它是存储记录和文件的标准方法。与其他存储引擎比较,它具有检查和修复表格的大多数工具。MyISAM表可以被压缩,并支持全文搜索。它们不是事务安全的,而且也不支持外键。,MyISAM 特点,MyISAM vs InnoDB,数据存储方式简单,使用 B-tree进行索引 使用三个文件定义一个表:.MYI .MYD .frm 少碎片、支持大文件、能够进行索引压缩 二进制层次的文件可以移植 (Linux Windows) 访问速度飞快,是所有MySQL文件引擎中速度最快的 不支持一些数据库特性,比如 事务、外键约束等 Table level lock,性能稍差,更适合读取多的操作 表数据容量有限,一般建议单表数据量介于 50w200w 增删查改以后要使用 myisamchk 检查优化表,MyISAM 存储结构,MyISAM vs InnoDB,MyISAM 索引结构,MyISAM vs InnoDB,MyISAM vs InnoDB,InnoDB:最受欢迎的存储引擎 ,支持事物处理 ,ACID、外键、日志修复等。InnoDB表的速度很快。如果需要一个事务安全的存储引擎或者是需要大量并发的INSERT或UPDATE,则应该使用InnoDB表。,InnoDB 特性,MyISAM vs InnoDB,使用 Table Space 的方式来进行数据存储 (ibdata1, ib_logfile0) 支持 事务、外键约束等数据库特性 Rows level lock , 读写性能都非常优秀 能够承载大数据量的存储和访问 拥有自己独立的缓冲池,能够缓存数据和索引 在关闭自动提交的情况下,与MyISAM引擎速度差异不大,InnoDB 索引结构,MyISAM vs InnoDB,MyISAM vs InnoDB 性能测试,测试结果,MyISAM vs InnoDB 性能测试,可以看出在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以在SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。 同时也可以看出值得使用 InnoDB 来替代 MyISAM 引擎来进行开发,毕竟InnoDB 有多数据库特性、更良好的数据存储性能和查询性能。,NDB,支持事务,用于集群(cluster),实现高可用,但性能仍欠佳。,MySQL优化,主要内容,为什么要优化 如何找到软肋 如何优化,为什么要优化,老板要求 客户要求 机器发飙 自己主动,机器发飙,网站打开速度很慢,但web服务器负载较低,或打开静态页面的速度很快,这就有可能是数据库的问题 load average 5 Iowait 10 vmstat procs(r b) 值较高 top中CPU的idle很小,sys或wait较高 服务器的swap严重 mysql的内存命中率很低,如 myisam_key_read_hit_ratio或innodb_buffer_hit_ratio较低,瓶颈定位,netstat 等系统级工具 explain slow query show status/show processlist/show engine innodb status 其他,例如mysqlreport,profiling等。,瓶颈定位 - Explain,Explain 都能提供何种信息? 表的读取顺序、每个表都是如何读取的? 可能用到哪些索引,实际使用了哪些索引? 表间的引用关系 查询优化器从每个表中预计读取的记录数 其他信息,如是否使用了内存表,是否引发排序等,瓶颈定位 续,将 LONG_QUERY_TIME 设为最小值;建议打一下patch,单位可以设为微秒,并可查看详细执行计划 执行 SHOW GLOBAL STATUS/PROCESSLIST 查看当前运行状态,从结果中发现可能的问题 执行 SHOW ENGINE INNODB STATUS 以查看 INNODB 的状态 定期检查冗余的索引以及没有使用索引的慢查询 利用 mysqlreport 产生可读性更强的报告 利用 Profiling 剖析一次查询瓶颈所在,系统(硬件、软件及网络)优化 配置优化(MySQL参数设置) 应用程序及架构优化,MySQL优化方式,通常硬件( CPU、内存、磁盘、网络等)是优化的最佳入口,使用好的硬件,更快的硬盘、大内存、多核CPU,专业的存储服务器(NAS、SAN) 客户端与服务器在一个高速的局域网内 通常,新版本的效率不如旧版本,不过可以利用新版本的新功能从另一方面得到性能上的提升 设计合理的架构,如果访问MySQL比较频繁,建议应用 Master/Slave 读写分离;数据库分表、数据库切片(分布式),也考虑使用相应缓存服务帮助 MySQL 缓解访问压力,系统优化,配置合理的MySQL服务器,尽量在应用本身达到一个MySQL最合理的使用 针对 MyISAM 或InnoDB 引擎进行不同定制性配置 针对不同的应用情况进行合理配置 针对 f 进行配置,后面设置是针对内存为2G的服务器进行的合理设置,配置优化,MySQL配置原则,配置优化,公共选项,配置优化,MyISAM 选项,InnoDB 选项,配置优化,应用程序及架构优化,垂直(水平)切分服务器/数据库、表 开启MySQL复制,实现读、写分离 在复制的基础上,增加负载均衡 采用集群(Cluster)+复制(MySQL 6.0+) 经常更新的表,可以将其分离成父表及子表(内存表) 用统计表保存定时统计结果,而不是在大表上直接统计 编写存储过程或函数来代替大量的外部应用程序交互,设计合理的数据表结构:适当的数据冗余 对数据表建立合适有效的数据库索引 数据查询:编写简洁高效的SQL语句,应用优化,应用优化方式,应用优化-续,确保索引合理利用,尽量使用复合索引 适当加大查询缓存(query cache),尽量减少交互次数 尽量使用固定格式的SQL语句,查询语句中少用运算或函数 缩短每个事务 使用适当的字段类型;适当的长度,有需要的时候再扩充 分解复杂查询为多个小查询 字符型字段采用前缀索引,应用优化,表结构设计原则 选择合适的数据类型:如果能够定长尽量定长 不要使用无法加索引的类型作为关键字段,比如 text类型 为了避免联表查询,有时候可以适当的数据冗余,比如 邮箱、姓名这些不容易更改的数据 选择合适的存储引擎,有时候 MyISAM 适合,有时候 InnoDB适合 为保证查询性能,最好每个表都建立有 auto_increment 字段, 建立合适的数据库索引 最好给每个字段都设定 default 值,应用优化,索引建立原则 一般针对数据分散的关键字进行建立索引,比如ID、QQ, 像性别、状态值等等建立索引没有意义 尽量使用短索引,一般对int、char/varchar、date/time 等 类型的字段建立索引 需要的时候建立联合索引,但是要注意查询SQL语句的编写 谨慎建立 unique 类型的索引(唯一索引) 一般建议每条记录最好有一个能快速定位的独一无二的 唯一标示(索引) 不要过度索引,单表建立的索引不要超过5个,否则更新索 引将很耗时,编写高效的SQL 能够快速缩小结果集的 WHERE 条件写在前面,如果有恒量条件, 也尽量放在前面 尽量避免使用 GROUP BY、DISTINCT 、OR、IN 等语句的使用, 避免使用联表查询和子查询,因为将使执行效率大大下降 能够使用索引的字段尽量进行有效的合理排列,如果使用了 联合索引,请注意提取字段的前后顺序 如果在SQL里使用了MySQL部分自带函数,索引将失效,同时将无法 使用 MySQL 的 Query Cache,比如 LEFT(), SUBSTR(), TO_DAYS() DATE_FORMAT(), 等,如果使用了 OR 或 IN,索引也将失效 使用 Explain 语句来帮助改进我们的SQL语句,MySQL书籍/网站分享,MySQL核心技术手册(第二版) 高性能MySQL(第二版) MySQL官方手册:/doc/refman/5.1/en/ MySQL Performance Blog:/,MySQL核心技术手册简介,基本内容,MySQL核心技术手册这本书,该书在内容编排上首先从MySQL的历史讲起,介绍了MySQL的价值、使用许可协议及邮件列表和相关参考书籍,还介绍了MySQL在不同操作系统上地安装、配置以及测试方法,如何创建数据库,以及如何操纵表中的数据。紧接着介绍了MySQL的各种语句和函数,最后介绍了如何使用C、Perl和PHP语言创建应用程序。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论