提高IOPS能力的几种方法
换SSD,PCIE-SSD(提高IO效率,普通SAS盘5000以内的iops,而新设备可达到数万或者数十万iops)
少做IO的活(合并多次读写为一次,或者前端加内存CACHE;或者优化业务,消除IO)
加大内存(更多hot data和dirty data放在内存中,减少物理IO)
调整文件系统为xfs(相比ext3、ext4提高IOPS能力,高io负载下表现更佳)
调整raid级别为raid 1+0(相比raid1、raid5等提高IOPS能力)
调整写cache策略为wb或force wb(利用阵列卡cache,提高iops)
io scheduler(优先使用deadline,如果是SSD,则使用noop)

SSD设备相关优化手段
• 通过调整 /sys/block/sdx/queue/read_ahead_kb 观察到预读大小为16KB(具体多少要看平均每次IO读大小),通过适当预读提高整体性能。
• 大量的IO请求数必定会产生庞大数量的中断请求,因此需要在多核上绑定中断,避免单核负载过高。

vm.swappiness 设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去,在内存不够用时,释放掉,尽量不使用swap
RHEL 7以下设置为0,RHEL 7以上谨慎设置为5 ~ 10,减少使用swap的概率
[root@localhost ~]# cat /etc/sysctl.conf |grep vm.swappiness
[root@mysql1 ~]# vim /etc/sysctl.conf
[root@mysql1 ~]# sysctl -p
mysql 不使用HugePages
### TokuDB need this kernel settings, start
echo never &get; /sys/kernel/mm/redhat_transparent_hugepage/defrag
echo never &get; /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never &get; /sys/kernel/mm/transparent_hugepage/enabled
echo never &get; /sys/kernel/mm/transparent_hugepage/defrag
### TokuDB need this kernel settings, end

deadline: deadline 算法保证对既定的IO请求以最小的延迟时间。
anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。对数据库应用很糟糕,而对于Web Server等则会表现不错。
cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

首选xfs,其次ext4
mount参数:noatime, nodiratime, nobarrier
对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=0;对于xfs可以指定nobarrier选项

query_cache_type = 0
query_cache_size = 0
tmp_table_size / max_heap_table_size 不建议超过128MB,高并发,简单SQL的场景中,不建议超过64MB
sort_buffer_size / read_buffer_size 等不建议超过8MB
纯InnoDB环境下,key_buffer_size 不建议超过32MB

日志相关
long_query_time = 0.01(10毫秒)
pt-query-digest + Box Anemometer,构建slow query log分析系统
genral_log = 0
log_warnings = 2
binlog = 0/1
sync_binlog = 0/1/N 需要权衡
log_slave_updates = 0/1,在一个集群中,只有一个SLAVE节点开启,其他SLAVE都不开启

MySQL Schema设计原则、优化建议;
• 默认InnoDB,杜绝MyISAM
• 不对InnnoDB表进行在线实时统计
• InnoDB表显式指定自增INT型为主键
• 表字段设计:简单至上
• INT/TIMESTAMP记录时间,而非DATETIME
• IPV4地址用INT,而不是CHAR(15)
• 性别采用ENUM(1,2,3)或者是 tinyint,而不是INT,甚至CHAR
• 杜绝TEXT、BLOG,确实需要则拆分
• 存储较长字符串内容时,提前进行(物理、逻辑)压缩、序列化(JSON/BSON格式)
• 相同用途未来可能会作为JOIN依据的字段,在各个表里的定义属性完全一致
• 显式约束:NOT NULL,DEFAULT ''

