数据库性能优化,MySQL 优化

4747 1017 2023-06-09

本文讲述了数据库性能优化,MySQL 优化

对于性能优化这一个词,一直以来都是在开发过程中占据比较重要的地位,一般我们都是不仅仅需要考虑到这个程序如何开发,还要思考怎么去优化这个程序,比如运行速度、并发处理、内存优化等,那么我们今天就数据库这一块的并发处理来做个简单讲解。

一般项目比较小的情况下,我们是一般不需要考虑数据库这块的并发问题的,当然我们也得考虑服务器宕机的情况,这个就不做过多的解释。但是当我们的项目比较大的时候,我们就得考虑数据库能不能处理高并发的现象了,那么我们数据库一般是怎么处理高并发的情况呢?首先我们可以做一个数据库的主从同步,也就是说我们可以用多台数据库形成一个数据库集群来解决高并发的情况。

主从同步介绍

那么问题来了,什么叫做主从同步?

1. 在多态数据服务器中,分为主服务器和从服务器。一台主服务器对应多态从服务器。

2. 主服务器只负责写入数据,从服务器只负责同步主服务器的数据,并让外部程序读取数据。

3. 主服务器写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步

4. 应用程序可以随机读取某一台从服务器的数据这样就可以分摊读取数据的压力,从而解决高并发的读取数据问题。

5. 当从服务器不能工作时,整个系统将不受影响;当主服务器不能工作时,可以方便的从从服务器选取一台来当主服务器,因为主从服务器之间随时都是有交互的,通过多台服务器之间的连接判断,就可以判断哪台服务器是否宕机的情况,同时也解决了服务器宕机的情况。

主从同步的优点

1. 提高读写性能:设置了主从不同之后,数据写入和读取是在不同的服务器上进行的,而且可以通过增加从服务器来提高数据库的读取性能。

2. 提高数据安全:因为数据已复制到从服务器,可以在从服务器上备份而不破坏主服务器响应数据。

主从同步的工作原理

image.png

MySQL的主从同步是一个异步的复制过程,数据将从一个MySQL数据库(这里我们称之为Master)复制到另一个MySQL数据库(这里我们称之为Slave),在Master和Slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和IO线程)在Slave端,另一个线程(I/O线程)则在Master端。

要实现MySQL的主从同步,首先必须打开Master端的Binary Log记录功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取Binary Log日志,然后再在Slave上以相同顺序获取Binary Log日志中记录的各种SQL操作,从而将这些数据保存下来。

主从同步的操作流程

1. 在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。

2. 此时,Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行Binary Log日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送Binary Log日志内容。

3. Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定Binary Log日志文件指定位置之后的Binary Log日志信息,然后返回给Slave端的IO线程。返回的信息中除了Binary Log日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了Binary Log中的下一个指定更新位置。

4. 当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将Binary Log日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(http://Mysql-relay-bin.xxx)的最末端,并将新的Binary Log文件名和位置记录到master-info文件中,以便下一次读取master端新Binary Log日志时能告诉Master服务器从新Binary Log日志的指定文件及位置开始读取新的Binary Log日志内容。

5. Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在http://relay-log.info中记录当前应用中继日志的文件名和位置点。

主从同步环境搭建

我们准备的是多实例,一台服务器开启三个不同服务端口

image.png

主库开启Binary Log功能

image.png

设置server-id,此处ID不可以相同否则最后出现IO错误

image.png

主库需要授权slave访问的用户

image.png

因为从库现在还没有数据,或者数据不统一我们需要导入数据
锁表、查看Binary Log文件及位置点,主库导出全备,需要锁表

image.png

备份

image.png

解锁

image.png

从库操作

确保server-id不同
把主库的备份导入到从库

image.png

查找位置点,配置http://master.info

image.png

Mysql从库连接主库的配置信息如下

image.png

开启从库复制开关

image.png

查看检查结果:在主库创建目录查看从库是否存在即可

MySQL 优化

一直对sql 优化的方面的知识不太熟悉,百度学习了一下

1,数据库优化的好处:

(1)随着应用程序的运行,数据库中的数据会越来越多,处理的时间会相应的变慢,使用 sq优化Q能有效地解决

(2) 数据是存放在磁盘上的,读写的速度无法和内存Q 相比。所以要使用sal优化。

3)系统的吞叶量瓶预往往出现在数据库的访问速度上,使用sal优化提高数据库的访问速度.

2,如何的优化

(1) 在设计数据库时: 对数据库表,字段的设计,存储的引擎.

(2) 利用好MYSQL自身提供的功能,索引。

(3) 横向扩展: MySQL集群,负载均衡,读写分离

(4) sql 语句的优化。

3,在进行宁段设计时尽量使用整形表示宁符串;涉及到金额时会对数据的精度要求较高,小数的运算和存储存在精度问题(不能将所有小数转换成二进制)

4,尽可能使用not null

非nul 字段的处理要比null字段的处理高效些,且不需要在判断是否为nul。nul 在mysq中不好处理,存储需要额外空间,运算也需要特殊的运算符。

5,字段注释要完整,见名知意.

6,单表字段不宜过多

7,关联表的设计

外键 FOREIGN KEY 只能实现一对一或一对多的映射

对多:使用外键

多对多:单独新建一张表将多对多拆分成两个一对多

对一: 一对一的表通常便用相同的主键或者增加一个外键字段

8,数据库的二范式

第一范式:每个列都不可以再拆分。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分.

第三范式,在第二范式的基础上,非主键列只依赖于主键,不能依赖于其他非主键.

上文就是小编为大家整理的数据库性能优化,MySQL 优化。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:数据库的故障及可恢复模型,数据库常见四种故障
下一篇:数据库三种故障及其恢复手段,医院数据库系统出现故障问题应该如何解决?
相关文章