mysql优化

1、硬件优化

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

  内存---大内存、主频高、尽量不要使用SWAP(虚拟)

  硬盘---1500转、RAID5、radi10(建议使用)、SSD

  网络---标配的千兆显卡、bondo、mysql服务器尽可能和使用它的web服务器在同一局域网,尽量避免诸如防火墙策略等不必要的开销。

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

  纵向拆解:专机专用:

        web、ftp、mysql--->web、ftp--->mysql

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

3、查询优化

  a、建表时,结构要合理,每个表不要过大;在任何情况下均应使用最精确的类型。

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

  c、查询时,尽量减少逻辑运算(与、或、非、大于、等于等)。

  d、减少不当的查询语句,不要查询应用中不需要的列。

  e、减小事物包的大小。

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

  g、将某些过于复杂的查询拆解成多个小查询。

  h、建立和优化存储过程来答题大量的外部程序交互。

4、磁盘IO规划,IO相关技术。

  raid技术:raid0或raid10

  SSD:1500转、RAID5或raid.ssd

  swap分区:最好使用raid0或SSD

  磁盘分区:将数据库目录放到一个分区上或一个磁盘上的物理分区。

       在储存的硬盘或分区和系统所在的硬盘分开,设置主从时,由于binlog日志频繁记录操作,开销非常大,需要把日志放到其他硬盘分区上。

       vim /etc/my.cnf

        datadir=/data/    放在独立的硬盘上SSD

        socket=/var/lib/mysql/mysql.sock

        log_bin=/data/mysqllog    启用二进制日志,默认在/var/lib/mysql下面

        server-id=1          本机数据库ID标示

        binlog-do-db=db       可以被从服务器复制的库,二进制西药同步的数据库的名

5、操作系统优化

  四卡bonding技术

  设置tcp连接数量,优化系统打开文件的最大限制

  使用64位操作系统,64位系统可以分给单个进程更多的内存,计算快。

  禁用不必要启动的服务。

  文件系统调优,给数据库一个独立的文件系统,推荐使用XFS,一般效率更高、更可靠。

  可以考虑在挂载分区时启用noatime选项。并不记录访问时间。

  查看用户最大打开文件数量:limit -n

    修改:vim /etc/security/limit.conf    增加

        如:mysql、soft、nofile

  最小优化原则:

    a、安装系统最小化

    b、开启程序服务最小化

    c、操作最小化原则

    d、登录最小化原则

    e、权限最小化原则

6、mysql服务化(数据服务化)

  保持每个表都不要太大,可以对大表做横切和纵切

  mysql应采用的安装方式:

    功能性软件:yum安装openssh

    高并发软件:使用源码编译安装

    开发测试:二进制安装

    存储引擎:

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

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

        数据库操作:

            show status;    查看系统状态

            show engine innodb status;    查看引擎状态

            show varables;    查看变量,在my.cnf配置文件自定义的值

        查看警告信息:

            show warnings;

            show processlist;    显示所有线程,可以看到每个客户端正在执行的命令。

        启用mysql慢查询:----分析sql语句,找到影响效率的sql

            vim /etc/my.cnf

              lo-show-queries=/var/lib/mysql/show.log      这个路径对mysql用户具有可写权限

              long_query_time=5                查询超过5秒的语句记录

              log-queries-not-using-indexes          没有使用索引的查询

原文地址:https://www.cnblogs.com/yuyangphpweibo/p/7884206.html