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. JNI/NDK开发指南(开山篇)

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/41759643 相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术, ...

  2. Python Web 性能和压力测试 multi-mechanize

    http://www.aikaiyuan.com/5318.html 对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具L ...

  3. 设计模式之装饰(Decorator)模式 代码详解

    /** * Created with IntelliJ IDEA. * User: HYY * Date: 13-10-27 * Time: 下午10:49 * To change this temp ...

  4. ruby面向对象class

    ruby对象是严格封装的:只能通过定义的方法访问其内部状态.方法使用的成员变量在对象外部不能直接访问,不过可以通过getter.setter等访问器方法(accessor),使他们看起来好像是直接访问 ...

  5. Lua table pair和ipair区别

    官方描述: ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the constru ...

  6. 【Android开发经验】ViewHolder到底用什么修饰?static?final?static final?

    其实一上来我就贴一张图就ok了,因为这几种完全一样,不管用什么修饰,ViewHolder都会初始化当前界面可见item的数量+1次,和convertView的实例化次数是一样的,因此,我么不管使用什么 ...

  7. 栈的实现(JAVA)

    栈定义 栈(stack):是一种特殊的串行形式的数据结构,其特殊之处在于只允许在链接串行或者阵列的 一端进行插入.删除操作.其实现方式可以通过一维阵列和链接串行来实现. Tips:简单的来说栈其实也是 ...

  8. Vijos_1792_摆花_(动态规划,多重集组合数)

    描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案.   描述 小明的花店新开张,为了吸引顾客, ...

  9. xcode5.1 cocoapods报错

    Xcode升级到5.1了,apple默认让所有app都通过64位编译器编译,所以会报各种错误信息,关闭64位编译就好了. 选中Targets—>Build Settings—>Archit ...

  10. cocos2d-x学习笔记1——Cocos2D-x 中的核心类

    Cocos2D-x 引擎的设计思路是将游戏的各个部分抽象成几个概念,包括导演.场景.布景层和人物精灵,它们之间的关系如图3-1 所示: 导演(CCDirector): 顾名思义,导演类是游戏中的组织者 ...