#其他问题检查 

 1.带宽

 2.磁盘

 3.连接数

#数据库排查
1.查看负载
2.查看慢查询,分析引起慢的语句
3.分析是否走索引
4.创建索引优化

uptime //查看负载

show full processlist;    //慢语句查询

my.cnf 设置     //慢语句日志设置
long_query_time = 1
log-slow-queries = /data/3306/slow.log

如发现类似慢语句:
select id ad_xxxx where ader='123123' and detaline='2018-08-13'

查看分析索引文件
explain select ad_xxxx where 字段1='123123' and 字段2='2018-08-13'
或
select SQL_NO_CACHE ad_xxxx where ader='123123' and detaline='2018-08-13'

如发现 没走索引,添加之

#看看表结构,是否有索引
show create table 表名\G

#统计,查看哪个列唯一值,重复少的
select count(*) from 表;    //此表总记录数

select count(distinct 字段) from 表;    

#可以创建如下联合索引
create index 索引名 on 需要索引的表(字段1,字段2(20),字段3(20))

案例2

数据库负载很高,load值20-30

[root@A-host ~]# uptime
 14:13:44 up 4 days, 20:19,  3 users,  load average: 30.00, 21.00, 20.00
 
#登录数据库
show full processlist; 
mysql -root -p12345 -e "show full processlist; "|grep -vi sleep

如果 语句中有LIKE %xxx内容%  两百分号的查询,走不了索引,MYSQL数据库没有太大优化余地,后面是%的就可以。

优化方案思路
1.从业务上实现用户登陆后再搜索
2.如果有大量频繁搜索,一般是爬虫再爬网站,分析web日志,IP封掉 (AWSTATS)
3.配置多个主从同步,程序上实现读写分离,最好让LIKE %xx内容%这样的查询内容去从库查,减轻主库读写压力
4.在数据库前端加上memcached缓存服务器。
5.LIKE %xx内容% 一般在mysql里很难优化,可以使用sphinx,xapian软件 实现搜索
6,可以利用c,rubu开发程序,实现每日读库计算搜索索引,保存在服务器上提供搜索,然后,每5分钟多一个从库做增量,为搜索做集群。


(AWSTATS)https://www.qinzc.me/post-127.html