• Mysql的深入优化


    ok,废话不多说,上干货。

    调优思路:

    • 0.硬件优化

    • 1.数据库设计与规划--以后再修改很麻烦,估计数据量,使用什么存储引擎

    • 2.数据的应用--怎样取数据,sql 语句的优化

    • 3.磁盘 io 优化

    • 4.mysql 服务优化--内存的使用,磁盘的使用

    • 5.my.cnf 内参数的优化。

    0.硬件优化

    CPU—— 64 位、高主频、高缓存,高并行处理能力

    内存——大内存、主频高,尽量不要用 SWAP

    硬盘——15000转、RAID5、raid10 。 SSD

    网络——标配的千兆网卡,10G网卡,bond0,msyql服务器尽可能和使用它的web服务器在同一局域网内,尽量避免诸如防火墙策略等不必要的开销。 

    1.数据库设计与规划(架构上的优化)

    纵向拆解: 专机专用 

    横向拆解: 主从同步、负载均衡、高可用性集群,当单个 mysql 数据库无法满足日益增加的需求时,可以考虑在数据库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。

    2、查询优化

    a>建表时表结构要合理,每个表不宜过大;在任何情况下均应使用最精确的类型。例如,如果ID列用int是一个好主意,而用text类型则是个蠢办法;TIME列酌情使用DATE或者DATETIME。

    b>索引,建立合适的索引。

    c>查询时尽量减少逻辑运算(与运算、或运算、大于小于某值的运算);

    d>减少不当的查询语句,不要查询应用中不需要的列,比如说select * from 等操作。

    e>减小事务包的大小;

    f>将多个小的查询适当合并成一个大的查询,减少每次建立/关闭查询时的开销;

    g>将某些过于复杂的查询拆解成多个小查询,和上一条恰好相反

    h>建立和优化存储过程来代替大量的外部程序交互。

    3,磁盘 io 规划,io相关的技术

    raid 技术:raid0或raid10 

    4. mysql 服务优化(数据库服务的优化)

    保持每个表都不要太大,可以对大表做横切和纵切:比如说我要取得某 ID 的 lastlogin, 完全可以做一张只有“ID和 “lastlog”的小表,而非几十、几百列数据的并排大表。

    另外对一个有 1000 万条记录的表做更新比对 10 个 100 万记录的表做更新一般来的要慢

    存储引擎:

    myisam 引擎,表级锁,表级锁开销小,影响范围大,适合读多写少的表,不支持事物。 表锁定不存在死锁

    innodb 引擎,行级锁,锁定行的开销要比锁定全表要大。影响范围小,适合写操作比较频繁的数据表。行级锁可能存在死锁。

     

    5. my.cnf 内参数的优化 

    对查询进行缓存,一般大致查询都是如此:PHP发出查询请求->数据库收到指令对查询语句进行分析->确定如何查询->从磁盘中加载信息->返回结果 

    配置查询缓存:

    vim /etc/my.cnf 添加:

    [mysqld] #在此字段中添加

    query_cache_size = 32M

    可以在数据库中查看缓存:

    show status like 'qcache%';

    强制限制mysql 资源设置

    您可以在mysqld中强制一些限制来确保系统负载不会导致资源耗尽的情况出现。

    在配置文件中添加:

    max_connections=500 

    wait_timeout=10 

    max_connect_errors = 100

    在数据库中用此命令就行验证:show status like 'max_used_connections';

    MySQL呢,有太多的调节优化,我们要记住那么多会很吃力,也没有多大意义。其实,只要记住一部分就可以完全满足要求。今天我就写这么多了,这些基本的优化可以解决一部分问题,如果数据很大,就需要做一些集群保证更好的用户体验(读写分离,高可用,搭建缓存数据库)

  • 相关阅读:
    使用NUnit做单元测试(总结版)
    http、ajax调试利器:Fiddler!!!(资料汇总)
    驳《从团购网站看中国人的创新精神》
    破解迷团:在asp.net  2.0服务器上运行.net 3.5(一)
    扩充NetCMS的功能:添加{TM:Repeater}{/TM:Repeater}标签
    TFS 2010 基础配置手动升级到高级配置 安装实践
    .net 中的 StringBuilder 和 TextWriter 区别
    最大团问题
    全排列问题
    ado.net连接池
  • 原文地址:https://www.cnblogs.com/sandiandian/p/8886261.html
Copyright © 2020-2023  润新知