24.1、如何判断网站慢的排查顺序:
客户端->web->nfs->数据库;
24.2、uptime命令详解:
[root@backup ~]#uptime
13:03:23 up 37 min, 1 user, load average: 0.08, 0.02, 0.01
13:03:23 up 37 min #开机时间和开机运行了多长时间;
1 user #正在使用的用户数;
load average: 0.08, 0.02, 0.01
#这里是1分钟、5分钟和15分钟内的平均负载;
#一般load average的三个值不能大于cpu个数,假设长期大于cpu个数说明系统非常繁忙负载高。
#偶尔大于的话,一般不影响实际性能。
24.3、mysql服务器负载高的解决办法:
1、案例一(索引问题):
(1)登录到数据库;
(2)使用show full processlist;命令,发现大量的sql查询查询进程等待;
(3)使用explain+sql语句查看等待的sql语句的索引利用情况;发现该sql语句没有没有走任何的索引,是全表扫描;
(4)查看被查询表的表结构信息,然后使用select count( discount,<字段名称>) from <表名称>;命令查看被查询字
段的的唯一性,发现每一个字段的唯一性都很小,所以通过create index <索引名称> on student (<字段名>,<字段名>);命令
建立联合索引;
(5)通过explain+sql语句查看索引情况,发现sql查询走索引了,通过uptime命令查看mysql服务器的负载也降下来了;
(6)注意:在生产环境中,如果访问频繁的大表,创建索引会很耗费时间,也许需要几分钟,所以应该在业务低估时建立索引;
2、案例二(非索引问题):
使用的搜索是%<搜索的内容>%,不走索引;
使用 mysql -uroot -p<密码> -e "show full processlist" | grep -vi sleep命令查看数据库进程;
3、小结:引起负载高的软件原因,要么是sql查询没有走索引,要么是sql语句写的比较烂;
24.4、如何优化数据库:
1、硬件优化:
6*600、sas、15k硬盘、raid10、2颗cpu、16G、单实例mysql服务;
2、软件优化:
3、my.cnf优化:
对于线程buffer不要调的太大,主要和并发有关,系统内存会吃不消的;
4、sql语句的优化:
5、架构上的优化:
24.5、数据库管理规章制度:
1、项目开发制度流程: