IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL优化 -> 正文阅读

[大数据]MySQL优化

MySQL瓶颈优化(业务从小到大的转变) 假设一个网站从最开始访问量很小做到日PV千万,我们来推测一下 它的mysql服务器架构演变过程。 第一阶段: 网站访问量日pv量级在1w以下。单台机器跑web和db,不需要做 架构层调优(比如,不需要增加memcached缓存)。此时,数据往往都是每日冷备份的,但是有时候如果考虑 数据安全性,会搭建一个mysql主从。 第二阶段: 网站访问量日pv达到几万。此时单台机器已经有点负载,需 要我们把web和db分开,需要搭建memcached服务作为缓存。也就是说,在这个阶段,我们还可以使用单台机 器跑mysql去承担整个网站的数据存储和查询。如果做mysql主从目的也是为了数据安全性。 第三阶段: 网站 访问量日pv达到几十万。单台机器虽然也可以支撑,但是需要的机器配置要比之前的机器多好多。如果经费允 许,可以购买配置很高的机器来跑mysql服务,但是并不是说,配置翻倍,到了一定阶段配置增加已经不能带 来性能的增加。所以,此阶段,我们会想到做mysql服务的集群,也就是说我们可以拿多台机器跑mysql。但 mysql的集群和web集群是不一样的,我们需要考虑数据的一致性,所以不能简单套用做web集群的方式。可以 做的架构是,mysql主从,一主多从。为了保证架构的强壮和数据完整,主只能是一个,从可以是多个。还有 一个问题,我们需要想到,就是在前端web层,我们程序里面指定了mysql机器的ip,那么当mysql机器有多台 时,程序里面如何去配置?我们可以拿多台机器跑mysql,其中一台写,其他多台是读,我们只需要把读写的ip 分别配置到程序中,程序自动会去区分机器。 第四阶段: 网站访问量日pv到几百万。之前的一主多从模式已 经遇到瓶颈,因为当网站访问量变大,读数据库的量也会越来越大,我们需要多加一些从进来,但是从的数量 增加到数十台时,由于主需要把bin-log全部分到所以从上,那么这个过程本身就是一件很繁琐读取,势必会造 成从上同步过来的数据有很大延迟。所以,我们可以做一个优化,把mysql原来的一主多从为一主一从,然后 作为其他从的主,而前面的主,只负责网站业务的写入,而后面的从不负责网站任何业务,只负责给其他从同 步bin-log。这样还可以继续多叠加几个从库。 第五阶段: 网站访问量日pv到1千万的时候,我们发现,网站的 写入量非常大,我们之前架构中只有一个主,这里的主已经成为瓶颈了。所以,需要再进一步作出调整

(24条消息) MySQL创建添加删除索引_m0_46648661的博客-CSDN博客https://blog.csdn.net/m0_46648661/article/details/121092594?spm=1001.2014.3001.5501

解决瓶颈:做索引 查询一些MySQL数据库的性能参数用show status

这是查看链接mysql服务器的次数

?Uptime:mysql服务器的上线时间

?Com_select:查询操作的次数 每次执行select就会加一

?Com_insert:插入操作的次数

?Com_update:更新操作的次数

?Com_delete:删除操作的次数

?Slow_queries:查询mysql服务器的慢查询次数

实验我们所需要的表。

