1、硬件优化
CPU---64位,高主频、高缓存、高并行处理能力
内存---大内存、主频高、尽量不要使用SWAP(虚拟)
硬盘---1500转、RAID5、radi10(建议使用)、SSD
网络---标配的千兆显卡、bondo、mysql服务器尽可能和使用它的web服务器在同一局域网,尽量避免诸如防火墙策略等不必要的开销。
2、数据库设计与规划(架构上的优化)
纵向拆解:专机专用:
web、ftp、mysql--->web、ftp--->mysql
横向拆解:主从同步,负载均衡,高可用集群,当单个mysql数据库无法满足日益增加的需求时,可以考虑在数据库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。
3、查询优化
a、建表时,结构要合理,每个表不要过大;在任何情况下均应使用最精确的类型。
b、索引,建立合适的索引。
c、查询时,尽量减少逻辑运算(与、或、非、大于、等于等)。
d、减少不当的查询语句,不要查询应用中不需要的列。
e、减小事物包的大小。
f、将多个小的查询合并成一个大的查询,减少每次建立/关闭时的开销。
g、将某些过于复杂的查询拆解成多个小查询。
h、建立和优化存储过程来答题大量的外部程序交互。
4、磁盘IO规划,IO相关技术。
raid技术:raid0或raid10
SSD:1500转、RAID5或raid.ssd
swap分区:最好使用raid0或SSD
磁盘分区:将数据库目录放到一个分区上或一个磁盘上的物理分区。
在储存的硬盘或分区和系统所在的硬盘分开,设置主从时,由于binlog日志频繁记录操作,开销非常大,需要把日志放到其他硬盘分区上。
vim /etc/my.cnf
datadir=/data/ 放在独立的硬盘上SSD
socket=/var/lib/mysql/mysql.sock
log_bin=/data/mysqllog 启用二进制日志,默认在/var/lib/mysql下面
server-id=1 本机数据库ID标示
binlog-do-db=db 可以被从服务器复制的库,二进制西药同步的数据库的名
5、操作系统优化
四卡bonding技术
设置tcp连接数量,优化系统打开文件的最大限制
使用64位操作系统,64位系统可以分给单个进程更多的内存,计算快。
禁用不必要启动的服务。
文件系统调优,给数据库一个独立的文件系统,推荐使用XFS,一般效率更高、更可靠。
可以考虑在挂载分区时启用noatime选项。并不记录访问时间。
查看用户最大打开文件数量:limit -n
修改:vim /etc/security/limit.conf 增加
如:mysql、soft、nofile
最小优化原则:
a、安装系统最小化
b、开启程序服务最小化
c、操作最小化原则
d、登录最小化原则
e、权限最小化原则
6、mysql服务化(数据服务化)
保持每个表都不要太大,可以对大表做横切和纵切
mysql应采用的安装方式:
功能性软件:yum安装openssh
高并发软件:使用源码编译安装
开发测试:二进制安装
存储引擎:
myisam:表级锁,开销小,影响范围大,适合读多写少,不支持事物,表锁定,不存死锁。
innodb:行级锁,开销大,影响范围小,适合操作比较频繁的数据表,行级锁可能存在死锁。
数据库操作:
show status; 查看系统状态
show engine innodb status; 查看引擎状态
show varables; 查看变量,在my.cnf配置文件自定义的值
查看警告信息:
show warnings;
show processlist; 显示所有线程,可以看到每个客户端正在执行的命令。
启用mysql慢查询:----分析sql语句,找到影响效率的sql
vim /etc/my.cnf
lo-show-queries=/var/lib/mysql/show.log 这个路径对mysql用户具有可写权限
long_query_time=5 查询超过5秒的语句记录
log-queries-not-using-indexes 没有使用索引的查询