最近读了《MySQL 管理之道》一书,做了以下总结,希望对大家有所帮助。在这里非常感谢作者的辛勤付出。

  1. 影响 MySQL 性能的因素:
        影响 MySQL InnoDB 引擎性能的最主要因素就是磁盘 I/ O,目前磁盘都是机械方式运作的,主要体现在读写前寻找磁道的过程中。因此在单块磁盘遇到了I/ O瓶颈时,可以把磁盘升级为 RAID 或 SSD 固态硬盘来提升性能,
        影响MySQL InnoDB 引擎性能的另一个因素就是内存,InnoDB 引擎在设计之初就是考虑用于大型、高负荷、高并发生产环境的,因此内存的大小直接反映了数据库的性能好坏。在 Buffer_ Pool 缓冲池中,涉及的参数为 innodb_ buffer_ pool_ size,它是 InnoDB 引擎中最重要的参数之一, 对 InnoDB 的性能有决定性的影响。默认的设置只有8MB,将其设置为60%~ 80%的内存。

  2. 运维工作中常用的性能分析工具:
    vmstat, sar, iostat, netstat,free, ps, top, mpstat.
    推荐 Linux 服务器性能监控工具:dstat。collectl 以及淘宝开源监控项目Tsar等。

  3. 在 MySQL5.6里,提供了快速预热Buffer_Pool缓冲池,只需要在 my.cnf 加入以下命令:
    innodb_ buffer_ pool_ dump_ at_ shutdown = 1
    解释:在关闭时把热数据 dump 到本地磁盘。
    innodb_ buffer_ pool_ dump_ now = 1
    解释:采用手工方式把热数据 dump 到本地磁盘。
    innodb_ buffer_ pool_ load_ at_ startup = 1
    解释:在启动时把热数据加载到内存。
    innodb_ buffer_ pool_ load_ now = 1
    解释:采用手工方式把热数据加载到内存。

  4. 验证主从数据一致性工具:Maatkit 开源工具包。其中mk-table-checksum 是用来检测 master 和 slave 上的表结构和数据是否一致。mk-table-sync 是在主从数据不一致时,用来修复的。注意,这两个 perl 脚本在运行时都会锁表,表的大小取决于执行的快慢,不要再高峰期间运行,可选择凌晨。

  5. 软件部分性能优化主要涉及到数据库表设计(范式,字段类型,存储引擎),SQL语句与索引,配置文件参数,操作系统,文件系统, MysQL版本以及体系架构。

  6. 设计表结构可以满足第三范式。但三范式最大的问题在于查询时 通常需要 join 很多表,而这会导致查询效率很低。所以有时候基于性能考虑,我们需要有意违反三范式,适度地做冗余,以达到提高查询效率的目的。 

  7. 字段类型的选取:主键强烈建议用 int 型。省空间,提高效率。根据需求选择最小整数类型。建表时时间类型优先选择 timestamp,具有自动更新时间的功能,而且只占用4字节。

  8. 在线更改表结构:pt-online-schema-change

  9. MySQL 的锁具有一下几种形式:
    表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高, 并发度最低。MyISAM引擎属于这种类型。
    行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。InnoDB引擎属于这种类型。
    页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定 粒度界于表锁和行锁之间,并发度一般。 NDB 属于这种类型。
    InnoDB存储引擎是通过给索引上的索引项加锁来实现 的,这就意味着:只有通过索引条件检索数据, InnoDB 才会使用行级锁,否则, InnoDB 将使用表锁。

  10. 两个事务都需要获得对方持有的排他锁才能继续完成事务,这种循环锁等待就是典型的死锁。发生死锁后,InnoDB一般都能自动检测到,它会让一个事务释放锁并回退,另一个事务则获得锁,继续完成事务。死锁是无法避免的,我们可以通过调整业务的逻辑来尽量减少死锁出现的概率。

  11. 尽量不要混合使用多种存储引擎,会带来复杂的问题。

  12. MyISAM 和 InnoDB之间的主要区别有以下几点:
    MyISAM是非事务安全型的,而InnoDB是事务安全型的,也就是ACID事务支持;
    MyISAM锁是表级锁,锁开销最小,而InnoDB支持行级锁定,锁管理开销大,支持更好的并发写操作;·MyISAM支持全文索引,而InnoDB不支持全文索引,但在最新的5.6版本中已提供支持;
    MyISAM相对简单,管理方便,因此在效率上要优于InnoDB,小型应用可以考虑使用MyISAM;
    MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦;
    InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表。

  13. 事务的概念:ACID

  14. 事务的实现:MySQL在进行事务处理的时候使用的是日志先行的方式来保证事务可快速和持久运行的,也就是在写数据前,需要先写日志。当开始一个事务时,会记录该事务的一个LSN日志序列号;当执行事务时,会往InnoDB_Log_Buffer日志缓冲区里插入事务日志(redolog);当事务提交时,会将日志缓冲区里的事务日志刷入磁盘。这个动作是由innodb_flush_log_at_trx_commit这个参数控制的。

  15. 事务的隔离级别。

  16. 联合索引遵循最左侧原则。
    SQL语句中包含or,不会使用索引,可以用union all 来替代。
    like 如果是模糊匹配,则不能使用索引。如果匹配的字符串是以明确的字符串开头的话,是可以的。
    去掉不必要的排序。
    用where子句替换having子句,having子句用于一些集合函数的比较,例如count() 等。
    字段使用函数,不能用到索引。
    致命的无引号会导致全表扫描,不会用到索引。
    主键的长度尽量不要太长;
    固定长度的字符字段应使用char或nchar类型;
    长度不固定的使用varchar或nvarchar。
    对于可有可无的字段应尽量提供一个默认值。

  17. 使用 on duplicate key update 解决主键冲突判断,冲突 update,不冲突 insert。

  18. my.cnf配置文件调优。性能调试工具tuning-primer.sh

  19. mydumper:一款高性能多线程的备份和恢复工具。

  20. oneProxy分库分表。

  21. Lepus 慢日志分析平台。

  22. 读/写分离的基本原理是:让master库处理事务增、删、改操作(INSERT、DELETE、UPDATE),而让slave库处理SELECT查询操作,replication数据库负责把数据变更同步到集群的slave库中。

