linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...

一、SQL查询优化(重要)

1.1 获取有性能问题SQL的三种方式

  1. 通过用户反馈获取存在性能问题的SQL;

  2. 通过慢查日志获取存在性能问题的SQL;

  3. 实时获取存在性能问题的SQL;

1.1.2 慢查日志分析工具

相关配置参数:

slow_query_log # 启动停止记录慢查日志,慢查询日志默认是没有开启的可以在配置文件中开启(on)
slow_query_log_file # 指定慢查日志的存储路径及文件,日志存储和数据从存储应该分开存储

long_query_time # 指定记录慢查询日志SQL执行时间的阀值默认值为10秒通常,对于一个繁忙的系统来说,改为0.001秒(1毫秒)比较合适
log_queries_not_using_indexes #是否记录未使用索引的SQL

常用工具:mysqldumpslow和pt-query-digest

pt-query-digest --explain h=127.0.0.1,u=root,p=p@ssWord  slow-mysql.log

1.1.3 实时获取有性能问题的SQL(推荐)

40b8b4d6202ed69e47bb3ec5fe477515.png

SELECT id,user,host,DB,command,time,state,info
FROM information_schema.processlist
WHERE TIME>=60

查询当前服务器执行超过60s的SQL,可以通过脚本周期性的来执行这条SQL,就能查出有问题的SQL。

1.2 SQL的解析预处理及生成执行计划(重要)

1.2.1 查询过程描述(重点!!!)

978259a74ce38b9fb1fa5139beafbdd0.png

通过上图可以清晰的了解到MySql查询执行的大致过程:

  1. 发送SQL语句。

  2. 查询缓存,如果命中缓存直接返回结果。

  3. SQL解析,预处理,再由优化器生成对应的查询执行计划。

  4. 执行查询,调用存储引擎API获取数据。

  5. 返回结果。

1.2.2 查询缓存对性能的影响(建议关闭缓存)

第一阶段:相关配置参数:

query_cache_type # 设置查询缓存是否可用
query_cache_size # 设置查询缓存的内存大小
query_cache_limit # 设置查询缓存可用的存储最大值(加上sql_no_cache可以提高效率)
query_cache_wlock_invalidate # 设置数据表被锁后是否返回缓存中的数据
query_cache_min_res_unit # 设置查询缓存分配的内存块的最小单
缓存查找是利用对大小写敏感的哈希查找来实现的,Hash查找只能进行全值查找(sql完全一致),如果缓存命中,检查用户权限,如果权限允许,直接返回,查询不被解析,也不会生成查询计划。

在一个读写比较频繁的系统中,建议关闭缓存,因为缓存更新会加锁。将query_cache_type设置为off,query_cache_size设置为0。

1.2.3  第二阶段:MySQL依照执行计划和存储引擎进行交互

这个阶段包括了多个子过程:

  37eb320047203b93c53181ba78659d0c.png

  23ab83f07d15107e6f1db8410e4688b8.png

  0833c2b547685f2dba832f1b6b5874c4.png

一条查询可以有多种查询方式,查询优化器会对每一种查询方式的(存储引擎)统计信息进行比较,找到成本最低的查询方式,这也就是索引不能太多的原因。

1.3 会造成MySQL生成错误的执行计划的原因

    1、统计信息不准确    2、成本估算与实际的执行计划成本不同

    6d85f6f1f82a5d4627632afc79cf17e0.png

   3、给出的最优执行计划与估计的不同

    880d676c99ef1107caaf5ca918f1416a.png

    4、MySQL不考虑并发查询    5、会基于固定规则生成执行计划    6、MySQL不考虑不受其控制的成本,如存储过程,用户自定义函数

1.4 MySQL优化器可优化的SQL类型

