Mysql数据库优化的思路

mysql性能调优的思路:



对mysql优化时是 一个综合性的技术,主要包括:

  1. 表的设计合理(符合3NF)
  2. 添加适当索引【四种:普通索引、主键索引、唯一索引、全文索引】
  3. 分表技术(水平分割,垂直分割)
  4. 读写分离
  5. 存储过程【模块化编程,可以提高速度】
  6. 对mysql配置优化[my.ini  max_connection最大并发数(一般网站调整到1000左右)]
  7. mysql 服务器硬件的升级
  8. 定期清除不需要的数据,定时进行碎片整理(MyISAM)

问题:  如果一台服务器出现长时间负载过高/周期性负载过大,或偶尔卡住,如何来处理?

答: 大的思路:是周期性的变化还是偶尔问题? 是服务器整体性能的问题,还是某单条语句的问题?

具体到单条语句,这条语句 是在等待上花的时间,还是在查询上花的时间。

唯一的办法----监测并观察服务器的状态

1. 观察服务器状态,一般用如下2个命令

show status;  show processlist


不规则的延迟现象往往是由于效率低下的语句造成的,如何抓到这些效率低的语句。

show processlist;

这个命令时显示当前所有连接的工作状态;

#!/bin/bash
while true
do
mysql -uroot -e 'show processlist\G'|grep State:|uniq -c|sort -rn
echo '---'
sleep 1
Done

如果观察到以下状态,则需要注意:

converting HEAP to myISAM 查询结果太大时,把结果放在磁盘(语句写的不好,取数据太多)
create tmp table 创建临时表(如group 时储存中间结果),说明索引建的不好
Copying to tmp table on disk 把内存临时表复制到磁盘(索引不好,表字段选的不好)
locked 被其他查询锁住(一般在使用事务时,互联网应用补偿发生)
logging slow query 记录慢查询

如何定位到有问题的语句:

1. 开启服务器慢查询

2.找到慢查询的语句,使用服务器show profiles 观察语句的执行步骤

3.了解临时表的使用规则

4.经验


猜你喜欢

转载自blog.csdn.net/fd2025/article/details/80351951