性能分析-数据库与磁盘知识

数据库

数据库,其实是数据库管理系统dbms。

数据库管理系统,

常见:

  • 关系型数据库: mysql、pg、
    • 库的表,表与表之间有关联关系; 表二维表
    • 统一标准的SQL(不局限于CRUD)
  • 非关系型数据库:redis、mongodb
    • 表之间没有强关联,表中数据,也没有统一的结构。
    • redis: key-value
    • mongodb:bson(类似json)文档
    • 没有统一标准sql,不同的非关系型数据,sql语句不一样
  • 时序数据:
    • Prometheus 以时间序列来存储数据

数据库管理系统,管理数据。

数据:一切可以用计算书来存储都是数据。

数据对于一个项目是非常非常重要的,所以对数据的保存、数据的稳定性、数据的安全性要求是比较 高的。

如果数据存在磁盘上,希望磁盘的稳定性就要求比较高。----所以,数据库的数据存的磁盘,一般选择机械硬盘。

关系型数据库:库和表 库是数据的一个整体。

mysql数据库,库名称,就是一个文件夹名称。一个库就是一个文件夹。 表用二维表的方式栅格化数据,进行存储。

select语言的性能分析是的重点:项目中获取数据频率远远高于对数据变更的操作。

获取数据,从磁盘上读取你想要的数据。从一张表中来获取想要数据。

mysql数据库,表在磁盘上,就是文件。

我们从表中获取一条数据的过程,找到文件夹(库),找到文件(表),打开磁盘的文件(读文件),跳转到对应的位置(表中一行) 学习数据库的时候还需要有磁盘知识。

数据库安装(linux)

数据库安装: wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm yum install -y mysql80-community-release-el7-7.noarch.rpm

如果此时 直接安装安装的就是mysql8.0.x版本,数据库安装要安装 mysql5.7.x版本

目前企业中用的mysql数据库的版本,主要是:mysql5.7.x版本或mysql8.x版本

mysql数据库在5.7的版本开始,有非常大的变化。

从mysql的官网上下载,都是mysql8.x版本。mysql5.7.37之前的版本,版本的有效时间已经过期,现在 安装的mysql版本是5.7.37以后。

yum repolist all | grep mysql 查看到当前系统mysql的源支持的mysql版本。现在是mysql8的版本

vim /etc/yum.repos.d/mysql-community.repo
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch
enabled=1 # 由0改成了1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch
enabled=0 # 由1改成了0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# 安装mysql5.7
yum install mysql-community-server -y

这样就能安装到最新的mysql5.7.x版本。

如果你要用mysql的rpm包安装,安装的顺序

mysql-community-common-5.7.41-1.el7.x86_64
1/6
mysql-community-libs-5.7.41-1.el7.x86_64
2/6
mysql-community-client-5.7.41-1.el7.x86_64
3/6
mysql-community-server-5.7.41-1.el7.x86_64
4/6
mysql-community-libs-compat-5.7.41-1.el7.x86_64

systemctl restart mysqld
systemctl enable mysqld

这种方式安装的mysql数据库的配置文件: /etc/my.cnf

不同方式安装mysql数据库,配置文件的路径是不一样的。所以不要死记。

调整密码等级 0弱密码 1 一般 2强密码 validate_password_policy 是否开启校验

vim /etc/my.cnf
# 添加validate_password_policy配置 0(LOW),1(MEDIUM),2(STRONG)
validate_password_policy=0
# 关闭密码策略
validate_password = off

修改了mysql的配置文件,要重启,才生效。

此时,不知道root密码的,找到root命令

从mysql的日志获取随机生成的root密码: grep "password" /var/log/mysqld.log

登录数据库: mysql -uroot -p 回车,输入密码,

修改密码:

alter user 'root'@'localhost' identified by '新密码';
# 开启远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的新密码' WITH GRANT
OPTION;
FLUSH PRIVILEGES;
exit;

数据库,默认端口:3306,

数据库的运行日志:/var/log/mysqld.log

数据库的配置文件:/etc/my.cnf

数据库数据文件:/var/lib/mysql