查询优化器:对查询进行优化并查询mysql认为的成本最低的执行计划。为了生成最优的执行计划,查询优化器会对一些查询进行改写

  可以优化的sql类型

  1、重新定义表的关联顺序;

  9cb9fa0beca94551001056b0b193480f.png

  2、将外连接转换为内连接;

  3、使用等价变换规则;

  662d98afdd45feb05a8c15fa2e2d395e.png

  4、优化count(),min(),max();

  990f735c09cd89d4b3ffce32d4d8a36b.png

  5、将一个表达式转换为常数;  6、子查询优化;

  4578061931e1dc2b6df24bf6781641fe.png

  7、提前终止查询,如发现一个不成立条件(如where id = -1),立即返回一个空结果;

  8、对in()条件进行优化;

1.5 查询处理各个阶段所需要的时间

1.5.1 使用profile(目前已经不推荐使用了)

set profiling = 1; #启动profile,这是一个session级的配制执行查询

show profiles; # 查询每一个查询所消耗的总时间的信息

show profiles for query N; # 查询的每个阶段所消耗的时间

1.5.2 performance_schema是5.5引入的一个性能分析引擎(5.5版本时期开销比较大)

启动监控和历史记录表:use performance_schema

update setup_instruments set enabled='YES',TIME = 'YES' WHERE NAME LIKE 'stage%';

update set_consumbers set enabled='YES',TIME = 'YES' WHERE NAME LIKE 'event%';

    9d71f3140f194f99c3ce71501482630c.png

    544b6c7122a372567410beb0f4b8c343.png

1.6 特定SQL的查询优化

1.6.1 大表的数据修改

    7f992ff07dce2d4f483c9f8cce9dfbd9.png

    d26aa6e3144468999bbc14c123f48173.png

1.6.2 大表的结构修改

对表中的列的字段类型进行修改

改变字段的宽度时还是会锁表

无法解决主从数据库延迟的问题

  1. 利用主从复制,先对从服务器进入修改,然后主从切换

  2. (推荐)

添加一个新表(修改后的结构),老表数据导入新表,老表建立触发器,修改数据同步到新表, 老表加一个排它锁(重命名), 新表重命名, 删除老表。

    ec9ad4b320649dda648bf99cf95eedc9.png

修改语句这个样子:

alter table sbtest4 modify c varchar(150) not null default ''

利用工具修改:

    6cc8cea397380b6c45547b94ca133264.png

1.6.3 优化not in 和 <> 查询

  子查询改写为关联查询:

SELECT customer_id,first_name,last_name,email 
FROM customer
WHERE customer_id
NOT IN (SELECT customer_id FROM payment) 

改写后:

SELECT a.customer_id,a.first_name,a.last_name,a.email 
FROM customer a
LEFT JOIN payment b ON a.customer_id = b.customer_id
WHERE b.customer_id IS NULL

二、分库分表

2.1 分库分表的几种方式

分担读负载 可通过 一主多从,升级硬件来解决。

2.1.1 把一个实例中的多个数据库拆分到不同实例(集群)

8b7aab7f6ea858dc68c169da8fc605f4.png

拆分简单,不允许跨库。但并不能减少写负载。

2.1.2 把一个库中的表分离到不同的数据库中

678fc3b1d09651ed12683196f7a9d670.png

该方式只能在一定时间内减少写压力。

以上两种方式只能暂时解决读写性能问题。

2.1.3  数据库分片

对一个库中的相关表进行水平拆分到不同实例的数据库中

3d28f2acd00732b44e5f74752d8861ba.png

2.1.3.1 如何选择分区键

  1. 分区键要能尽可能避免跨分区查询的发生

  2. 分区键要尽可能使各个分区中的数据平均

2.1.3.2 分片中如何生成全局唯一ID

使用auto_increment_increment和auto_increment_offset参数使用全局节点来生成ID在Redis等缓存服务器中创建全局ID(推荐)

完!

唐成勇

https://segmentfault.com/a/1190000013781544

aceee9f12e48692ef1118626719f1d15.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

武汉船舶职业技术学院计算机分数线,武汉船舶职业技术学院录取分数线2021是多少分(附历年录取分数线)...

武汉船舶职业技术学院录取分数线2020是多少分&#xff0c;各专业录取分数线是多少&#xff0c;是每个填报武汉船舶职业技术学院的考生最关注的问题&#xff0c;随着各省高考录取批次相继公布&#xff0c;考生也开始关心是否被录取&#xff0c;本站小编整理相关信息供参考&#…

