MySQL 管理之道读书总结
最近读了《MySQL 管理之道》一书,做了以下总结,希望对大家有所帮助。在这里非常感谢作者的辛勤付出。
影响 MySQL 性能的因素:
影响 MySQL InnoDB 引擎性能的最主要因素就是磁盘 I/ O,目前磁盘都是机械方式运作的,主要体现在读写前寻找磁道的过程中。因此在单块磁盘遇到了I/ O瓶颈时,可以把磁盘升级为 RAID 或 SSD 固态硬盘来提升性能,
影响MySQL InnoDB 引擎性能的另一个因素就是内存,InnoDB 引擎在设计之初就是考虑用于大型、高负荷、高并发生产环境的,因此内存的大小直接反映了数据库的性能好坏。在 Buffer_ Pool 缓冲池中,涉及的参数为 innodb_ buffer_ pool_ size,它是 InnoDB 引擎中最重要的参数之一, 对 InnoDB 的性能有决定性的影响。默认的设置只有8MB,将其设置为60%~ 80%的内存。运维工作中常用的性能分析工具:
vmstat, sar, iostat, netstat,free, ps, top, mpstat.
推荐 Linux 服务器性能监控工具:dstat。collectl 以及淘宝开源监控项目Tsar等。在 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
解释:采用手工方式把热数据加载到内存。验证主从数据一致性工具:Maatkit 开源工具包。其中mk-table-checksum 是用来检测 master 和 slave 上的表结构和数据是否一致。mk-table-sync 是在主从数据不一致时,用来修复的。注意,这两个 perl 脚本在运行时都会锁表,表的大小取决于执行的快慢,不要再高峰期间运行,可选择凌晨。
软件部分性能优化主要涉及到数据库表设计(范式,字段类型,存储引擎),SQL语句与索引,配置文件参数,操作系统,文件系统, MysQL版本以及体系架构。
设计表结构可以满足第三范式。但三范式最大的问题在于查询时 通常需要 join 很多表,而这会导致查询效率很低。所以有时候基于性能考虑,我们需要有意违反三范式,适度地做冗余,以达到提高查询效率的目的。
字段类型的选取:主键强烈建议用 int 型。省空间,提高效率。根据需求选择最小整数类型。建表时时间类型优先选择 timestamp,具有自动更新时间的功能,而且只占用4字节。
在线更改表结构:pt-online-schema-change
MySQL 的锁具有一下几种形式:
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高, 并发度最低。MyISAM引擎属于这种类型。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。InnoDB引擎属于这种类型。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定 粒度界于表锁和行锁之间,并发度一般。 NDB 属于这种类型。
InnoDB存储引擎是通过给索引上的索引项加锁来实现 的,这就意味着:只有通过索引条件检索数据, InnoDB 才会使用行级锁,否则, InnoDB 将使用表锁。两个事务都需要获得对方持有的排他锁才能继续完成事务,这种循环锁等待就是典型的死锁。发生死锁后,InnoDB一般都能自动检测到,它会让一个事务释放锁并回退,另一个事务则获得锁,继续完成事务。死锁是无法避免的,我们可以通过调整业务的逻辑来尽量减少死锁出现的概率。
尽量不要混合使用多种存储引擎,会带来复杂的问题。
MyISAM 和 InnoDB之间的主要区别有以下几点:
MyISAM是非事务安全型的,而InnoDB是事务安全型的,也就是ACID事务支持;
MyISAM锁是表级锁,锁开销最小,而InnoDB支持行级锁定,锁管理开销大,支持更好的并发写操作;·MyISAM支持全文索引,而InnoDB不支持全文索引,但在最新的5.6版本中已提供支持;
MyISAM相对简单,管理方便,因此在效率上要优于InnoDB,小型应用可以考虑使用MyISAM;
MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦;
InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表。事务的概念:ACID
事务的实现:MySQL在进行事务处理的时候使用的是日志先行的方式来保证事务可快速和持久运行的,也就是在写数据前,需要先写日志。当开始一个事务时,会记录该事务的一个LSN日志序列号;当执行事务时,会往InnoDB_Log_Buffer日志缓冲区里插入事务日志(redolog);当事务提交时,会将日志缓冲区里的事务日志刷入磁盘。这个动作是由innodb_flush_log_at_trx_commit这个参数控制的。
事务的隔离级别。
联合索引遵循最左侧原则。
SQL语句中包含or,不会使用索引,可以用union all 来替代。
like 如果是模糊匹配,则不能使用索引。如果匹配的字符串是以明确的字符串开头的话,是可以的。
去掉不必要的排序。
用where子句替换having子句,having子句用于一些集合函数的比较,例如count() 等。
字段使用函数,不能用到索引。
致命的无引号会导致全表扫描,不会用到索引。
主键的长度尽量不要太长;
固定长度的字符字段应使用char或nchar类型;
长度不固定的使用varchar或nvarchar。
对于可有可无的字段应尽量提供一个默认值。使用 on duplicate key update 解决主键冲突判断,冲突 update,不冲突 insert。
my.cnf配置文件调优。性能调试工具tuning-primer.sh
mydumper:一款高性能多线程的备份和恢复工具。
oneProxy分库分表。
Lepus 慢日志分析平台。
读/写分离的基本原理是:让master库处理事务增、删、改操作(INSERT、DELETE、UPDATE),而让slave库处理SELECT查询操作,replication数据库负责把数据变更同步到集群的slave库中。
转载于:https://www.cnblogs.com/IcanFixIt/p/9300921.html
MySQL 管理之道读书总结相关推荐
- mysql mha管理平台_Jeson聊Mysql管理之道-MHA最全搭建步骤
MHA是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一致性. 一.常见部署架构模式 模式一.拿一台mysq ...
- 《MySQL管理之道:性能调优、高可用与监控》china-pub首发!
预售网址:http://product.china-pub.com/3769079 一年多的辛苦终于出版了,感谢为我写序的朋友们!希望各位读者多多支持,如有任何问题,请直接联系我. 本文转自hcymy ...
- mysql性能监控 调优_MySQL管理之道:性能调优、高可用与监控(第2版)
MySQL管理之道:性能调优.高可用与监控(第2版) 作者:贺春旸 著 出版日期:2016年08月 文件大小:71.36M 支持设备: ¥50.00在线试读 适用客户端: 言商书局 iPad/iPho ...
- mysql性能优化与高可用_MySQL管理之道:性能调优、高可用与监控》迷你书
MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎 2.充分利用CPU多核处理能力 3.提高刷写脏页数量和合并插入数量,改善I/O ...
- K8s 应用管理之道 - 有状态服务
背景 用户通过 Deployment.ReplicationController 可以方便地在 kubernetes 中部署一套高可用.可扩展的分布式无状态服务.这类应用不在本地存储数据,通过简单的负 ...
- 哲理故事与管理之道(11)-让自己成为领袖和榜样
注: 哲理故事与管理之道-系列文章是从本人 Iteye博客中移植过来.后续会直接在此更新 http://jlins.iteye.com/ 故事一.做好榜样 春秋晋国有一名叫李离的狱官,他在 ...
- 数据之道读书笔记-03差异化的企业数据分类管理框架
数据之道读书笔记-03差异化的企业数据分类管理框架 不同的企业或组织基于不同的目的,可以从多个角度对数据进行分类,如结构化数据和非结构化数据.内部数据和外部数据.原始数据和衍生数据.明细数据和汇总数据 ...
- 数据之道读书笔记-06面向“自助消费”的数据服务建设
数据之道读书笔记-06面向"自助消费"的数据服务建设 数据底座建设的目标是更好地支撑数据消费,在完成数据的汇聚.整合.联接之后,还需要在供应侧确保用户更便捷.更安全地获取数据.一方 ...
- mysql数据库是一个软件呐_15款好用的mysql管理软件
1. Induction Induction是一款用于理解数据关系的开源管理工具,它可用来探索行/列,运行查询和数据可视化等方面.该工具支持多种数据库,包括PostgreSQL,MySQL,SQLit ...
- Android内存管理之道
2019独角兽企业重金招聘Python工程师标准>>> 相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门 ...
最新文章
- 渐进式web应用程序_渐进式Web应用程序简介
- 使用MyEclipse开发第一个Web程序
- 网络营销助力之下国内可穿戴设备市场进一步打开迎来发展机遇
- Ceph分布式存储高性能设计
- 向git库提交代码出现”There are no staged files怎么办?
- create-react-app 构建的项目使用 mobx (说到底就是为了使用装饰器语法对 babel 做些配置...
- java test报错_Java 单元测试报错
- java内存模型 创建类_JVM内存模型及String对象内存分配
- 常见Web技术之间的关系,你知道多少?
- 使用PyPDF2库对pdf文件进行指定页面删除操作
- lodop直接打印怎么去除水印_手机视频有水印怎么办?一招教你轻松去除,不学真是可惜了...
- Csrf漏洞概述及其原理
- 查询数据进行排名,一样的并列
- FCKEditor v2.6.3 最新版-ASP.NET 演示程序
- CSS3---3.相对父元素的伪类
- 从零开始学习编程,会很难学吗?新手想快速掌握应该怎么学?
- maven中使用MySQL
- 吴裕雄--天生自然 诗经:望海潮·东南形胜
- stm32项目实战ST7735环境质量检测仪
- 明清时期华北宗族的发展——以山西洪洞刘氏为例