MySQL基础,性能优化和架构笔记
2015-03-25 17:56
549 查看
1 MySQL主要适用场景:WEB网站,日志记录系统,数据仓库系统,嵌入式系统
2 MySQL物理文件
2.1日志文件
--错误日志(Error Log),二进制日志(Binary Log&Binary Log Index),更新日志(update log),查询日志(query log),慢查询日志(slow query log),Innodb在线redo日志(innodb redo log)
2.2 数据文件
--frm文件(表相关的元数据信息,表结构定义信息,所有存储引擎都有)
--MYD文件,MyISAM存储引擎,存放数据
--MYI文件,MyISAM存储引擎,存放索引相关
--IDB文件,Innodb存储引擎,独享表空间存储方式
--IDBDATA文件,Innodb存储引擎,共享存储表存储方式
2.3 Replication相关文件
--master.info:Master主机地址,连接用户,密码
--relay log和relay log index:slave I/O线程从Master读取到Binary Log信息,SQL线程读取,解析,执行
--relay-log.info
2.4 其他文件
--system config file
--pid file
--socket file
3 MySQL逻辑模块
SQL Layer和Storage Engine Layer
SQL Layer包含模块:初始化模块,核心API,网络交互模块,Client&Server交互协议模块,用户模块,访问控制模块,连接管理、连接线程、线程管理模块,Query解析和转发模块,Query Cache模块,Query优化器模块,表变更管理模块,表维护模块,系统状态管理模块,表管理器,日志记录模块,复制模块,存储引擎接口模块
4 MyISAM支持三种类型的索引
B+Tree索引:键一定出现叶结点上,并且有可能在非叶结点上重复出现
R-Tree索引:不常用
Full-text索引:全文索引,解决like查询低效问题
5 MyISAM数据存放格式:静态固定长度,动态可变长度,压缩
6 Innodb特点
-支持事务
-数据多版本读取
-锁定机制改进:实现行销,通过索引来完成
-实现外键:数据的完整性
6 Innodb物理结构
-数据文件(表数据和索引数据)
-日志文件
7 数据库系统三道防线
-外围网络
-主机
-数据库
8 权限信息存储
mysql.user mysql.db mysql.host mysql.table_priv mysql.column_priv
9 权限级别
-Global Level
-Database Level
-Table Level
-Column Level
-Routine Level: execute和alter两种,针对procedure(存储过程)和function两种对象
10 procedure和function区别
function有返回值,而procedure无返回值
11 MySQL备件与恢复
逻辑备份
物理备份
12 MySQL Server性能影响
-商业需求
-系统架构
-Query语句
-Schema设计
-硬件环境
13 MySQL锁定机制
行级锁定
表级锁定
页级锁定
concurrent insert:只能插入到数据文件的最尾部
14 表级锁定
-读锁定
-写锁定
四个队列
-Current read-lock queue(lock->read)
-Pending read-lock queue(lock->read_wait)
-Current write-lock queue(lock->write)
-Pending write-lock queue(lock->write_wait)
15 行级锁定
分为两种:共享锁和排他锁
为了让行级锁定和表级锁定共存,同时使用意向锁(表级锁定),有意向共享锁和意向排他锁
如果共享锁正锁定资源,可再加共享锁,不能加排他锁
如果排他锁正锁定资源,可加多个意向共享锁,但只能加一个意向排他锁
Oracle锁定数据是通过锁定某行记录所在的物理block上的事务槽的表级锁定信息。
Innodb锁定是通过在指向数据记录的第一个索引键之前和最后一个索引键之后的空域空间上标记锁定信息实现。
即间隙锁(NEXT-KEY locking)
-锁定范围键值,不存在的键值也会被锁定
-无法利用索引,会使用表级锁,而不是行级锁
16 Innodb通过锁定超时来检测死锁。回滚事务比较小的
-尽可能按照相同的访问顺序来访问
-同一个事务,一次锁定所需要的所有资源
-容易产生死锁的业务部分,升级为表锁
17 MyISAM表锁优化建议
-缩短锁定时间:把复杂Query分拆成几个小Query分布进行;建立高效索引;只存放必要信息
-分离并发插入:利用Concurrent Insert
-合理利用读写优先级:默认为写优先级大于读优先级
18 Innodb行锁优化
-尽可能让所有数据检索通过索引完成,避免无法通过索引键加锁而升级为表级锁定
-在索引键上加锁尽可能准确,缩小锁定范围
-减少基于范围的数据检索过滤条件,减少间隙锁负面影响
-控制事务大小,减少锁定资源量和锁定时间
-在业务允许情况下,尽量使用较低级别的事务隔离
19 Query Optimizer
通过计算分析系统中收集的各种统计信息,为客户端请求的Query给出它认为最优的执行计划(即最优的数据检索方式)
20 Query优化
-从Explain入手
-多使用profile
-用小结果集驱动大的结果集
-避免复杂的Join和子查询
21 MySQL扩展
Scale out 横向扩展,向外扩展
Scale up 纵向扩展,向上扩展
22 MySQL Replication
异步复制过程。
slave端SQL线程和IO线程
master端IO线程
23 复制级别
-Row Level(基于记录)
Binary Log记录每一行数据被修改的形成,再对Slave端对相同的数据进行修改
优点:不记录执行SQL语句的上下文相关信息
缺点:可能会产生大量的日志内容
-Statement Level(基于语句)
修改数据的Query都会记录到Binary Log
优点:减少Binary Log日志量
缺点:需要记录执行SQL上下文信息。last_insert_id
24 Replication常用架构
-常规手复制架构(Master-Slaves)
-Dual Master提制架构(Master-Master)
避免常规维护操作需要的停机,重新搭建Replication环境的操作。一端开启写服务,另外一端只提供读服务
-级联复制架构(Master-Slaves-Slaves)
用于读压力特别大
-Dual Master与级联复制结合架构(Master-Master-Slaves)
25 复制方式
-异步复制
从Master到Slave拷贝有一个延时,由网络带宽、资源可用性和系统负载
-同步复制
同一时候提交到一台或多台机器(两阶段提交),保持一致性,但性能下降
-半同步复制
在一定程度上保证提交的事务已经传给至少一个备库,但不能确保已经在备库上执行
每一个事务需要等待务库接收日志后才返回给客户端
备库Crash,主库等待超时,关闭半同步,降级为普通异步复制
26 数据切分
垂直(纵向)切分:按照不同的表切分到不同的数据库
水平(横向)切分:数据的逻辑关系,同一个表按照某种条件拆分到多台数据库
27 垂直切分
优点:
拆分简单
模块清晰
维护方便
缺点:
部分表关联无法在数据库级别完成,需要在程序中完成
事务处理相对复杂
28 水平切分
优点:
表关联基本能在数据库全部完成
事务处理相对简单
缺点:
切分复杂
维护难
2 MySQL物理文件
2.1日志文件
--错误日志(Error Log),二进制日志(Binary Log&Binary Log Index),更新日志(update log),查询日志(query log),慢查询日志(slow query log),Innodb在线redo日志(innodb redo log)
2.2 数据文件
--frm文件(表相关的元数据信息,表结构定义信息,所有存储引擎都有)
--MYD文件,MyISAM存储引擎,存放数据
--MYI文件,MyISAM存储引擎,存放索引相关
--IDB文件,Innodb存储引擎,独享表空间存储方式
--IDBDATA文件,Innodb存储引擎,共享存储表存储方式
2.3 Replication相关文件
--master.info:Master主机地址,连接用户,密码
--relay log和relay log index:slave I/O线程从Master读取到Binary Log信息,SQL线程读取,解析,执行
--relay-log.info
2.4 其他文件
--system config file
--pid file
--socket file
3 MySQL逻辑模块
SQL Layer和Storage Engine Layer
SQL Layer包含模块:初始化模块,核心API,网络交互模块,Client&Server交互协议模块,用户模块,访问控制模块,连接管理、连接线程、线程管理模块,Query解析和转发模块,Query Cache模块,Query优化器模块,表变更管理模块,表维护模块,系统状态管理模块,表管理器,日志记录模块,复制模块,存储引擎接口模块
4 MyISAM支持三种类型的索引
B+Tree索引:键一定出现叶结点上,并且有可能在非叶结点上重复出现
R-Tree索引:不常用
Full-text索引:全文索引,解决like查询低效问题
5 MyISAM数据存放格式:静态固定长度,动态可变长度,压缩
6 Innodb特点
-支持事务
-数据多版本读取
-锁定机制改进:实现行销,通过索引来完成
-实现外键:数据的完整性
6 Innodb物理结构
-数据文件(表数据和索引数据)
-日志文件
7 数据库系统三道防线
-外围网络
-主机
-数据库
8 权限信息存储
mysql.user mysql.db mysql.host mysql.table_priv mysql.column_priv
9 权限级别
-Global Level
-Database Level
-Table Level
-Column Level
-Routine Level: execute和alter两种,针对procedure(存储过程)和function两种对象
10 procedure和function区别
function有返回值,而procedure无返回值
11 MySQL备件与恢复
逻辑备份
物理备份
12 MySQL Server性能影响
-商业需求
-系统架构
-Query语句
-Schema设计
-硬件环境
13 MySQL锁定机制
行级锁定
表级锁定
页级锁定
concurrent insert:只能插入到数据文件的最尾部
14 表级锁定
-读锁定
-写锁定
四个队列
-Current read-lock queue(lock->read)
-Pending read-lock queue(lock->read_wait)
-Current write-lock queue(lock->write)
-Pending write-lock queue(lock->write_wait)
15 行级锁定
分为两种:共享锁和排他锁
为了让行级锁定和表级锁定共存,同时使用意向锁(表级锁定),有意向共享锁和意向排他锁
如果共享锁正锁定资源,可再加共享锁,不能加排他锁
如果排他锁正锁定资源,可加多个意向共享锁,但只能加一个意向排他锁
Oracle锁定数据是通过锁定某行记录所在的物理block上的事务槽的表级锁定信息。
Innodb锁定是通过在指向数据记录的第一个索引键之前和最后一个索引键之后的空域空间上标记锁定信息实现。
即间隙锁(NEXT-KEY locking)
-锁定范围键值,不存在的键值也会被锁定
-无法利用索引,会使用表级锁,而不是行级锁
16 Innodb通过锁定超时来检测死锁。回滚事务比较小的
-尽可能按照相同的访问顺序来访问
-同一个事务,一次锁定所需要的所有资源
-容易产生死锁的业务部分,升级为表锁
17 MyISAM表锁优化建议
-缩短锁定时间:把复杂Query分拆成几个小Query分布进行;建立高效索引;只存放必要信息
-分离并发插入:利用Concurrent Insert
-合理利用读写优先级:默认为写优先级大于读优先级
18 Innodb行锁优化
-尽可能让所有数据检索通过索引完成,避免无法通过索引键加锁而升级为表级锁定
-在索引键上加锁尽可能准确,缩小锁定范围
-减少基于范围的数据检索过滤条件,减少间隙锁负面影响
-控制事务大小,减少锁定资源量和锁定时间
-在业务允许情况下,尽量使用较低级别的事务隔离
19 Query Optimizer
通过计算分析系统中收集的各种统计信息,为客户端请求的Query给出它认为最优的执行计划(即最优的数据检索方式)
20 Query优化
-从Explain入手
-多使用profile
-用小结果集驱动大的结果集
-避免复杂的Join和子查询
21 MySQL扩展
Scale out 横向扩展,向外扩展
Scale up 纵向扩展,向上扩展
22 MySQL Replication
异步复制过程。
slave端SQL线程和IO线程
master端IO线程
23 复制级别
-Row Level(基于记录)
Binary Log记录每一行数据被修改的形成,再对Slave端对相同的数据进行修改
优点:不记录执行SQL语句的上下文相关信息
缺点:可能会产生大量的日志内容
-Statement Level(基于语句)
修改数据的Query都会记录到Binary Log
优点:减少Binary Log日志量
缺点:需要记录执行SQL上下文信息。last_insert_id
24 Replication常用架构
-常规手复制架构(Master-Slaves)
-Dual Master提制架构(Master-Master)
避免常规维护操作需要的停机,重新搭建Replication环境的操作。一端开启写服务,另外一端只提供读服务
-级联复制架构(Master-Slaves-Slaves)
用于读压力特别大
-Dual Master与级联复制结合架构(Master-Master-Slaves)
25 复制方式
-异步复制
从Master到Slave拷贝有一个延时,由网络带宽、资源可用性和系统负载
-同步复制
同一时候提交到一台或多台机器(两阶段提交),保持一致性,但性能下降
-半同步复制
在一定程度上保证提交的事务已经传给至少一个备库,但不能确保已经在备库上执行
每一个事务需要等待务库接收日志后才返回给客户端
备库Crash,主库等待超时,关闭半同步,降级为普通异步复制
26 数据切分
垂直(纵向)切分:按照不同的表切分到不同的数据库
水平(横向)切分:数据的逻辑关系,同一个表按照某种条件拆分到多台数据库
27 垂直切分
优点:
拆分简单
模块清晰
维护方便
缺点:
部分表关联无法在数据库级别完成,需要在程序中完成
事务处理相对复杂
28 水平切分
优点:
表关联基本能在数据库全部完成
事务处理相对简单
缺点:
切分复杂
维护难
相关文章推荐
- PHP特级视频教程 笔记心得 第十六集 mysql调优,mysql优化 MySQL基础操作(一)
- MySQL学习笔记 8 -性能优化
- MySQL学习笔记——MySQL性能优化方法简述
- MYSQL性能优化之Mysql数据库高可用架构设计之MMM架构设计(上)
- mysql性能优化学习笔记-参数介绍及优化建议
- PHP特级视频教程 笔记心得 第十七集 mysql调优,mysql优化 MySQL基础操作(一)
- MySQL基础、管理、高级、用法、架构、优化好文章收集
- MySQL性能优化笔记整理
- 《MySQL技术精粹:架构、高级特性、性能优化与集群实战》目录
- MYSQL性能优化之Mysql数据库高可用架构设计之日志复制
- MySQL性能优化基础
- mysql性能优化学习笔记(4)索引的优化
- [笔记]MySql性能优化
- mysql性能优化学习笔记
- OracleDBA+性能优化8日游笔记——第二天(二)之Oracle体系架构详解
- MySQL 基础及性能优化工具
- 【MVC+MySQL+EntityFramework】查询性能优化笔记
- mysql性能优化学习笔记(3)常见sql语句优化
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
- mysql性能优化学习笔记-存储引擎