linux std::queue 怎么释放内存_电脑卡慢怎么办?一个小工具帮你轻松释放内存,瞬间提升电脑性能...

有一种电脑叫“卡巴死机”大家有没有发现&#xff0c;如今的电子产品越来越不耐用了。无论是电脑&#xff0c;还是手机&#xff0c;超过一年以上&#xff0c;就得考虑更换了。1G变2G&#xff0c;2G升4G&#xff0c;按理说电脑应该会更快更好&#xff0c;实际却是相反&#xff0…

2015计算机二级公共基础知识,2015年计算机二级公共基础知识考点测试题(8)

排序技术1[单选题]对长度n的线性表排序&#xff0c;在最坏情况下&#xff0c;比较次数不是n(n一1)/2的排序方法是(  )。参考答案&#xff1a;D参考解析&#xff1a;排序技术有&#xff1a;①交换类排序法(冒泡排序法、快速排序法);②插入类排序法(简单插入排序、希尔排序);③…

2020年周数和日期对应表_2020年雅思考试报名截止日期、准考证打印日期和成绩单寄送日期...

2020年雅思考试报名截止日期、准考证打印日期和成绩单寄送日期考试日期类别口试预定 开始日期*报名截止日期准考证 打印日期成绩单 寄送日期*04/01/2020A14/12/201916/12/201925/12/201917/01/202011/01/2020A&#xff0b;G21/12/201923/12/201901/01/202031/01/202016/01/2020…

飞行摇杆设置_HORI皇牌空战7最新飞行摇杆抢先开箱 设计出色布局合理

《皇牌空战7》即将于1月17日发售PS4/Xbox One版&#xff0c;2月1日发售PC版。近日&#xff0c;我们在本作发售之前收到了HORI为《皇牌空战7》量身设计制造的最新一代飞行摇杆。随着《皇牌空战7》即将到来&#xff0c;我们在此为大家做一个简单的先行开箱评测介绍&#xff0c;为…

latex subfigure_latex-图片插入

作为一个新手入门latex写作&#xff0c;在已有的期刊模板下&#xff0c;我认为不需要每个命令都知道它的参数。我们需要做的就是在最短的时间内完成论文&#xff0c;重点在内容上&#xff0c;而不是说我latex用的很棒。这里&#xff0c;我只给出我平时常用的两种作图方式&#…

为什么只有奇次谐波_治理变频器产生谐波的应用

变频器运行对电网所产生的高分量谐波电流极大的影响了电网质量&#xff0c;使同电网中的用电设备不能正常使用。根据相关的政策法规本文阐述了变频器产生谐波电流的几种治理方案优缺点&#xff0c;结合实际案例重点分析了有源滤波器&#xff08;APF&#xff09;在治理变频器产生…

1964年诞生的第一代电子计算机,世界第一台电子计算机诞生的年份是?

满意答案sxh1122014.01.21采纳率&#xff1a;57% 等级&#xff1a;12已帮助&#xff1a;8464人.第一台电子计算机阿塔纳索夫-贝瑞计算机(Atanasoff-Berry Computer&#xff0c;简称ABC)是世界上第一台电子计算机&#xff0c;为艾奥瓦州立大学的约翰文森特阿塔纳索夫(John Vi…

jsp项目开发案例_Laravel中使用swoole项目实战开发案例一 (建立swoole和前端通信)

Laravel中使用swoole项目实战开发案例二(后端主动分场景给界面推送消息)工欲善其事&#xff0c;必先利其器。在正式开发之前我们检查好需要安装的拓展&#xff0c;不要开发中发现这些问题&#xff0c;打断思路影响我们的开发效率。安装 swoole 拓展包安装 redis 拓展包安装 lar…

android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表

背景知识视频教程Arduino 训练营&#xff1a;通过项目学习​viadean.com通过制作Arduino UNO FM收音机接收器学习Arduino I2C​viadean.com通过构建实际应用程序来掌握Arduino - 国外课栈​viadean.com我们大多数人都熟悉162点阵液晶显示器&#xff0c;它在许多项目中用于向用户…