磁盘

  • 机械硬盘
    • 光盘----可以反复擦写
    • 机械臂
    • 转子:现在的机械硬盘,转子的转速一般在7200r/m 14000r/m。 转速越高,从磁盘读数据 的速度,就会越快。但是因为是机械运动,不可能无限快,转速快,会发热。
  • 固态硬盘
  • 光盘:
    • 先理解为一张白纸
    • 光盘的格式化。先分区,然后格式化。
      • 硬盘做分区,是可以提升数据存取速度。
      • 做分区的时候,就会选择格式化。NTFS、ext4
        • 磁盘的格式化,可以提高磁盘利用率,获取数据的时候,速度也更快

扇区:磁盘上的一段弧形

块:相邻的多个扇区构成块。 操作系统与磁盘进行数据交换的单位。

页page:操作系统与内存进行数据交换的单位。一页是由多个块构成。

CPU的速度是最快的,内存的速度居中,磁盘的速度是最慢的。为了配合cpu的速度,需要缓存。

  • 缓存:
    • buff缓冲区:由磁盘虚拟出来的,加快从磁盘读数据的速度。
    • cache缓存:内存中一部分和cpu寄存器

用虚拟化参数都硬盘,都是机械硬盘,在linux中,标识机械硬盘 sd,后面跟一个字母,代表第几个硬盘 (sda第1块机械硬盘),再跟一个数字,数字代表硬盘的第几个分区(sda2第1个硬盘的第2个分区) sdb2

fdsk -l 可以看硬盘的信息,但是fdisk命令,谨慎使用(有可能符导致磁盘格式化)。

RAID磁盘矩阵:做这个,也是为了提升磁盘的性能,也可以做磁盘数据的备份。 矩阵:就会要用到多个磁盘。

RAID0:数据分片存在2块磁盘,读写速度提升2倍,主要用于SWAP\TMP,但是数据不冗余,数据恢复难

RAID1:相同数据冗余存入2块磁盘,写速度不变,读速度提升2倍,数据冗余1份,主要用于数据备份, 但磁盘利用率低

RAID5:数据分片和校验码混合存储3份,读写速度提升2倍,主要在要求高速时用,可以用于数据还原 RAID10:2块磁盘1组先做RAID1,多组RAID1,再做RAID0。读写速度N倍 n为组数

读磁盘

dd 命令

命令: dd if=/dev/sda of=/dev/null bs=20MB count=100

if 输出文件 /dev/sda 读整个磁盘

of 输出文件 /dev/null 回收站,是一个伪设备,不会有磁盘的写操作

bs 每次操作文件的大小

count 执行次数

这个命令用来测试磁盘在只有读的时候,磁盘的性能。

vmstat 命令可以看到 buff 和 cache

vmstat 1

清空缓存: echo 3 > /proc/sys/vm/drop_caches 清空缓存

执行之后,会buff清空,cache会变小。

dd if=/dev/sda of=/dev/null bs=20MB count=100

vmstat 1

一般情况下机械硬盘的读磁盘的速度,一般在小几百MB每秒。多次测试会有偏差。

写磁盘

先清空缓存: echo 3 > /proc/sys/vm/drop_caches

vmstat 1

写磁盘: dd if=/dev/zero of=$PWD/outf bs=16MB count=100

buff没有变,cache是变大了。

vmstat 1

磁盘的写的速度,一般也是小几百MB每秒

同时读写磁盘

这些这些命令之前,都要去先清空缓存

dd if=/dev/sda of=$PWD/otf bs=14MB count=100 同时有读和写磁盘操作。

这个操作buff和cach都会增大,速度,也是在小几百MB每秒,一般还会比单独的读或写的速度要慢。

内存速度测试

dd if=/dev/zero of=/dev/null bs=15MB count=100 没有读和写磁盘 ---这些数据都在内存中交换,这个命令可以测试内存的速度。

执行这个命令,看到buff和cach基本没变,得到内存的速度大概是:小几十GB每秒

内存的速度,大概是磁盘速度的十几倍。

你项目中同时有读写操作,你可以用iostat这个命令,看读写速度和等待wait,看是否有磁盘瓶颈。

现在的数据库,因为要大量读磁盘操作,读速度跟不上行,就可能导致,获取数据的响应时间偏 长,导致性能偏低。

这其实就会被大多人理解为慢sql,慢查询。

一般数据库因为磁盘瓶颈,导致的性能问题,一般比较少的换磁盘,而是考虑优化数据库。

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油1 小时前
01_SQLite
数据库·sqlite
liuxin334455661 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec2 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构