MySQL 管理之道读书总结的更多相关文章

  1. MySQL管理之道:性能调优、高可用与监控内置脚本

    MySQL管理之道:性能调优.高可用与监控内置脚本 随书附送脚本 keepalive配置文件和脚本开源工具pssh批量管理服务器(python) 下载地址 http://files.cnblogs.c ...

  2. MySQL管理之道:性能调优、高可用与监控》迷你书

    MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎2.充分利用CPU多核处理能力3.提高刷写脏页数量和合并插入数量,改善I/O4. ...

  3. MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

    最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是<MySQL管理之道:性能调优.高可用与监控>. 内容涵盖性能调优(包括sql优化等).备份.高可用,以及读写分离 ...

  4. MySQL管理之道,性能调优,高可用与监控(第二版)pdf下载

    MySQL管理之道,性能调优,高可用与监控(第二版) 书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和新知识的拓展,同时也针对运维人员.DBA等相关工作者会遇到的有代表性的疑难问题给出了 ...

  5. 使用mysql管理meta

    第一部分 安装mysql 第二部分 使用mysql管理meta 安装mysql 安装 yum -y install mysql mysql-server yum方法安装需要使用网络:可以自动续传:对于 ...

  6. 15款最佳的MySQL管理工具和应用程序

    工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...

  7. MYSQL管理之主从同步管理

    原文地址:MYSQL管理之主从同步管理 作者:飞鸿无痕 MYSQL管理之主从同步管理 MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重 ...

  8. mysql 管理工具

    摘自: http://www.chinaz.com/free/2009/0306/68691.shtml MySQL是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购.目前 ...

  9. Android内存管理之道

    相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今 ...

随机推荐

  1. width:100vh与min-height:calc(100vh + 51px)

    vh:相对于视窗的高度,那么vw:则是相对于视窗的高度. “视区”所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及 ...

  2. BZOJ1067 [SCOI2007]降雨量 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1067 题意概括 给定n组整数对(Xi,Yi),当Xi<Xj且Yi>=Yj时,如果对于任 ...

  3. 3.Django| 视图层| 模板层

    1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...

  4. 【Java】 剑指offer(45) 把数组排成最小的数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接 ...

  5. 073 HBASE的读写以及client API

    一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...

  6. Codeblocks 常用快捷键

    编辑部分: Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / Ctrl + Shift + Z ...

  7. Word 如何设置空白页不编码,其他页码连续

    或许 不是最简单的方法: 先假设 空白页前的那部分为“第一部分”,空白页后的那部分为“第二部分”. 首先插入2个“分节符”,  将第一部分.空白页.第二部分分成三节(记得取消每一节的“链接到前一条页眉 ...

  8. laravel5 项目上线后务必将开发环境更改为生产环境

    如果以开发环境上线,出错信息将全通过json暴露出来了,屏蔽方式如下: .env 文件设置如下APP_ENV=productionAPP_DEBUG=false 改完设置后把缓存清理一遍 如果更改后清 ...

  9. python模块中sys.argv[]使用

    一.sys 模块 sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口. 官方的文档参考:https://docs.python.org/ ...

  10. Css实现元素的垂直居中

    前言: 在写CSS的时候让元素在高度固定的容器中垂直居中是很简单的,譬如设置容器的padding或者元素的margin之类的都可以做到:让元素在容器中水平居中也有text-align:center.m ...