调优思路
对查询进行缓存
强制限制 MySQL 资源设置
关键字缓冲区
调优思路
1. 硬件优化
2. 数据库设计与规划--以后再修改很麻烦,估计数据量,使用什么存储引擎
3. 数据的应用--怎样取数据,SQL语句的优化
4. 磁盘 IO优化
5. 操作系统的优化--内核、TCP连接数量
6. MySQL服务优化--内存的使用,磁盘的使用
7. my.cnf 内参数的优化
8. 分库分表思路和优劣
硬件优化
CPU—— 64 位、高主频、高缓存,高并行处理能力
内存——大内存、主频高,尽量不要用 SWAP
硬盘——15000转、RAID5、raid10 。 SSD
网络——标配的千兆网卡,10G网卡,bond0,MySQL服务器尽可能和使用它的web服务器在同一局域网内,尽量避
免诸如防火墙策略等不必要的开销
数据库设计与规划(架构上的优化)
纵向拆解: 专机专用
现在公司一台服务器同时负责 web、ftp、数据库等多个角色。 R720 dell 内存 :768G
纵向拆解后就是:数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性。
横向拆解: 主从同步、负载均衡、高可用性集群,当单个 MySQL 数据库无法满足日益增加的需求时,可以考虑在数据
库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。
查询优化
1. 建表时表结构要合理,每个表不宜过大;在任何情况下均应使用最精确的类型。例如,如果ID列用int是一个好主意,
而用text类型则是个蠢办法;TIME列酌情使用DATE或者DATETIME。
2. 索引,建立合适的索引。
3. 查询时尽量减少逻辑运算(与运算、或运算、大于小于某值的运算);
4. 减少不当的查询语句,不要查询应用中不需要的列,比如说 select * from 等操作。
5. 减小事务包的大小;
6. 将多个小的查询适当合并成一个大的查询,减少每次建立/关闭查询时的开销;
7. 将某些过于复杂的查询拆解成多个小查询,和上一条恰好相反
8. 建立和优化存储过程来代替大量的外部程序交互。
磁盘 IO 规划,IO 相关的技术
15000转、RAID5、raid10 。 SSD
swap 分区:最好使用 raid0 或 SSD
磁盘分区:将数据库目录放到一个分区上或一个磁盘上的物理分区. 存储数据的硬盘或分区和系统所在的硬盘分开
设置主从时,由于binlog日志频繁记录操作,开销非常大,需要把binlog日志放到其它硬盘分区上:
vim /etc/my.cnf
[mysqld]
datadir=/data/ #放在独立的硬盘上 SSD
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 #在原配置文件中,添加以下内容:
log-bin=/data/mysqllog #启用二进制日志,默认存在/var/lib/mysql 下面
这里datadir=/data/设置先后顺序有问题就会一直报错。摸索出来的顺序是,刚装完mysql之后,密码还都没有设置的时候,直接改这个/etc/my.cnf的配置,然后重启,在继续进行其他的操作。
如果改了密码或者做了其它操作的话 要cp -a 把源目录复制到新目录给权限
操作系统的优化
网卡 bonding 技术
设置TCP连接数量限制,优化系统打开文件的最大限制。
使用64位操作系统,64位系统可以分给单个进程更多的内存,计算更快 。
禁用不必要启动的服务
文件系统调优,给数据仓库一个单独的文件系统,推荐使用XFS,一般效率更高、更可靠。
ext3 不错。 ext4 只是一个过渡的文件系统。
可以考虑在挂载分区时启用 noatime 选项。 #不记录访问时间
最小化原则:
1) 安装系统最小化。
2) 开启程序服务最小化原则。 #比方说就跑数据库,那别的服务都停了就完了
3) 操作最小化原则。#比方说差某字段,就只查询某个字段
4) 登录最小化原则。#不要登录过多客户端
5) 权限最小化。#没必要的权限不要给任何人,他能做什么就只能做什么,他能查询,就只能做查询,不嫩过插入更新删除操作。
blkid
/dev/sda1: UUID="66f9258a-3508-4b19-89b0-aef32f608604" TYPE="xfs"
/dev/sda2: UUID="c5f23f48-28fc-4e14-8c4a-fdd453832c76" TYPE="swap"
/dev/sda3: UUID="1f7f435e-7480-4a62-8f98-808fbf2d389c" TYPE="xfs"
/dev/sdb1: UUID="ad959e1b-f05a-422f-8392-39e90253a7d8" TYPE="xfs"
/dev/sr0: UUID="2017-09-06-10-53-42-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
vim /etc/fstab #在挂载项中添加noatime选项就可以了。
UUID=ad959e1b-f05a-422f-83