美文网首页
第2章 什么影响了MySQL性能

第2章 什么影响了MySQL性能

作者: 马_黎 | 来源:发表于2018-08-30 00:55 被阅读0次

什么影响了mysql的性能

  • 服务器硬件
  • 操作系统
  • 引擎选择
  • 数据库参数的配置
  • 表的设计和sql语句

一般来说数据的参数的配置是非常重要的

20180827224542.png

如何选择CPU

CPU密集型,选择更好的数据库而不是更多的CPU

并发量多的,cpu的数量越多越好

在web中,cpu的数量比性能重要

内存

如果内存的数量大于缓存的话,利用率就不是太高了。

买内存的时候,内存最大的,买相同的内存。

磁盘的配置和选择

机械硬盘

如何选择

  • 容量
  • 传输速度
  • 访问时间
  • 转速
  • 物理尺寸

RAID

什么是RAID?

将多个小的磁盘,组合成一个大的磁盘!并提供数冗余来保证数据的完整性。

RAID 0

什么是 RAID 0什么是 RAID 0 RAID 0的实现方式RAID 0的实现方式

磁盘一旦损坏,数据就找不到了。
读比 RAID 1 快

RAID 1

RAID 1RAID 1 RAID 1 示例图RAID 1 示例图

注意,磁盘坏了,立马更换。

RAID 5

什么是RAID 5什么是RAID 5 示例图示例图

随机写慢,但是读快。适合方从数据库

RAID 10

数据库的最好选择,成本比较高

介绍介绍 示例图示例图

总结

enter description hereenter description here

固态硬盘

优缺点

  • 有更好的读写能力
  • 更好的支持并发
  • 但是更容易损坏

特点

固态硬盘的特点固态硬盘的特点

网络存储的使用场景

适合做数据库备份。

SNA和NASSNA和NAS NASNAS

网络对性能的影响

建议建议

Centos 参数优化

enter description hereenter description here 决定每个端口最大的监听长度,默认很小,对负载很大的数据是不行的决定每个端口最大的监听长度,默认很小,对负载很大的数据是不行的 接受包的速率比内核处理快的时候,准许往队列中发送包的最大的数据木接受包的速率比内核处理快的时候,准许往队列中发送包的最大的数据木 enter description hereenter description here

MySQL

mysql引起的介绍

MYISAM

特性1:

并发性与锁级别

MYISAM 使用的是表级锁,而不是行级锁!这就导致读取和写入是相斥的,对续写能敌的处理不是很好,并发性不好,但是对于只读的话,还是不错的。

特性2:

表损坏(意外关闭造成的损坏)和修复

check table  检查
repair table 修复

特性3

  • 支持全文索引
  • 可以建立前缀索引
  • 可以进行压缩
    • 当数据只读的时候,只能读不能写

限制:

  • 版本小于5.0,单表最大是4G
  • 版本大于5.0,单表最大事256T

实用场景:

  • 非事物应用
  • 只读类应用(压缩)
  • 空间类应用(GPS,空间函数)

INNODB

5.5版本之后默认成Innodb数据库引擎
有自己的表空间,使用表空间进行存储
为每一个表建立独立的表空间

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

系统表空间容易造成空间浪费,会有I/O瓶颈

独立表空间,可以向多个文件删除。

建议: 使用独立表空间

数据库5.6版本默认的是独立表空间

系统空间变成独立表空间的办法

  • 导出数据
  • 停止服务,修改参数,并且删除Innodb相关参数
  • 重启服务,重建Innodb独立表空间
  • 导入数据

特性 1:

  • 是事物特性表
  • 完全支持ACID特性
  • Redo log 和undo log(独立存在的,可以将其放入到SSD,来提高数据库性能)
    • undo log未提交的事物
    • Redo log 已经提交的事物

什么是锁?

  • 管理资源并发访问
    • 一个人提交数据,另一个人阻塞
  • 实现事物的隔离性

锁类型?

