MYSQL 基础优化

语句优化

优化工具

检查问题常用工具:
MYSQL 基础优化_第1张图片
image
不常用但好用的工具:
MYSQL 基础优化_第2张图片
image

系统层面

cpu方面:

vmstat、sar top、htop、nmon、mpstat

内存:

free 、ps -aux 、

IO 设备(磁盘、网络):

iostat 、 ss 、 netstat 、 iptraf、iftop、lsof、

vmstat 命令说明:

Procs:r 显示有多少进程正在等待 CPU 时间。b 显示处于不可中断的休眠的进程数量。在等待 I/O

Memory:swpd 显示被交换到磁盘的数据块的数量。未被使用的数据块,用户缓冲数据块,用于操作系统的数据块的数量

Swap:操作系统每秒从磁盘上交换到内存和从内存交换到磁盘的数据块的数量。s1 和 s0 最好是 0

Io:每秒从设备中读入 b1 的写入到设备 b0 的数据块的数量。反映了磁盘 I/O

System:显示了每秒发生中断的数量(in)和上下文交换(cs)的数量

Cpu:显示用于运行用户代码,系统代码,空闲,等待 I/O 的 CPU 时间

iostat 命令说明
实例命令: iostat -dk 1 5

iostat -d -k -x 5 (查看设备使用率(%util)和响应时间(await))

tps:该设备每秒的传输次数。“一次传输”意思是“一次 I/O 请求”。多个逻辑请求可能会被合并为“一次 I/O 请求”。

iops :硬件出厂的时候,厂家定义的一个每秒最大的 IO 次数,"一次传输"请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量
KB_wrtn/s:每秒向设备(drive expressed)写入的数据量
kB_read:读取的总数据量
kB_wrtn:写入的总数量数据量;这些单位都为 Kilobytes

SWAP:

MySQL 尽量避免使用 swap。阿里云的服务器中默认 swap 为 0

IO :
  • raid、no lvm、 ext4 或 xfs、ssd、IO 调度策略

  • Swap 调整(不使用 swap 分区)

image

这个参数决定了 Linux 是倾向于使用 swap,还是倾向于释放文件系统 cache。在内存紧张的情况下,数值越低越倾向于释放文件系统 cache。当然,这个参数只能减少使用 swap 的概率,并不能避免 Linux 使用 swap。

修改 MySQL 的配置参数 innodb_flush_method,开启 O_DIRECT 模式。这种情况下,InnoDB 的 buffer pool 会直接绕过文件系统 cache 来访问磁盘,但是redo log 依旧会使用文件系统 cache。值得注意的是,Redo log 是覆写模式的,即使使用了文件系统的 cache,也不会占用太多

IO 调度策略:
MYSQL 基础优化_第3张图片
image

系统参数调整

Linux 系统内核参数优化:
MYSQL 基础优化_第4张图片
image
用户限制参数(MySQL 可以不设置以下配置):
MYSQL 基础优化_第5张图片
image

应用优化

业务应用和数据库应用独立,防火墙:iptables、selinux 等其他无用服务(关闭):
MYSQL 基础优化_第6张图片
image

数据库优化

SQL 优化方向:

执行计划、索引、SQL 改写

架构优化方向:

高可用架构、高性能架构、分库分表

1. 数据库参数优化

调整:

实例整体(高级优化,扩展)

MYSQL 基础优化_第7张图片
image
连接层(基础优化)

设置合理的连接客户和连接方式

MYSQL 基础优化_第8张图片
image
SQL 层(基础优化)
  • query_cache_size: 查询缓存

  • OLAP 类型数据库,需要重点加大此内存缓存

  • 但是一般不会超过 GB

  • 对于经常被修改的数据,缓存会立马失效

  • 我们可以实用内存数据库(redis、memecache),替代他的功能

2.存储引擎层(innodb 基础优化参数)

MYSQL 基础优化_第9张图片
image

你可能感兴趣的:(MYSQL 基础优化)