MySQL 优化实施方案

优化的哲学

优化风险

优化设计到变更,变更就有风险

优化方向

在数据库优化上有两个主要方面:即安全与性能。(CAP)
  安全 ---> 数据可持续性
  一致
  性能 ---> 数据的高性能访问

优化框架

  基础设施:硬件,操作系统,网络,文件系统
  数据库实例:内存,线程,IO等参数
  应用层:schema设计,SQL,索引,锁
  架构层面:选型,主从

优化工具

OS (提前规划好)

cpu:top,htop,glances,vmstat、sar top、nmon、mpstat
MEM,swap:top,htop,glances,free,ps -aux
IO:iotop,iostat,vmstat,glances, ss ,netstat,iptraf,iftop,lsof

MySQL

show processlist
show status
explain
slowlog
IS,PS,SYS
PT工具

优化过程

基础设施

主机

真实硬件(PC Server):DELL R系列,华为,浪潮,HP,曙光,联想
云产品:ECS(阿里),数据库RDS(阿里),DRDS(阿里),polarDB(阿里),TDSQL(腾讯)
CPU:IO密集型(OLTP E志强),计算密集型(OLAP,I系列,P系列)
MEM:ECC校验功能
HD:Flash--》PCI-E SSD--》SAS--》SCSI--》SATA
RAID:raid 10-->raid 5-->raid 1

存储

  FC-SAM:HDS,EMC,IBM
  冷存储

网卡

  单卡单口,网卡绑定(bond)建议主备
  交换机:高端,堆叠。

OS

swap调整(必调)

[root@WANGXIANG backup]# cat /proc/sys/vm/swappiness
30
[root@WANGXIANG backup]# echo 0 > /proc/sys/vm/swappiness
[root@WANGXIANG backup]# cat /proc/sys/vm/swappiness
0
# 永久生效
[root@WANGXIANG backup]# echo 'vm.swappiness=0' >> /etc/sysctl.conf 
[root@WANGXIANG backup]# sysctl -p
vm.swappiness = 0

IO调度策略(必调)

[root@WANGXIANG backup]# cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq
deadline:最后期限,我等你一会,你要是在一定期限内没有反应,去处理别的操作
echo deadline > /sys/block/sda/queue/scheduler 

IO优化建议+排查思路

raid
no lvm,不要过度条度化,IOPS
ext4或xfs
ssd
IO调度策略

通过工具,辅助定位性能问题

top
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
CPU问题:
sys:系统相关。协调,资源管理,资源调配,资源监控,系统调用,内核程序。
      MySQL:资源调配频繁,锁逻辑处理,会话处理

us:用户进程,线程
      MySQL:干正事时间,大事务,全表扫描,复杂查询
            

wait:等待
      IO wait(索引应用不合理),锁等待

idle:空闲
定问问题方法

top -Hp mysql.pid -->
os_thread_id (setect * from performance_schema.threads where THREAD_OS_ID='12118') -->
performance_schema.thread where os_thread_id -->
MYSQL_THREAD_ID -->
select sql_text from events_statements_history where THREAD_ID='12118' -->
explain,锁排查

数据库实例

会话

'''
max_connections 最大连接数
1500-4000
show processlist;
select count(*) from information_schma.processlist where command='sleep';

最大连接数超限:
1.IE:409 --》 max_connections 上限 --》show processlist--》sleep?语句问题?
2.改(默认151+管理员的一个连接数)--》limits.conf-->nofile没调整
3.sleep线程--》有规律的同时释放。7200s,自动回收--》Keepalived(7200s超时时间),lvs(1200s)
4.show processlist; kill 85;
5.percona-toolkits -->pt-kill

wait_timeout :处理非交互会话的超时时间 建议:60 s
3306 [(none)]>select @@wait_timeout; #查看

interactive_timeout :处理交互会话的超时时间 建议:600 s

thread_cache_size :会话重用,cpu紧缺的情况下可以酌情开启一下thread_cache_size=10

3306 [(none)]>show status like 'threads_%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 1 |
| Threads_connected | 1 |
| Threads_created | 2 |
| Threads_running | 1 |
+-------------------+-------+
'''

临时表

key_buffer_size (比配置)
1.myisam表的索引缓冲区
2.临时表的缓冲区

max_allowed_packet *****
max_allowed_packet=256

posted @ 2020-07-21 15:47  国际一级退堂鼓鼓手  阅读(200)  评论(0编辑  收藏  举报