mysql 学习笔记5-- 数据库优化
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-- 数据库优化的更多相关文章
- MYSQL学习笔记——sql语句优化工具
优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...
- MYSQL学习笔记——sql语句优化之索引
上一篇博客讲了可以使用慢查询日志定位耗时sql,使用explain命令查看mysql的执行计划,以及使用profiling工具查看语句执行真正耗时的地方,当定位了耗时之后怎样优化呢?这篇博客会介绍my ...
- MySQL学习笔记02_数据库和表的基本操作
02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...
- MySQL学习笔记01_数据库基础知识
01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...
- MySQL学习笔记(一)—数据库基础
一.数据库概述 1.数据库的组织结构 (1)数据库就是用来存放信息的仓库. (2)数据库里的数据集合都存放在数据表(table)里. (3)数据表由数据行(row)和数据 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
- 数据库MySQL学习笔记高级篇
数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
随机推荐
- 数据采集服务提供商,ip提供商 里面有些不错的基础数据
http://user.qzone.qq.com/1649677458 这家公司的爬虫应该挺牛的 !@#!#!~#¥¥¥@@http://www.site-digger.com/
- Java多线程初学者指南(12):使用Synchronized块同步变量
我们可以通过synchronized块来同步特定的静态或非静态方法.要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传 ...
- jQuery预加载插件
插件描述:jQuery Fadeloader的插件可以让你轻松实现预加载到您的网站或部分使用级联渐显效果来显示特定的内容块(例如,头> MENU>内容>页脚) jQuery Fa ...
- xbmc
XBMC是一个优秀的自由和开源的(GPL)媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0系统.XBMC能够播放几乎所有流行的音频和视频格 ...
- ANDROID_MARS学习笔记_S04_008_用Listview、自定义adapter显示返回的微博数据
一.简介 运行结果 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"? ...
- VS2013 ASP.NET MVC 修改Web项目的IISExpress的端口固定
[首先]关闭防火墙,或防火墙开放端口 在解决方案中,右键某项目,属性——Web——服务器——选择IISExpress URL输入:http://localhost:8000/ 直接将8000更改 ...
- 转:Java图形化界面设计——布局管理器之FlowLayout(流式布局)其他请参考转载出处网址
http://blog.csdn.net/liujun13579/article/details/7771191 前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以 ...
- C++中new和不new的区别
我们都知道C++中有三种创建对象的方法,如下: 复制代码代码如下: #include <iostream>using namespace std; class A{private: ...
- 【HDOJ】2721 Persistent Bits
题目有点长,但是题意说的很清楚.位操作. #include <stdio.h> ]; int main() { int a, b, c, s; int i, j, k, n, tmp, m ...
- linux中nginx的安装,linux的版本是ubutu
linux环境下,安装nginx,报错如下: the HTTP rewrite module requires the PCRE library. 1.需要安装pcre,报一下错误: you need ...