mysql 优化学习一
来源:互联网 发布:杭州 政府网站 建站 编辑:程序博客网 时间:2024/05/18 02:44
影响数据库的因素
- 服务器硬件性能
- 磁盘IO
- sql查询速度
- 网卡流量
QPS: 每秒钟处理的查询量TPS: 每秒钟处理的事务数并发量:同一时刻所需要数据服务器做处理的请求的数量连接量:往往要比并发量大得多,是客户端与数据库服务器建立的链接数量
超高的QPS 和 TPS
10ms 处理一个sql => 1s 处理 100个sql => QPS => 100
100ms处理一个sql => 1s 处理 10 个sql => QPS => 10
数据库性能 80%是由于慢查询引起的,即大部分的数据库性能问题可以通过sql优化来解决。
大量的并发和超高的CPU使用率所带来的风险
- 大量的并发:数据库连接数被沾满(max_connection默认100)
- 超高的CPU使用率:因CPU资源耗尽而出现宕机
磁盘IO
数据库的只要瓶颈
- 磁盘IO性能突然下降(热数据远远大于服务器可用内存=>使用更快的磁盘设备)
- 其他大量的消耗磁盘性能的计划任务(调整计划任务、做好磁盘维护)
网卡流量
- 网卡IO被沾满(1000Mb/8 ≈ 100MB)
- 减少从服务器的数量
- 进行分级缓存
- 避免使用select * 进行查询
- 分离业务网络和服务器网络
大表带来的问题
什么是大表:
1. 记录行数巨大,单表超过千万行2. 表数据文件巨大,表数据文件超过10G
大表对查询的影响:
慢查询:很难再一定的时间内过滤出所需的数据
大表对DDL的影响:
1. 建立索引需要很长的时间 1). Mysql版本<5.5 建立索引会锁表 2). Mysql版本>=5.5 虽然不会锁表,但会引起主从延迟2. 修改表结构需要长时间锁表 1). 会造成长时间的主从延迟 2). 影响正常的数据操作(会阻塞)
如何处理数据库中的大表问题
分库分表把一张大表分成多个小表
难点: 分表主键的选择 分表后跨分区数据的查询和统计
大表的历史数据归档(减少对前后端业务的影响)
难点: 归档时间点的选择 如何进行归档操作
大事务带来的问题
1. 事务是数据库系统区别与其他一切文件系统的重要特性之一2. 事务是一组具有原子性的sql语句,或是一个独立执行的单元3. 事务需要符合的四大特性:①原子性(ATOMICITY) ②一致性 (CONSISTENCY)③ 隔离性 (ISOLATION)④持久性
定义:一个事务必须是一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作
事务原子性(ATOMICITY):整个事务要么全部提交成功,要么全部失败回滚
事务一致性(CONSISTENCY):一致性是指将数据库从一种一致性状态转换到另一种一致性状态,在事务开始之前和事务结束后数据库中数据的完整性没有被破坏
事务隔离性(ISOLATION):隔离性要求一个事务对数据库中数据的修改,在未提交完成前对于其他事务是不可见的
SQL标准中定义了四中隔离级别:(隔离性由低到高,并发性有高到低)
1. 未提交读(READ UNCOMMITED),会产生脏读
2. 已提交读(READ COMMITTED)
3. 可重复读(REPEATABLE READ)
4. 可串行化(SERIALIZABLE)
事务持久性(DURABILITY):一旦事务提交,则其所做的修改就会永久保存到数据库中,此时系统崩溃,已提交的修改数据也不会丢失。
mysql查看隔离级别:show variables like '%iso%';mysql修改隔离级别:(可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.) ①修改mysql.ini: [mysqld] transaction-isolation = REPEATABLE-READ ②客户端修改: SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]innodb默认的隔离级别是可重复度(REPEATABLE READ)
所谓的大事务就是:运行时间比较长,操作数据比较多的事务
问题:
1. 锁定太多的数据,造成大量的阻塞和锁超时
2. 回滚需要的时间比较长,会锁定回滚所需要的行,所需时间甚至比修改所需时间还要长。
3. 执行时间长,容易造成主从延迟
如何处理大事务:
1. 避免一次处理提多的数据
2. 移出不必要在事务中的SELECT操作
- mysql 优化学习一
- MySql 学习笔记一:SQL语句优化
- mysql学习笔记之优化篇一
- 《mysql学习》-- mysql优化
- Mysql优化学习总结(一)--引擎的选择
- MySQL 优化(一)
- MySQL 优化(一)
- MYSQL服务器优化---(一)
- Mysql 优化说明一
- mysql优化(一)
- MySQL优化(一)
- MYSQL语句优化(一)
- mysql优化一
- MySQL性能优化(一)
- mysql一: 索引优化
- mysql 数据库优化 一
- Mysql性能优化一
- Mysql性能优化一
- GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
- spring 中自定义工具类 解决@Autowired为null
- 掌握JVM一篇就够
- ajax_Get请求
- 刷题知识点汇总(一)
- mysql 优化学习一
- elasticsearch(一) 基础入门级demo
- Kattis
- HDU1717(小数化分数,思维数学题)
- 'str' object has no attribute 'streaming'
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)
- ajax—post请求
- 安装Jenkins时不能联网安装插件问题解决
- windows用mysql命令导入大数据的解决方法(phpmyadmin导入慢的解决办法)