mysql> create table fruits 
 -> (
 -> f_id char(10) not null,
 -> s_id int not null,
 -> f_name char(255) not null,
 -> f_price decimal(8,2) not null,
 -> primary key(f_id)
 -> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into fruits(f_id,s_id,f_name,f_price)
 -> values('a1',101,'apple','5.2'),
 -> ('b1',101,'blackberry','10.2'),
 -> ('bs1',102,'orange','11.2'),
 -> ('bs2',105,'melon','8.2'),
 -> ('t1',102,'banana','10.3'),
 -> ('t2',102,'grape','5.3'),
 -> ('o2',103,'coconut','9.2'),
 -> ('c0',101,'cherry','3.2'),
 -> ('a2',103,'apricot','2.2'),
 -> ('l2',104,'lemon','6.4'),
 -> ('b2',104,'berry','7.6'),
 -> ('m1',106,'mango','15.7'),
 -> ('m2',105,'xbabay','2.6'),
 -> ('t4',107,'xbababa','3.6'),
 -> ('m3',105,'xxtt','11.6'),
 -> ('b5',107,'xxxx','3.6');
Query OK, 16 rows affected (0.02 sec)
Records: 16 Duplicates: 0 Warnings: 0

?分析查询语句

?Select_type:表示select语句的类型 其中simple 是简单查询(不包括连接查询和子查询) Primary 主查询 Union 连 接查询 Type:表的连接类型 System仅有系统表一行 Const 数据表中最多只有一行匹配,将在查询开始时被读取,并在 余下的查询优化中,作为常量 Eq_ref 用于使用 = 操作符比较带索引的列 ref 对于来自前面的表的任意行的组 合,从该表中读取所有匹配的行 ref_or_null 同上,添加可以专门搜索包含null值的行 index_merge 将连接类型 表示使用了索引并优化方法 range 只检索给定范围的行 index 与all的连接类型相同,除了只扫描索引树 all 前面 的表的任意行的组合,进行完整的表的扫描 possible_keys: NULL //指出mysql使用哪个索引在表中找到行 NULL表示没有创建索引

describe select 语句和分析查询语句

我们可以简写直接desc?

?索引提高了查询效率 Create index 索引名 on 表名(字段)

添加单列索引

?

?优化查询速度 注意: 1做索引了之后,用 like ‘xx%’ %不在第一位查询效率最高

?多字段索引,除了第一字段查询最快,其余不按索引来,索引不生效

?

?若创建索引所设置的字段,查询索引组合 or 左右边的值都是属于索引设置字段下的值

?

?profiling分析查询 通过慢日志查询可以知道哪些SQL语句执行效率低下,通过explain我们可以得知SQL语句的 具体执行情况,索引使用等,还可以结合show命令查看执行状态。如果觉得explain的信息不够详细,可以同通 过profiling命令得到更准确的SQL执行消耗系统资源的信息。 profiling默认是关闭的。可以通过以下语句查看

?打开profiling功能: mysql>set profiling=1; 执行需要测试的sql 语句:

执行要测试的sql语句

?

?

?

?status:是profile里的状态,duration:是status状态下的耗时。因此我们关注的就是那个状态最耗时,这些状态 中那些可以优化。 当然也可以查看更多的信息如CPU等等

SHOW PROFILE [type [, type] ... ][FOR QUERY n] type: ?? ????ALL:显示所有的开销信息 ?? ???BLOCK IO:显示 块IO相关开销 ?? ???CPU:显示用户CPU时间、系统CPU时间 ?? ???IPC:显示发送和接收相关开销信息 ?? ????PAGE FAULTS:显示页面错误相关开销信息 ?? ???SWAPS:显示交换次数相关开销的信息 测试完成之以 后,记得要关闭调试功能,以免影响数据库的正常使用:

?优化数据库表结构 将字段很多的表分解成多个表 查看表的表结构

优化表结构 1 将字段很多的表分解成多个表 2 增加中间表 3 合理增加冗余字段 4 优化插入记录的速度 (1), 禁用索引(在插入数据之前禁用索引,会让创建索引不会生效,命令:alter table 表名 disable keys ,注意表的 创建表后加引擎 engine=myisam,可以禁用成功)

show create table 表面\g可以看表的引擎

修改引擎

?

?

?禁用唯一性检查(插入记录之前禁用唯一性检查,命令:set unique_checks=0 关闭set unique_checks=1)

?

?使用批量插入(多条插入命令整合成一条命令)

mysql> INSERT INTO fruits values('x1','101','mongo2','5.5');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO fruits values('x2','101','mongo2','5.5');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO fruits values('x3','101','mongo2','5.5');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO fruits values('x4','101','mongo2','5.5');
Query OK, 1 row affected (0.01 sec)
mysql> insert into fruits values ('x8','101','mongo2','5.5'),
('x7','101','mongo2','5.5'), ('x6','101','mongo2','5.5'),
('x5','101','mongo2','5.5'); 
Query OK, 4 rows affected (0.07 sec)
Records: 4 Duplicates: 0 Warnings: 0

?使用load data infile批量插入 对于innnodb表来说 (1) 禁用唯一性检查

?禁用外键检查(命令: set foreign_key_checks=0,开启=1)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:41:33  更:2021-11-19 17:42:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:48:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码