mysql性能功能是什么意思_究竟是什么影响了MySQL的性能

1.影响数据库性能的几个方面

服务器硬件

服务器系统

数据库存储引擎的选择(MySQL的插件式存储引擎)

MyISAM:不支持事务,表级锁。

InnoDB:事务级存储引擎,完美支持行级锁,事务ACID特性。

数据库参数配置

数据库结构设计和SQL语句的编写和优化

2.CPU资源和可用内存大小(服务器硬件)

对MySQL性能有影响的硬件资源:CPU资源和可用内存大小

(1)目前版本的MySQL不支持多CPU对同一SQL的并发处理。

(2)内存的大小直接影响了数据库的效率。

(3)MyISAM把索引缓存到内存中,而数据通过操作系统来进行缓存。

(4)InnoDB会同时在内存中缓存数据和索引,从而提高数据库运行效率。

(5)内存虽然是越多越好,但是对性能的影响是有限的,并不能通过增加内存来无限的增加性能。

(6)在读取数据时,先读取缓存,缓存没有再读取硬盘;在写入数据时,也可以将数据写入缓存,然后将多次写入变成一次写入,将数据一次性从缓存写入硬盘。

(7)选择内存时应该选择服务器主板支持的最大内存频率,频率越高速度越快。

3.磁盘的配置和选择

无论如何,数据最终都要在磁盘上实现永久存储,所以IO子系统比内存更加重要。

常用的磁盘IO系统:

使用传统机器硬盘:

特点:最常见,使用最多,价格性对低,存储空间较大,读写速度较慢。

传统机器硬盘读取数据的过程:

移动磁头到磁盘表面上的正确位置

等待磁盘旋转,使的所需的数据在磁头之下

等待磁盘旋转过去,所有所需的数据都被磁头读出

(1,2为访问时间。3为传输时间)

如何选择传统机器硬盘:

存储容量

传输速度

访问时间

主轴转速

物理尺寸

使用RAID增强传统机器硬盘的性能:

概述:RAID是磁盘冗余队列的简称。简单来说RAID的作用就是可以把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术。

常用RAID级别:

RAID 0:最早出现的RAID模式,也称之为数据条带。是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,但是实现成本是最低的。

RAID 1:又称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性。

RAID 5:又称之为分布式奇偶校验磁盘阵列。通过分布式奇偶检验块把数据分散到多个磁盘上,这样如果任何一个盘数据失效,都可以从奇偶校验块中重建。但是如果两块磁盘失效,则整个卷的数据都无法恢复。

RAID 10 :又称分片的镜像。它是对磁盘先做RAID 1之后对两种RAID 1的磁盘再做RAID 0,所以对读写都有良好的性能,相对于RAID 5 重建起来更简单,速度也更快。

使用固态存储SSD和PCIE卡:

特点:相比机械磁盘固态磁盘有更好的随机读写性能,能更好的支持并发,但是也更容易损坏。

使用场景:

适用于存在大量随机I/O的场景

适用于解决单线程负载的I/O瓶颈

使用网络存储NAS和SAN:

含义:NAS和SAN是两种外部文件存储设备加载到服务器上的方法。

区别:

SAN设备通过光纤连接到服务器,设备通过块接口访问,服务器可以将其当做硬盘使用。顺序读写快,随机读写慢。

NAS设备使用网络连接,通过基于文件的协议如NFS或SMB来访问。

网络存储使用的场景:

并不适合MySQL数据库存储数据文件。

适合数据库备份

4.MySQL体系结构

客户端

MySQL服务层:包括连接管理器、查询缓存、查询解析、查询优化器。比如select语句也是在MySQL服务层来实现的。

存储引擎层:存储引擎是针对于表的而不是针对于库的(一个库中的不同表可以使用不同的存储引擎)

5.MySQL常用存储引擎之MyISAM

1.MySQL5.5之前版本默认存储引擎

2.MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成

3.MyISAM的特性:

并发性与所级别

表损坏修复

MyISAM表支持的索引类型(全文索引)

MyISAM表支持数据压缩

4.MyISAM的限制:

版本

如存储大表则要修改MAX_Rows和AVG_ROW_LENGTH

版本>MySQL5.0时默认支持为256TB

5.适用场景:

非事务型应用

只读类应用

空间类应用

6.MySQL常用存储引擎之Innodb

Innodb使用表空间进行 数据存储

参数:innodb_file_per_table

参数为on,则表示独立表空间:tablename.ibd;

参数为OFF,则表示系统表空间:ibdataX.

系统表空间和独立表空间要如何选择:

系统表空间无法简单的收缩文件大小

独立表空间可以通过optimize table命令收缩系统文件

系统表空间会产生IO瓶颈

独立表空间可以同时向多个文件刷新数据

建议:

对Innodb使用独立表空间

把原来存在于系统表空间中的表转移到独立表空间中的方法:

使用mysqldump导出所有数据库表数据

停止MySQL服务,修改参数,并删除Innodb相关文件

