加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

数据库优化渐进的进程,这些你都知道?

发布时间:2019-01-18 03:58:14 所属栏目:编程 来源:程序界小哥
导读:各人在口试的时辰常常会被问到数据库优化的题目,本日给各人总结了几点: 第一阶段 优化sql和索引 这才是调优的第一阶段啊,为什么呢? 由于这一步本钱最低啊,不必要加什么中间件。 那步调是什么样呢?我说个或许 用慢查询日记定位执行服从低的SQL语句 用e

各人在口试的时辰常常会被问到数据库优化的题目,本日给各人总结了几点:

第一阶段 优化sql和索引

这才是调优的第一阶段啊,为什么呢?

由于这一步本钱最低啊,不必要加什么中间件。

那步调是什么样呢?我说个或许

用慢查询日记定位执行服从低的SQL语句

用explain说明SQL的执行打算

确定题目,采纳响应的优化法子,成立索引等

第二阶段 行使缓存

在优化sql无法办理题目的环境下,才思量搭建缓存。事实你行使缓存的目标,就是将伟大的、耗时的、不常变的执行功效缓存起来,低落数据库的资源耗损。

这里必要留意的是:搭建缓存后,体系的伟大性增进了。你必要思量许多题目,好比:

缓存和数据库同等性题目?(好比是更缓存,照旧删缓存)

缓存击穿、缓存穿透、缓存雪崩题目怎样办理?是否有做缓存预热的须要。不外我猜,大部门中小公司应该都没思量。

第三阶段 读写疏散

缓存也搞不定的环境下,搞主从复制,上读写疏散。在应用层,区分读写哀求。可能操作现成的中间件mycat可能altas等做读写疏散。

必要留意的是,只要你敢说你用了主从架构,有三个题目,你要筹备:

1.主从的甜头?

答复:实现数据库备份,实现数据库负载平衡,进步数据库可用性

2.主从的道理?

答复:如图所示

数据库优化渐进的进程,这些你都知道?

主库有一个log dump线程,将binlog传给从库

从库有两个线程,一个I/O线程,一个SQL线程,I/O线程读取主库传过来的binlog内容并写入到relay log,SQL线程从relay log内里读取内容,写入从库的数据库。

3.怎样办理主从同等性?

答复:这个题目,我不提议在数据库层面办理该题目。按照 CAP 定理,主从架构原来就是一种高可用架构,是无法满意同等性的。

哪怕你回收同步复制模式可能半同步复制模式,都是弱同等性,并不是强同等性。以是,保举照旧操作缓存,来办理该题目。

步调如下:

本身通过测试,计较主从耽误时刻,提议mysql版本为5.7往后,由于mysql自5.7开始,多线程复制成果较量完美,一样平常能担保耽误在1s内。不外话说返来,mysql此刻都出到8.x了,尚有人用5.x的版本么。

数据库的写操纵,先写数据库,再写cache,可是有用期很短,就比主从延时的时刻轻微长一点。

读哀求的时辰,先读缓存,缓存存在则直接返回。假如缓存不存在(这时主从同步已经完成),再读数据库。

第四阶段 操作分区表

说句其真话,你们口试的时辰,着实可以略过这个阶段。由于许多互联网公司都不提议用分区表,我本身也不太提议用分区表,回收这个分区表,坑太多。

这里引用一下其他文章的答复:

什么是mysql的分区表?

答复:全部数据还在一个表中,但物理存储按照必然的法则放在差异的文件中。这个是mysql支持的成果,营业代码不必要窜改,可是sql语句必要窜改,sql前提必要带上分区的列。

弱点

分区键计划不太机动,假如不走分区键,很轻易呈现全表锁

在分区表行使ALTER TABLE … ORDER BY,只能在每个分区内举办order by。

分区表的分区键建设索引,那么这个索引也将被分区。分区键没有全局索引一说。

本成分库分表,本身掌控营业场景与会见模式,可控。分区表,研发写了一个sql,都不确定该去哪个分区查,不太可控。

第五阶段 垂直拆分

上面四个阶段都没搞定,就来垂直拆分了。垂直拆分的伟大度照旧比程度拆分小的。将你的表,按模块拆分为差异的小表。各人应该都看过《大型网站架构演变之路》,这种范例的文章可能书本,根基都有提到这一阶段。

假如你有幸可以或许在什么运营商、银行等公司上班,你会发明他们一个表,几百个字段都是很常见的工作。以是,应该要举办拆分,拆分原则一样平常是如下三点:

把不常用的字段单独放在一张表。

把常用的字段单独放一张表

常常组合查询的列放在一张表中(连系索引)。

第六阶段 程度拆分

程度拆分是最贫困的一个阶段,拆分后会有许多的题目,我再夸大一次,程度拆分必然是最最最最后的选择。从某种意义上,我认为还不如垂直拆分。由于你用垂直拆分,分成差异模块后,发明单模块的压力过大,你完全可以给该模块单独做优化,譬喻进步该模块的呆板设置等。假如是程度拆分,拆成两张表,代码必要变换,然后发明两张表还不可,再变代码,再拆成三张表的?程度拆分后,各模块间耦合性太强,本钱太大,稳重。

【编辑保举】

  1. 数据库人人生长日志:您最必要相识的NoSQL非相关型数据库
  2. 数据库人人生长日志:巧用SQL语句查察SQL Server的布局信息
  3. 数据库人人生长日志:如安在SQL Server查询中实现高效分页
  4. 数据库人人生长日志:巧用SQL语句,小能力办理大题目!
  5. 数据库的“行式存储”和“列式存储”
  6. 你真的相识数据库工程师吗?写给想从事数据库方面事变的伴侣
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读