CREATE TABLE `sy_hot_words` (
`id` int(11) NOT NULL,
`hot_words` varchar(510) default NULL COMMENT '热词以逗号隔开',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
可以调整为纵向存储,或使用其他模糊搜索技术实现,
或者拆分开,采用 1对N 的结构实现,或者在nosql里,用K-V方式存储

Schema设计、优化,我们可做的:
-- 理解各业务产生的数据流,以及读写数据的方式;
-- 整理数据流中的每个数据项属性信息(类型、范围、过滤性);
-- 分析业务指标,推测数据规模(需要考虑相对长远,例如半年以上,也可以生成一定量级的测试数据,例如至少100万行);
-- 选择相对最适用的硬件设备和数据库架构;
-- 权衡各个SQL的性能和IO量,也即类似于哪个操作权重高一些,那些操作权重适当低一些;
-- 创建适当的索引;
-- 收集测试和生产环境的反馈信息,持续优化索引及表设计;

索引使用中的局限性;
- 通过索引扫描的记录数超过30%,变成全表扫描
- 联合索引中,第一个索引列使用范围查询
- 联合索引中,第一个查询条件不是最左索引列
- 模糊查询条件列最左以通配符 % 开始
- 内存表(HEAP 表)使用HASH索引时,使用范围检索或者ORDER BY
- 两个独立索引,其中一个用于检索,一个用于排序

• 主键/唯一索性能引优于普通索引
• 复合索引比普通索引更合适
• 过度索引可能会带来灾难,够用就行
• 基数(cardinality)很小的列上不建索引
• 长字段使用部分索引,而非全部
• 冗余反向字段便于反向检索
• 采用第三方全文索引工具或者关键字(TAG)对TEXT/BLOB/CHAR字段检索
• 常用检索、排序字段,需要创建索引
• 常用检索、分组(GROUP BY)、排序(ORDER BY)字段,需要创建索引

转载于:https://www.cnblogs.com/yhq1314/p/10671195.html

mysql 优化 (1)相关推荐

  1. MySQL优化配置之query_cache_size

    原理 MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段.  查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失 ...

  2. 小型网站到大型网站-Mysql优化

    2019独角兽企业重金招聘Python工程师标准>>> 背景 好的大型网站都是从小型网站慢慢演变来的,都不是一步就设计好的.现在的淘宝,03年创建的时候它也是只有一台服务器,使用的是 ...

  3. 4 个 MySQL 优化工具 AWR,帮你准确定位数据库瓶颈!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:今日头条,作者:老王谈运维 www.toutiao.com/ ...

  4. mysql优化 博客园_MySQL优化

    MySQL优化步骤 首先学会如何定位到SQL语句 1.1查看SQL语句的执行次数 在MySQL中可以通过命令查看服务器该表状态信息 show status like 'Com_______'; 如果想 ...

  5. MySQL优化—工欲善其事,必先利其器之EXPLAIN

    mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...

  6. 项目中常用的19条MySQL优化

    声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...

  7. MySQL优化经验-值得细细品读

    MySQL优化经验: 同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通 ...

  8. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  9. 项目中常用的 19 条 MySQL 优化总结

    作者:zhangqh 地址:segmentfault.com/a/1190000012155267 本文总结了19条关于Mysql的优化方案,本文的优化方案都是基于 " Mysql-索引-B ...

  10. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

最新文章

  1. 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)
  2. 第3章 衡量线性回归的指标:MSE,RMSE,MAE
  3. 深入理解java SPI机制
  4. n条线分平面问题解决方法总结
  5. 【总结】言有三阿里天池深度学习模型设计直播汇总
  6. 2011年第二届蓝桥杯决赛 —— C语言本科 —— 第一题
  7. python 枚举相等判断_python中is和==的区别
  8. mac下nvm_Mac OS 使用 nvm 管理 node 与 npm 版本
  9. 最大素因子(不是题目!自己写着玩的。。。)
  10. LeetCode 1726. 同积元组(排列组合)
  11. java中如果需要返回多个值怎么办
  12. 安卓开发1-质量管理app-技术预演
  13. 预见2021:《2021年中国呼叫中心产业全景图谱》 未来十年八大预测
  14. 6.Hibernate多对多关系建立
  15. js dojo 保存txt文件
  16. 编写hive udf函数
  17. mysql oracle 左链接_mysql左连接与oracle(+)使用对照
  18. M - 13 HDU - 3351 (栈)
  19. 多智能体强化学习(二) MAPPO算法详解
  20. latex和word文档互相转换

热门文章

  1. 基于springboot+vue的旅游信息(旅游线路)网站(前后端分离)
  2. Filebeat 5.x 日志收集器 安装和配置
  3. linux 下 docker NGINX+PHP+MYSQL+REDIS+Elasticsearch 开发环境搭建
  4. Docker 概述 与 CentOS 上安装、卸载、启动
  5. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用...
  6. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
  7. Vue项目需求实现记录总目录(永久更新)
  8. eclipse安装activiti 工作流插件
  9. ObjC点击H5图片Native预览
  10. 为什么房间的 Wi-Fi 信号这么差