zoukankan      html  css  js  c++  java
  • mysql优化

    转一篇非常好的MySQL优化的文章

    Mysql的硬件优化和配置优化

    mysql数据库优化之系统配置优化及硬件优化


    mysql优化硬件和操作系统

    coalesce(p1,p2, p3,...)返回众多参数中的第一个非空值

    这个参数使用的场合为:假如某个字段默认是null,你想其返回的不是null,而是比如0或其他值,可以使用这个函数 

          SELECT COALESCE(field_name,0) as value from table;

    MySQL数据库优化方法详解

    一、硬件的优化

    1.1 cpu优化(64位cpu,建议多核绑定不同的服务)

    1.2 内存(按照企业发展,合理调控内存)

    1.3 硬盘 (数量越多越好,性能:ssd(核心高并发业务) > sas(线上普通业务)> sata(线下))

    Raid 4 4块盘 性能: RAID0 > RAID10 > RAID5 > RAID1

    1.4 网卡 (网卡的ffer,通过参数可以内核调优,多块网卡bond)

    二、软件的优化

    2.1 操作系统:x86_64位系统

    2.2 建议编译安装,编译优化(一般安装有三种方式:yum安装,二进制安装,编译安装)

    三、my.cnf参数的优化

    my.cnf参数优化的幅度很小,大部分在架构和sql语句的调优

    3.1 Innodb_buffer_pool_size = 2048M #数据库的数据会缓存在这个buffer_pool里面,一般设置值为物理内存的1/3,不超过50%

    3.2 innodb_flush_log_at_trx_commit = 2 #修改参数提交不需要刷新binlog

    3.3 sort_buffer_size = 2M #这些都是线程buffer,这里的值不能给大

    3.4 join_buffer_size = 2M

    3.5 open_file_limit = 10240 这里的值可以给大

    3.6 query_cache_size = 64M

    3.7 query_cache_limit = 4M 这里的值不能给大,建议前端做memcached缓存,不要在数据库里做查询缓存。

    3.8 query_cache_min_res_unit = 2k

    3.9 tmp_table_size = 256M #可以稍微给大点,但是不要给太大,会占用磁盘空间

    3.10 tmp_heap_table_size= 256M

    3.11 long_query_time = 2 超过两秒的查询记录下来

    3.12 log_slow_queries = /data/mysql/slowlog.log

    3.13 log_error = /data/mysql/error.log 记录错误日志

    3.13 expire_logs_days = 7 自动清理binlog,不要手动清理

    3.14 key_buffer_size = 2048M 索引的缓存,主要用于myisam引擎,索引的数据存储在这里,如果是myisam引擎,建议值尽量大些

    3.15 skip-name-resolve 这个需要在配置文件里面添加,不加容易导致用户权限问题,show processlist会出现大量login等待

    3.16 innodb_data_file_path = iddata1:1024M:autoextend

    小结:

    1、生产参数是一般情况下的参数,通过命令监控慢慢调整:show global statusG

    2、mysql性能调优工具mysqlreport

    Sql语句的优化

    1)白名单机制

    #允许特定客户端 ip 地址连接
    #登录mysq
    $ mysql -u root -p
    Enter password:
    
    #切换至mysql库
    mysql> use mysql
    
    #查看当前允许登录IP及用户
    select Host,User from user;
    
    # 删除不必要而表中存在的IP和用户   (host值为“%”或空表示所有IP都可登录,一般来说此类行需要删掉)
    DELETE FROM user WHERE User='username' and Host='host';
    #增加需要而表中没有的IP和用户 GRANT ALL ON *.* to root@'119.143.12..%' IDENTIFIED BY 'password'; %表示通配的意思 mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password'; #使更新的配置生效 mysql> FLUSH PRIVILEGES;

    show status ;与show variables;

    show status:         查看系统运行的实时状态,便于dba查看mysql当前运行的状态,做出相应优化,动态的,不可认为修改,只能系统自动update

    show variables :   查看系统参数,系统默认设置或者dba调整优化后的参数,静态的。可以通过set或者修改my.cnf配置文件修改

    减少上线后的慢SQL

    show variables like 'slow_%';                                       #查看慢查询是否开启

    抓出慢SQL:mysql的my.ini配置文件配置(linux 是my.cnf 、需要重启mysql)

    log_output=file                                                             #保存慢查询日志的方式(file文件 table则会保存到mysql库的slow_log表中)

    slow_query_log=on                                                     #用于指定是否启用慢查询日志 

    slow_query_log_file= /usr/local/mysql/data/slow.log   #慢查询日志文件路径 

    Long_query_time=2                                                  #查询大于2秒的都会被记录   默认 10s

    Log_slow_queries= /usr/local/mysql/data/slow.log     #慢查询日志文件路径  该参数已经被slow_query_log取代(5.1.29弃用 ‘、5.6删除);

    log-query-not-using-indexes                                       #开启 记录没有使用索引查询语句,可以根据情况决定是否开启  (全表索引扫描也会被记录下来 尽量少使用)

    或者执行命令:

    set global slow_query_log=ON; 

    set global long_query_time = 10; 

    set global log_querise_not_using_indexes = ON; 

    show status like 'slow_queries';#查看记录的慢查询的次数

    show variables like 'long_query_time'; #查看设定的慢查询时间

    模拟慢查询

    select sleep(10); 

    当前的语句有多少是慢查询

    show global status like '%slow%';#这里的Slow_queries  值与show status like 'slow_queries';查出的不一样

    有记录则保存在slowlog.log中,用explain 分析此文件的sql

    按天轮询:slowlog.log

    2) 慢查询日志分析工具

    Mysqldumpslow,mysqlsla,myprofi,mysql-explain-slow-log,mysqllogfilter比较

    3)每天晚上0点定时分析慢查询

    mysqldumpslow 慢日志分析工具 

    windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志

    架构的优化

    3.1 业务拆分:搜索功能,像like %餐巾纸%,一般不要用mysql数据库

    3.2 数据库前端必须加cache,例如:memcached,用户登录,商品查询

    3.3 某些业务应用使用nosql持久化缓存,例如:redis,memcachedb,ttsserver,例如:粉丝,好友关系等

    3.4 动态的数据静态化,整个文件静态化,页面片段静态化。比如:用户发布一个商品,商品生成html,推到前端(大网站必须要做的)

    3.5 数据库集群与读写分离。一主多从,双主多从,通过程序或dbproxy进行集群读写分离。

    3.6 单表超过2000万,拆库拆表。人工拆表拆库(登录、商品、订单)

    流程、制度、安全的优化

    4.1 任何一次认为数据记录的更新都要走一个流程:开发--核心开发--运维或DBA

    4.2 测试流程:内网测试--IDC测试--DBA测试--线上执行(比如删除一个表的记录)

    4.3 客户端的管理,phpmyadmin

  • 相关阅读:
    压测 正则 性能分析
    时间复杂度 根号n
    务端如何防止重复支付 架构文摘 2021-05-02
    工具大于约定和文档
    千亿级公司低代码平台的测试体系介绍
    疑惑 题解
    计算几何相关总结
    树 题解
    矩阵加速相关总结
    loj6274 数字 题解
  • 原文地址:https://www.cnblogs.com/lichihua/p/9485089.html
Copyright © 2011-2022 走看看