1.Mysql的物理组成:
(一)日志文件(包括):
1) 错误日志:Error Log
2) 二进制日志:Binary Log
3) 更新日志:update log
4) 查询日志:query log
5)慢查询日志:slow query log(分析慢查询日志的工具程序mysqlslowdump)
6) Innodb的在线redo日志
(二)数据文件(放在默认目录下对应的数据库名文件夹下,包括)
1)“.frm”文件:元数据信息都存放在“.frm”文件中,包括表结构的定义信息,所有数据库引擎都有.
2)“.MYD”文件: 存放MyISAM表的数据,一个表对应一个
3)“.MYI”文件: 主要存放MyISAM表的索引,一个表对应一个.
4)“.ibd”文件和ibdata文件(InnoDb的数据与索引的)
(三)Replication相关文件:
1)master.info文件:记录master端的信息
2)relay log 和relay log index:记录slave端的部分线程信息
3)relay-log.info文件:记录relay log的相关信息
(四)其他文件信息
1)system config file:一般放在"/etc"目录下或者”/windows”目录下
2)pid file:记录进程信息
3)socket file:Unix/Linux下不能通过TCP连接服务器而是直接用Unix socket连接服务器
2. MySQL Server 系统架构:
MySQL Server是一个两层架构:
第一层是Sql Layer包括很多逻辑处理
第二层是存储引擎层:如MyISAM负责对数据的实际操作
MySQL的Sql Layer层子模块:
1)初始化模块:负责服务器程序启动的一些初始操作
2)核心API,提供一些高效的数据操作函数
3)网络交互模块:封装了底层的网络交互操作api相当于一个DAL
4)Client& Server交互协议模块:封装了两端的交互规则,和数据格式
5)用户模块: 主要包括用户的登录连接权限控制和用户的授权管理
6)访问控制模块:控制数据操作的权限性
7)连接管理、连接线程和线程管理:管理连接线程和维护工作者线程
8)Query解析和转发模块:处理和分发各类SQL语句
9)Query Cache模块:维护查询结果的缓冲区机制
10)Query 优化模块:根据统计信息,分析出最优执行计划
11)表变更管理模块:处理表级操作
12)表维护模块:检查表的状态,错误修复,优化等
13)系统状态维护模块:包括处理各种察看系统状态的操作
14)表管理器:维护表对应的物理文件,以及对表锁的管理
15)复制模块:包括Slave端(副服务器)和Master端(主服务器)之间的信息交换
16)储存引擎的接口模块:抽象各种储存引擎级的最底层接口
3. mysql常用工具以及作用:
1)客户端终端mysql:提供命令输入
2)mysqladmin:提供管理MySql的各种功能.如状态检查,统计信息flush,添加删除数据库等
3)mysqldump:备份(数据导出工具)
4)mysqlimport:备份导入工具
5)musqlbinlog:提供管理binlog来管理回复工作
6)musqlcheck:检查,修复,分析和优化MusqlServer中的表
7)myisamchk:检查,修复MyIsam存储引擎的表
8)myisampack:对MyISAM表进行压缩处理,减少占用空间
9)mysqlhotcopy:是用perl脚本来写的,用于备份
4.储存引擎(理解为:建立在文件系统上一套高效的逻辑操作和数据组织方式集合)
MySQL存储引擎概述:
MyIsam存储引擎是MySQL默认的储存引擎。把一个表储存为三个以表名命名的物 理文件,锁级别是表级锁。
MyISAM主要支持三种索引类型:
首先:是B-Tree索引,更类似B plus树所有数据都在叶结点。
其次:R-Tree索引,主要用于存储空间(地方)和数据字段做索引,解 决like低效问题。
最后:是Full-text索引,全文索引,解决like低效问题
Innodb储存引擎简介:
Innodb储存引擎,最重要的特点是支持事务安全。其次是通过对undo信息,实现 对数据多版本读取。再其次是锁定机制的细化,支持行级锁和表级锁。最后的特点是实 现外键引用。
NDB Cluster储存引擎
MERGE储存引擎
Memory储存引擎(支持hash索引和B-Tree索引,数据储存在内存中)
BDB存储引擎
等等
5.结合数据库系统谈网络安全
系统安全相关因素,包括三个方面的:
一.外围网络:主要对包的控制,过滤和对洪泛攻击,和网络嗅探等的预防,可把网络安置到一个安全的局域网中,设置路由器的安全选项来加强防御。
二.主机安全:防止局域网内的恶意入侵者,本机上的不安全用户
三.数据库安全:用户管理模块,监控管理用户登录。数据访问模块过滤和控制用户的非法访问
6.Mysql权限:
分成5层:(优先级由高到低)
1.全局级
2.数据库级
3.表级
4.列级
5.运行级(主要是针对procedure和function这两种对象)
7.数据库备份(用mysqldump来做)
数据库备份分为两种:物理备份和逻辑备份
逻辑备份(按商业逻辑属性存放的)有两种方式:
1.生成Insert语句备份
2.生成特定格式的纯文本备份数据文件备份
(例如:生成以分隔字符将数据分隔记录在文本文件中)
物理备份(按文件组织形式存放的)
目标:在datadir目录下找到对应引擎的数据库(每个引擎都有对应文件夹)
备份MyISAM:备份上面提到的三种格式文件和共有物理文件
其他引擎的物理备份都有各自注意的地方。
8.哪些方面对数据库性能有影响?
1)商业需求对性能起最大的影响
2)系统架构以及实现对性能的影响
1.从架构的角度去权衡Client和Server的交互次数与SQL语句的复杂度(例如, 不同的浏览器获取一个相册的所有照片的次数不一样,方式也不一样,造成的 影响也不一样)
2.怎么组织整个数据系统,主要是哪些数据类型应该放在DB中,不是所有的数据 都适合放在DB中的,例如:二进制多媒体数据,流水列队数据(数量增长大而 且更新频繁的数据),超大文本数据
3.是否合理利用cache层,如何设置cache的作用域以及容量,还有管理策略导 致改变cache的命中率
3)Query语句对系统性能的影响
Query到达 -> Query分析转发模块 -> 查询优化模块 –> 得出查询结果
1.如何找到一个效率很低的Query语句:可以通过查看慢查询日志
2.如何去分析一个Query的效率:写法不一样的SQL语句有不一样的执行 计划,执行计划决定了性能的开销以及最后的一样的结果集。所以可以通过在SQL 语句前加explain来查看该语句的执行计划来分析语句的效率
3.如何分析瓶颈的出处:通过打开(set)并查询(show)profiling功能
4)Schema设计对系统的性能影响
权衡各方面的查询,对经常被访问的数据进行冗余。
5)硬件对系统的性能影响
包括硬件自身的配置以及已经之间的部署
9.MySQL数据库锁定机制
⏹分成三种粒度不同的锁:
行级锁(粒度最小,产生并发竞争的概率最低,维护成本高,死锁出现高)
页级锁(都是中间)
表级锁(粒度最大,差生并发竞争的概率最大,但维护成本最低,死锁出现低)
⏹MyISAM中的锁:表级锁
MyISAM中的锁分两种锁,主要是读锁定和写锁定,每种锁又有两个列队维护,一 共有四个列队。
⏹Innodb中的行级锁:(也有表级锁)
Innodb中的行级锁分成两类:共享锁和排他锁,也有意向共享锁和意向排他锁。
排它锁绝对的排它,意向排它锁兼容所有意向锁,冲突所有非意向锁。
和orcale的行锁定不一样的是:Orcale采用的是物理锁,Innodb采用的是间隙 锁,因此锁定的是一定范围的索引,有时候会造成部分无辜数据不能插入,从而造成 很大威胁。
⏹如何去优化锁:
MyISAM的锁优化:
●尽量减少锁定时间
1.把复杂的Query拆分成几个简单的Query
2.建立足够高效的索引
3.只存放必要的信息
4.利用适当的机会优化表数据文件
●分离能并行的操作
主要针对读写所,利用MyISAM的并发插入(在表尾或表中临时空闲位置)
●合理利用读写优先级
因为不同的操作时间消耗是不一样的,而且造成的后果也不一样,例如 如果读优先,有可能会造成写饥荒状态
Innodb的优化:(省略)
10.Query的优化:针对Query Optimizer(Query语句优化模块)
⏹优化思路:
1)找出要优化的Query(相对来说:高并发低消耗的 Query 对整个系统的影响远比低并发高消耗的 Query 大)
2)优化定位Query的性能瓶颈(可以Explain查看其执行计划,用profile查看Query在各个环节的性能消耗)
3)明确优化方式(确定优化的地方和造成的原因,以及怎么去优化)
⏹语句书写优化原则:
1)永远用小的结果值去驱动大的结果集(客观评估结果值的大小)
2)尽可能在索引中完成排序(实在不行,采用新式硬盘排序方法)
3)在select后面只填自己必须的那些列
4)在where后尽可能的按组合索引的顺序过滤,如果没有组合索引,则按过滤度排放
5)尽可能避免复杂的Join和子查询
⏹合理设计索引
索引的分类:
◆B-Tree索引
适合范围查询,单点查询以及一些高级查询,例如排序查询
◆Hash索引
超高效率的单点查询,适合查找“=”和“<=>”,而且不能组合其他索引
◆Full-Text索引
目前只有三种类型可以采用这个查询:char, vchar, text用于like操作
◆R-Tree索引
主要用来解决空间数据检索的问题。
索引带来的影响:
好处:1.带来查询效率
2.带来排序效率
3.间接通过排序来得到分组效率
缺点:带来维护代价(内存,CPU,插入更新代价)
索引创建原则:
1.频繁的作为查询条件的字段应该创建索引
2.唯一性太差的字段不要创建索引
例如:1W条数据,10种可能因为索引中的排序不是跟实际数据排序一样,太多的随机IO访问可能被产生
3.更新频繁的字段不适合创建索引
4.选择单索引还是组合索引
在必要情况下,如果要创建多个字段的索引,优先创建组合索引,因为Optimizer不会选择两个单独的索引作为执行索引
5.创建组合索引的时候,尽量把过滤性强的放前面
⏹JOIN语句的优化:
1.估计结果集,用小结果驱动打结果,从而减少循环次数
2.尽量使得被驱动的表的列存在索引
3.如果没有索引,设置适合的Join Buffer.
⏹Group By,Order by,distinct优化
Order by优化:
1.尽量使得order by后面字段含有索引
2.没有索引的时候,采用改版后的排序(以前是提取主键,排序,再提取数据,改版后是提取数据,排序,输出)
3.设置排序缓冲区大小sort_buffer_size
Group By优化:
除了松散索引扫描和紧凑索引扫描外,通过冗余表排序目标表数据优化排序 速度
Distinct 优化
与Group by很像,只是在分组后取一个分组的一个值出来,优化方式与 Group By一样
11.Schema(用户?)设计的性能优化
1)适度冗余,尽量用冗余来减少JOIN
2) 大字段垂直分拆(对于其他字段查询频繁的表,大字段不频繁的表,把大字段放在 另外一个的表减少IO加速查询)
3)大表水平分拆(理解为:把一个表里的不同数据通过一个hash中转站放在几个服务 器中)
4)准实时代替实时(有些实时显示,需要不断访问数据库,但又无关重要,可用准实 时来给出体现数据)
5)合适的数据类型(选择最小的类型,最合适比较的类型)
Char与VChar的比较:
●Char是静态长度类型,固定长度,不够的直接补空,更有利于快速定位,适合用于主键索引。
●VChar是动态长度类型,不固定,只取实际数据长度,节省空间,但不利于随机访问定位
6)规范的对象命名
11.MySQL-Server(服务器端程序)性能优化
1)MySQL 安装优化,主要指的是选择配置的组件优化
2)MySQL日志设置优化,日志有时候是必须的,但是日志也会产生大量IO
3)Query Cache优化
4)其他,如网络环境等
12.常用存储引擎优化下载本文