计算机的安全设置在哪儿,电脑防火墙在哪里设置

随着微软系统的更新&#xff0c;现在的Windows 10系统对于网络防护非常的安全&#xff0c;但是有的朋友电脑需要测试一些软件&#xff0c;就需要关闭电脑的防火墙&#xff0c;但是不懂怎么设置电脑防火墙&#xff0c;不用担心下面就让小编教你电脑防火墙在哪设置吧。下面电脑防…

python的加减乘除运算_python实现四则运算

https://gitee.com/szh123/four_arithmetic_implementation.git 1.需求分析&#xff1a; 实现四则运算题目及答案生成&#xff0c;控制生成题目的个数&#xff0c;题目中数值不超过10且有分数存在并用真分数表示。 可以生成10000道题 运算符不超过3个 题目不能出现重复即不能经…

微众银行软件测试笔试题,微众银行4月8日笔试题目及部分代码

AC&#xff0c;大致思路就是算一下该字符串能组成的最大回文长度&#xff0c;然后按差值奇偶性输出胜利者&#xff0c;本来以为“最优策略”的删除任意一个字符会很复杂&#xff0c;但是试了下就过了。import java.util.Scanner;public class Main {public static void main(St…

水晶底是什么材质_蓝宝石水晶镜面,贵是有道理的!

表友们在选择手表的时候&#xff0c;常常会在意机芯、性能等&#xff0c;但是你第一眼爱上的往往是它的外观。在手表上&#xff0c;有一样部件&#xff0c;你总是最先看到&#xff0c;占据着你视线的C位&#xff0c;但是你却总是忽略它。这个部分就是表镜&#xff0c;这个重要却…

dedecms 漏洞_dedescan一款织梦漏洞扫描器

dedescan是一款可以扫描所有已公开的dedecms漏洞的扫描器。... ... ... ... ... ... …

post获取重定向的链接 python_欧美音乐网站Python爬虫项目实战

爬虫项目实战0x01 目标分析最近发现一个比较好的欧美音乐下载网站&#xff0c;可以下载大部分高质量欧美音乐。该爬虫项目要实现自动化批量获取用户想要下载的音乐。本文从网站分析、爬虫设计、代码实现三个方面出发&#xff0c;系统介绍该爬虫项目。项目完整代码在Github中可以…

中国志愿者服务器注册,如何注册成为志愿者?中国志愿服务网注册流程

西宁市团员、团干、青年志愿者个人和组织网上注册方式为“志愿汇”和“全国志愿服务信息系统(www.chinavolunteer.cn)”两个网站平台双线注册。志愿者注册流程基本操作指引一、PC电脑端操作注&#xff1a;本篇内容较多&#xff0c;建议先“收藏”文章或点击底部“在看”。1、PC…

python s d是什意思_python里d是什么意思

python中的fd()是turtle模块中的一个方法。fd 方法的实参是像素距离。turtle模块&#xff1a;它可以让你使用海龟图形&#xff08;turtle graphics&#xff09;绘制图像 turtle模块其中的函数&#xff1a; 1&#xff09;turtle.pensize()&#xff1a;设置线条的粗细&#xff1b…

计算机二级如何接受审阅者修订,操作方法 合并修订文档 步骤1 要求审阅者

工作中&#xff0c;经常需要将文档交予多人同时审阅&#xff0c;那么如何实现让多人同时修改一个文档呢?解决方案审阅者在修订模式下修改文档&#xff0c;再将所有的修订文档合并。操作方法合并修订文档步骤1 要求审阅者&#xff0c;在修订模式下&#xff0c;修改文档&#xf…

vue中的uri_浅谈vue-resource和vue-axios的区别

可能有的人对vue-resource 和vue-axios比较陌生&#xff0c;也可能用到了都不知道。他其实就是我们vue请求里面的 this.$http.*** 和 this.axios.***vue-resourcevue-resource是Vue.js的一款插件&#xff0c;它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说&…