重启MySQL服务,重建Innodb系统表空间

重新导入数据

Innodb存储引擎的特性

Innodb是一种事务型存储引擎

完全支持事务的ACID特性

日志类型:Redo Log 和 Undo Log

Redo Log 实现事务的持久性 存储的是已经提交的事务(提交失败或者回滚),顺序写入。

Undo Log 实现的是未提交的事务,随机读写。

Innodb支持行级锁

行级锁可以最大程度的支持并发

行级锁是由存储引擎层实现的

什么是锁

锁的主要作用是管理共享资源的并发访问

锁用于实现事务的隔离性

锁的类型

共享锁(读锁)

独占锁(写锁)

锁的粒度

表级锁

行级锁

阻塞和死锁

什么是阻塞:事务中的兼容性关系,比如一个事务的锁需要等待另一个事务的锁的释放。

什么是死锁:两个或者两个以上的事务,在执行过程中,相互占用了对方等待的资源。数据库系统会自动发现死锁,可以由系统自动处理。处理方式是:将死锁中占用资源最少的事务回滚,能使其他事务进行下去。

Innodb状态检查

提供了一个独特的性能监控工具:show engine innodb status。如果想使用要在两次间隔时间至少30秒。

使用场景

MySQL5.7版本之后开始支持全文索引和空间函数。

7.MySQL常用存储引擎之CSV

文件系统存储特点:

数据以文本方式存储在文件中

.CSV文件存储表内容

.CSM文件存储表的元数据如表状态和数据量

.frm文件存储表结构信息

特点:

以CSV格式进行数据存储

所有列必须都是不能为NULL的

不支持索引,不适合大表,不适合在线处理

可以对数据文件直接编辑,保存文本文件内容

使用场景:

适合作为数据交换的中间表。可以将电子表格(excel)存储为CSV文件,存储到MySQL数据目录下。

8.MySQL常用存储引擎之Archive

文件系统存储特点:

以zlib对表数据进行压缩,磁盘I/O更少

数据存储在ARZ为后缀的文件中

Archive存储引擎的特点:

只支持insert和select操作

只允许在自增ID列上加索引

使用场景:

日志和数据采集类应用

9.MySQL常用存储引擎只Memory

文件系统存储特点:

也称为HEAP存储引擎,所以数据保存在内存中。

功能特点:

支持HASH索引和BTree索引

HASH索引适合等值查找

BTree索引适合范围查找

所有字段都为固定长度 varchar(10)= char(10)

不支持BLOG和TEXT等大字段

Memory存储引擎使用表级锁

最大大小由max_heap_table_size参数决定

容易混淆的概念:

Memory存储引擎表:

临时表:

系统使用临时表:

超过限制使用Myisam临时表

未超限制使用Memory表

create temporary table 建立的临时表:

使用场景:

用于查找或者是映射表,例如邮编和地区的对应表

用于保存数据分析中产生的中间表

用于缓存周期性聚合数据的结果表

10.MySQL常用存储引擎之Federated

特点:

提供了访问远程MySQL服务器上表的方法

本地不存储数据,数据全部放到远程服务器上

本地需要保存表结构和远程服务器的连接信息

如何使用:

默认禁止,启用需要在启动时增加federated参数

mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name

user_name,password:本地连接到远程的用户名和密码

host_name:远程MySQL服务器的IP

port_num:远程MySQL服务器的端口号

db_name:我们所要在本地去映射的服务器的名字

tbl_name:映射的表的名字

使用场景:

偶尔的统计分析及手工查询

11.如何选择正确的存储引擎

参考条件:

事务

备份

崩溃恢复

存储引擎的特有特性

12.MySQL服务器参数

MySQL获取配置信息路径:

命令行参数:mysqld_safe -- datadir=/data/sql_data

配置文件

MySQL配置参数的作用域

全局参数

set global 参数名=参数值;

set @@global.参数名 :=参数值;

会话参数

set【session】参数名 = 参数值;

set@@session.参数名:= 参数值;

内存配置相关参数:

确定可以使用的内存的上限

确定需要为操作系统保留多少内存

如何为缓存池分配内存

Innodb_buffer_pool_size

总内存 - (每个线程所需要的内存*连接数)- 系统保留内存

key_buffer_size(MyISAM)

确定MySQL的每个连接使用的内存

sort_buffer_size

join_buffer_size

read_buffer_size

read_rnd_buffer_size

安全相关配置参数:

expire_logs_days 指定自动清理binlog的天数

max_allowed_packet 控制MySQL可以接受的包的大小

skip_name_resolve 禁用DNS查找

sysdate_is_now 确保sysdate()返回确定性日期

read_only禁止非super权限的用户写权限(保证主从复制的一致性)

skip_slave_start 禁用slave自动恢复

sql_mode 设置MySQL所使用的SQL模式

strict_trans_tables

no_engine_subtitution

no_zero_date

no_zero_in_date

only_full_group_by

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更这些源码资源,以适应各平台技术的最发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值