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.服务器安装网络服务单机单用
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.磁盘分区:将数据库目录放到一个独立的分区上或一个独立的磁盘上的分区,存
储数据 的硬盘分区和系统所在的硬盘分开.
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 //没有使用索引的查询