zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    修饰符组合
    嵌入式C摘录
    c语言记事 关于extern和static
    iphone 设置iTunes共享目录
    MapKit 相关
    关于viewDidLoad在[super init]之前执行的问题
    UIScrollView相关
    ASIHttpRequest 学习
    iPhone Locate定位
    UTF7 编码转换
  • 原文地址:https://www.cnblogs.com/wangxiang135/p/13355489.html
Copyright © 2011-2022 走看看