ext4:(rw,noatime,nodiratime,nobarrier,data=ordered)
xfs: (rw,noatime,nodiratim,nobarrier,logbufs=8,logbsize=32k)

ssd:
trim
innodb_page_size=4k 减小块大小,提搞命中YU
innodb_flush_neighbors=0

EG:如果当前系统CPU内核16,读写比3:1
innodb_read_io_threads=12
innodb_write_io_threads=4
读写进程不能超过CPU总核算数
读写比即线程比
innodb_thread_concurrency=32 推荐CPU总核算数2倍
innodb_io_capacity=500 (依赖iops)
单盘SAS/SATA:200
SAS*12 RAID 10
数据系统是随机IO,系统预读会增加负担

网卡:
跟据应用容量规划

什么是优化?

the fastest way to do something is don't do it
应用系统优化,CACHE

the ways to improve performance,do it less or do it faster
索引

performance is all about code path
优化CODE路径

数据库优化
1.不访问不必要的数据
1.B TREE/HASH
2.COLUMM STORE 或者分表的方式将数据分开存储

2. 合理的利用硬件来提升访问效益
1.使用缓存,消除对数据的重复访问
2.批量处理来减少交互次数(磁盘,网络)
3.加硬件
3.提高系统的吞叶量
1.对工作单位进行细化,减少串行操作
2.优化硬件配置,提高整体的TCO与硬件利用YU
3.合理的拆分(水平,垂直)以提高系统的整体吞叶能力
水平拆分:分析应用访问特征,分成多个表

mysql配置优化-关闭QC
仅仅在活跃线程较小的情况下才可用
建议在应用系统中做cache
5.6后默认关闭
query_cache_type=0
query_cache_size=0
开启后锁太多

线程内存配置优化:MYSQL 线程使用内存:需要就申请,不需要求释放
max_used_connections * (

read_buffer_size+
read_rnd_buffer_size+
join_buffer_size+
sort_buffer_size+
binlog_cache_size+
thread_stack+
2*net_buffer_length
)

INNODB 内存配制优化:
innodb_buffer_pool_size
innodb_data_file_path
innodb_flush_log_at_trx_commit 5.6默认是1
innodb_log_buffer_size:事物大小
transaction_isolation: RC
innodb_flush_method=O_DIRECT

内存=INNODB内存+线程内存*线程个数

innodb_io_capacity:
磁盘最高支持的IOPS:SAS/SATA:200 RAID 10:2000 SSD:2000-5000 PCIE FLASH:5000-10000
SSD可以配置的高一些
随着磁盘数量增加而增大
默认innodb_io_capacity_max=min(2000,2*innodb_io_capacity)

innodb_thread_concurrency/innodb_max_concurrency_tickets
无线程池:
innodb_thread_concurrency=16-32 in 5.5
innodb_thread_concurrency=36 in 5.6
存在线程池:
innodb_thread_concurrency=0 is fine

innodb_max_concurrency_tickets:olap大些,OLTP小些(30)
线程事物执行时间

配制优化 -更大的REDO LOG ( REDO LOGS 小的话会导致 CHECKPOINT 数量越多,影响性能)
REDO LOGS 记录了所有的数据变更
恢复时间不再是一个问题(起用备库)
innodb_log_file_size=2047 before 5.6
innodb_log_file_size>=2047 from 5.6
越大系统性能更稳定

interactive_timeout:
mysql> show variables like '%interactive_timeout%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
+---------------------+-------+
1 row in set (0.00 sec)
wait_timeout:
mysql> show variables like '%wait_timeout%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------+
3 rows in set (0.00 sec)
open_file_limit:65535
mysql> show variables like 'open_file%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
max_connections:
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+

设计优化-SCHEMA设计
表默认都设计自增列主键
字段尽可能使用空间小的类型
村绝TEXT/BLOB,可以做垂直拆分,或者转成MYISAM
所有字段显式定义NOT NULL
索引数量不要太多,有负作用
多使用联合索引,少用单独索引
字符型号列需要索引时,创建前缀索引

设计优化-无法使用索引的场景
通过索引找描的记录数超过过30%,变成全表扫描
联合索引中,第一个索引列使用范围查询
联合索引中,第一个查询条件不是最左索引列
模糊查询条件列最左以通配符%开始
两个独立索引,其中一个用于检索,一个用于排序
表关联字段类型不一样(也包括长度不一样)
索引字段条件上使用函数

设计优化-架构设计
减少物理IO,让MYSQL闲下来
转变随机IO为顺序IO
减小活跃起数据
分库分表
读发离
OLTP,OLAP分离

mysql 学习笔记5-- 数据库优化的更多相关文章

  1. MYSQL学习笔记——sql语句优化工具

    优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...

  2. MYSQL学习笔记——sql语句优化之索引

    上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍my ...

  3. MySQL学习笔记02_数据库和表的基本操作

    02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...

  4. MySQL学习笔记01_数据库基础知识

    01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...

  5. MySQL学习笔记(一)—数据库基础

    一.数据库概述 1.数据库的组织结构      (1)数据库就是用来存放信息的仓库.      (2)数据库里的数据集合都存放在数据表(table)里.      (3)数据表由数据行(row)和数据 ...

  6. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  7. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  8. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

  9. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  10. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

随机推荐

  1. 预处理命令#define #undef #if #endif 的基本用法

    C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...

  2. 关于Java(JDBC连接数据库)

    Processing SQL Statements with JDBC 处理JDBC中的SQL语句 这节主要是 JDBC 与数据库交互的基本步骤 JDBC的基石是DriverManager,通过它,J ...

  3. CENTOS6上禁用IPV6和DHCP

    centos 6禁用ipv6方法   首先,在终端输入 ip -6 addr show 和 lsmod | grep ipv6查询一下有无安装IPV6模块,或用netstat -nuptl查看是否有i ...

  4. 【POJ 1984】Navigation Nightmare(带权并查集)

    Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...

  5. PCB 敷铜间距规则(转)

    第一优先规则: First Object = InPolygon, Second Object = All 第二优先规则:First Object = All, Second Object = All ...

  6. FishEye简介

    前言     在项目开发过程中,随着开发的进行,将有大量的代码编写提交到代码仓库,如何能全面准确的了解源代码的变化,提交的频率,代码量的趋势,发现代码的缺陷,将是控制源代码质量的重要指标,这个时候一个 ...

  7. hdu4435 charge-station(先建后拆+bfs)

    charge-station Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. 【HDOJ】1983 Kaitou Kid - The Phantom Thief (2)

    不仅仅是DFS,还需要考虑可以走到终点.同时,需要进行预处理.至多封闭点数为起点和终点的非墙壁点的最小值. #include <iostream> #include <cstdio& ...

  9. xmanager远程登录

  10. Flash加载网页内容

    import flash.net.URLLoader; var m_loader:URLLoader = new URLLoader(); m_loader.addEventListener(Even ...