共享锁(读锁)
独占锁(写锁)

锁的粒度

锁的最小单位,如行级锁,表级锁

阻塞和死锁?

  • 阻塞
    • 一个锁需要等另一个锁资源释放
  • 死锁
    • 两个锁资源互相占用。这个课由系统自动处理,但是如果是大量的数据的话,就不好了。

特性3 :

状态检查

show engine innodb status

注意要隔离30s,

可以检查缓存、读写、循环次数、log信息、缓存池、内存信息等。

适用场景:

使用大多数的OLTP应用
5.6支持了全文索引和空间函数

CVS引擎

特点:
以文件形式存储的

  • .cvs 表内容
  • csm 表状态
  • frm 表结构

特点:

1.以csv格式进行存储
2.不能出现null的列
3.不支持索引
4.可以对文件直接编辑

适用场景
数据中间交换表,如电子表格等

Archive引擎

特点:
1.缓存所有的写,并对缓存进行压缩。更加节约磁盘I/O和内存
2.数据已ARZ后缀访问文件

特点2:

1.只支持insert和select操作
2.支持行级锁
3.只允许在自增id上建立索引

适用场景:
日志和数据采集

memory数据库引擎

特点:
1.数据保存在内存中
2.支持HASH(等值查找)和BTress(范围查找)索引
3.所有字段都是定长
4.不支持大字段
5.是一个表级锁,并发不好!

适用场景
1.映射表,如邮编和地区
2.保存数据分析产生的中间表
3.用于缓存周期性聚合数据表

不能用于主从复制,因为每次主服务器上都会从新生成!副从服务器上的就不能用了。

federated

特点:

  1. 提供了mysql服务器访问远程服务器的方法
  2. 本地不存放数据,数据都在远程数据库里存放着
  3. 本地保存表结构和远程的服务器信息
  4. 当前的数据库默认是禁止的

适用场景
偶尔的统计拆分可以使用。

如何选择数据库引擎

一般选择Innodb就可以了。

参考条件 :事物、备份、特性、崩溃恢复
建议:不同的数据库引擎,尽量不要混合使用

MySql服务器配置

内存配置的相关参数

  • sotr_buffer_size

    • 确定可以使用内存的上限,确定mysql每个链接使用的内存
  • join_buffer_size

    • 链接缓存区的大小,一个查询关联多个表,那么就会给每个关联分配一个机制
  • read_buffer_size

    • MYSIM全局扫描时候,分配的读取缓存区的大小。
  • read_rnd_buffer_size

    • 索引缓存区的大小

要注意确认为操作系统留多少内存。

如何分配缓存池内存

Innodb_buffer_prol_size 定义Innodb使用缓存池的大小

算法:
池的大小 --> 总内存-(线程内存*连接数)-系统内存。

key_buffer_size :MYSIM缓存池的大小,注意存放索引

enter description hereenter description here enter description hereenter description here mysql 安全参数的配置mysql 安全参数的配置 MYSQL安全参数2MYSQL安全参数2 Mysql安全参数3Mysql安全参数3 enter description hereenter description here 其他参数的配置其他参数的配置 其他参数的配置2其他参数的配置2

数据库设计对性能的影

  • 过分的反范式化为表建立太多的列
  • 过分的范式化造成太多的表关联
  • 在OLTP中使用不恰当的分区表
  • 使用外键保证数据的完整性
    • 对有外键的表进行修改时候,mysql都要对外键应用进行检查,这样就带来了额外的锁的开销,降低了数据库的修改效率!
    • 建议尽量不使用外键约束,但是在关联键上建立相关的索引还是必须的。

性能优化的顺序

  • 数据库接口和sql语句
  • 数据库引擎的选择和参数的配置
  • 系统选择和优化
  • 硬件的升级

相关文章

网友评论

      本文标题:第2章 什么影响了MySQL性能

      本文链接:https://www.haomeiwen.com/subject/iydlwftx.html