MySQL数据库调优

时间:2022-09-18 10:38:49

MySQL数据库调优主要有七个方面:

1.硬件优化

2.数据库设计规划

3.数据的应用

4.磁盘的IO优化

5.操作系统的优化,内核、TCP连接数量

6.MySQL服务优化

7.my.cnf 参数优化

 

 

导致数据库服务器宕机的原因有那些:

1.运行环境:35%,运行环境可以看做是支持数据库服务器运行的系统和资源的集合,包括操作系统、硬盘以及网络

2.性能:35%

3.复制:20%

4.各种类型的数据库丢失或者损坏以及其他问题:10%

 

导致宕机的事件件排行:

1.在运行环境的问题上,普遍的问题就是空间耗尽.

2.在性能问题上,最普遍的宕机原因是运行很糟糕的SQL,还有服务bug和错  误的行为导致.

3.索引设计也是影响宕机的原因.

4.复制问题通常是由于主备数据不一致.

5.数据丢失通常是由于误删除导致的.

 

调优从宏观上来说,主要分为 三个部分:硬件,网络,软件(sql语句,表的设计)

 

一、硬件优化:

1.内存,大内存、大内存位宽,尽量不要用SWAP,百度一台服务器内存96G--  128G,2个实例.

2.硬盘,15000RPM、RAID5、RAID10、SSD(可以使用,但是很少使用).SSD(高 并发)> sas(线上管理业务) > SATA(线下业务).

 RALD 4 块盘:性能:RALD0 > RALD10 > RALD5 > RALD1.

3.网卡:多块网卡、标配的千兆网卡.

4.CPU,64位、高主频、高缓存、高并发处理能力,百度CPU一台服务器8-16颗 CPU.

 

二、数据库设计与规划

1.服务器安装网络服务单机单用

 MySQL数据库调优

 

2.缓存服务器Memcached,主从同步、负载均衡、高可用性集群.

3.A:查询优化,表的字段数据类型要使用合理.

 B:建立合适的索引,单个索引命中率低时使用联合索引.

 C:查询时尽量减少逻辑运算.

 D:减少不当的查询语句,不要查询应用不到的列,如:select * from 表等操作

 E:减少事务包的大小

 F:将多个小的查询适当合并成一个大的查询,减少每次建立/关闭查询时的开销

 G:将某个过于复杂的查询拆解成多个小查询,和上一条恰好相反

 H:建立和优化存储过程来代替大量的外部程序交互

4.磁盘IO规划

 A.RAID技术:RAID0 或 RAID10

 B.SWAP分区:最好使用RAID0

 C.使用SAS硬盘或SSD盘

 D.磁盘分区:将数据库目录放到一个独立的分区上或一个独立的磁盘上的分区,存

 储数据 的硬盘分区和系统所在的硬盘分开.

 MySQL数据库调优

 

 E.binlog日志放到其它 硬盘分区上:

  vim /etc/my.cnf

  [mysqld]

  log-bin=mysqllog

4.操作系统的优化

 网卡bonding技术

 bonding:将多个物理网卡聚合成一个虚拟网卡,这样只可以增加流量,增大负载

 

 bonding三个工作模式:

 0:负载均衡,默认是轮询模式.

 1:主机-备机模式.

 2:广播-容错,所有的包通过所有slave口接受广播.

5.MySQL服务优化

 A.使用Linux/bsd操作系统进行编译安装,对编译参数进行性能优化,精简不必要

  启用的功能,合适的应用程序接口.

 B.保持每个表都不要太大,可以对大表做横切和纵切:比如说我要取得某个ID的lastlogin

  完全可以做一张只有"ID"和"lastlog"的小表,而非几十、几百列数据的并排大表.

 C.Myisam 引擎,表级锁,表级锁开销小,影响范围大,适合读多写少的表,不支持事物。

  表锁定不存在死锁.

  Innodb 引擎,行级锁,锁定行的开销要比锁定全表要大.影响范围小,适合写操作比较  频繁数据表。行级锁可能存在死锁.

 D.修改配置查看慢查询语句:

  vim /etc/my.cnf

  [mysqld]

  log-slow-queries=/var/lib/mysql/slow.log  //这个路径对MySQL用户具有可写权限

  long_query_time=2             //查询超过2秒钟的语句记录下

  log-queries-not-using-indexes       //没有使用索引的查询