• mysql的优化


    mysql的优化

    可以从三个大的方面来入手mysql级别,os级别,硬件级别

    mysql级别

    1)正确设定表的属性:字段类型,
    2)频繁更新的表用小表;
    3)选择合适的引擎
    myisam:不支持事务,读性能处理快
    Innodb支持事务处理,设计目标是为处理大容量数据发挥最大的性能
    4)合适的锁机制:
    表锁:开销小,加锁块,并发度低
    行锁:开销大,加锁慢,并发度高
    页锁:会出现死锁
    5)sql语句的优化
    字段类型尽量用int或tinyint,另外varchar字段尽量用’’取代null
    select * 尽量少用,你想要什么字段就select什么字段不要老是*,同理,只要一行数据时尽量使用limit 1
    尽量避免使用order by rand(),因为这个可能会导致mysql的灾难
    每个表应该设置一个ID主健,最好为int类型
    对于写,尽量用简单的sql,严谨批量insert,update
    尽量用exists取代in ,用join取代子查询

    数据库架扩展:
    主要思想是分解单台数据库负载,突破磁盘I/O性能,热数据存放在缓存中,降低磁盘I/O访问频率
    1)读写分离:
    部署一主多从架构,主数据负责写操作,并做双机热备,多台从数据库做负载均衡。
    读写分离可以通过代理程序来实现.mysql proxy,
    如果单台写性能达不到业务要求,可以做从双主,可能会导致数据库数据发生冲突,原因是用户可能操作两台数据库,同时的更新操作导致数据发生冲突。解决:有一套基于perl语言开发的主从复制管理工具叫MYSQL-MMM,这个工具的最大优点是同一时间只提供一台数据库写操作,有效保证数据一致性
    2)增加缓存memcached,.redis。

    操作系统的优化

    1)合适的CPU(选择多核,超线程,更块)
    2)合适大小的物理内存(各种缓存,缓冲都要用到内存)
    3)合适的网络设备(更快的网络连接)
    内核优化
    Net_.ipv4.tcp_fin_timeout=30 #TIME_WAIT超时时间,默认为60s
    Net.ipv4.tcp_tw_reuse=1 #1表示开启复用,允许TIME_WAIT重新用于新的TCP连接,0表示关闭
    Net.ipv4.tcp_tw_recycle=1 #1表示开始TIME_WAIT socket快速回收,0表示关闭
    Net.ipv4.tcp_max_syn_backlog=4096#进入SYN队列的最大长度,加大队列长度可容纳更多段等待连接

    硬件方面

    加大物理内存,提高文件系统性能。Linux内核会从内存中分配出缓存区来存放热数据,通过文件系统延迟写入机制,等满足条件时(如缓存区大小到达一定百分比或者执行sync命令)才会同步到磁盘,也就是说物理内存越大,分配的换存取越大,缓存数据越多
    SSD硬盘代替SAS硬盘,将RAID级别调整为RAID1+0.毕竟数据库的压力主要来自磁盘的I/0

  • 相关阅读:
    程序人生2008年(49)
    多种方式实现字符串/无符号数反向输出_栈_递归_头尾指针
    Ebusiness suite system service management ( EBS服务管理)
    文件系统FatFsR0.09a翻译(三):ff.h
    cocurrent request,program,process 并发请求,程序,进程的概念
    Laravel 5.* 执行seeder命令出现错误的解决方法
    Laravel修改配置后一定要清理缓存 "php artisan config:clear"!
    laravel构造函数和中间件执行顺序问题
    Laravel5.3使用学习笔记中间件
    laravel 是怎么做到运行 composer dumpautoload 不清空 classmap 映射关系的呢?
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5692623.html
Copyright © 2020-2023  润新知