视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySql调优
2025-09-22 17:37:20 责编:小OO
文档
数据库架构与调优

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.常用存储引擎优化下载本文

显示全文
专题