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. [原博客] POI系列(3)

    正规.严谨.精妙. -POI BZOJ 1131 : [POI2008]Sta 树形dp吧,让求找一个点使以这个点深度和最小.首先可以随便整出来一棵树,对于每个节点记录down[i]以i为根下面的点的 ...

  2. java虚拟机运行机制

    转自java虚拟机运行机制 首先简单阐述下解释型语言和编译型语言的联系与区别. 编译型语言是通过编译器将程序编译成目标机器所能识别的机器码,而解释型语言不需要编译过程.由该语言的解释器读取脚本,按照语 ...

  3. VisualSvn Server安装和使用

    原文地址:http://www.cnblogs.com/jiahuafu/archive/2012/12/22/2828955.html VisualSvn Server介绍 1 .VisualSvn ...

  4. INFORMATION_SCHEMA.INNODB_LOCKS

    INNODB_LOCKS Table: INNODB_LOCKS 表 包含信息关于每个锁 一个InnoDB 事务已经请求 但是没有获得锁, 每个lock 一个事务持有是堵塞另外一个事务 centos6 ...

  5. 转:十八、java中this的用法

    http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...

  6. 【HDOJ】3466 Proud Merchants

    先排序预处理,后01背包. #include <stdio.h> #include <string.h> #include <stdlib.h> #define M ...

  7. 如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题

     注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...

  8. java 枚举(括号赋值)

    详解在这里 要注意的是: 1. 通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错2. 赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值:如果不赋值则不能写构造器,赋值编译也出错 ...

  9. linearizing the depth in vertex shader

    please refer to http://www.mvps.org/directx/articles/linear_z/linearz.htm When using a programmable ...

  10. 2013 ACM区域赛长沙 A Alice’s Print Service HDU 4791

    题意:就是一个打印分段收费政策,印的越多,单张价格越低,输入需要印刷的数量,求最小印刷费用一个细节就是,比当前还小的状态可能是最后几个. #include<stdio.h> #includ ...