linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...
一、SQL查询优化(重要)
1.1 获取有性能问题SQL的三种方式
通过用户反馈获取存在性能问题的SQL;
通过慢查日志获取存在性能问题的SQL;
实时获取存在性能问题的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(推荐)
SELECT id,user,host,DB,command,time,state,infoFROM information_schema.processlistWHERE TIME>=60
查询当前服务器执行超过60s的SQL,可以通过脚本周期性的来执行这条SQL,就能查出有问题的SQL。
1.2 SQL的解析预处理及生成执行计划(重要)
1.2.1 查询过程描述(重点!!!)
通过上图可以清晰的了解到MySql查询执行的大致过程:
发送SQL语句。
查询缓存,如果命中缓存直接返回结果。
SQL解析,预处理,再由优化器生成对应的查询执行计划。
执行查询,调用存储引擎API获取数据。
返回结果。
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依照执行计划和存储引擎进行交互
这个阶段包括了多个子过程:
一条查询可以有多种查询方式,查询优化器会对每一种查询方式的(存储引擎)统计信息进行比较,找到成本最低的查询方式,这也就是索引不能太多的原因。
1.3 会造成MySQL生成错误的执行计划的原因
1、统计信息不准确 2、成本估算与实际的执行计划成本不同
3、给出的最优执行计划与估计的不同
4、MySQL不考虑并发查询 5、会基于固定规则生成执行计划 6、MySQL不考虑不受其控制的成本,如存储过程,用户自定义函数
1.4 MySQL优化器可优化的SQL类型
查询优化器:对查询进行优化并查询mysql认为的成本最低的执行计划。为了生成最优的执行计划,查询优化器会对一些查询进行改写
可以优化的sql类型
1、重新定义表的关联顺序;
2、将外连接转换为内连接;
3、使用等价变换规则;
4、优化count(),min(),max();
5、将一个表达式转换为常数; 6、子查询优化;
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%';
1.6 特定SQL的查询优化
1.6.1 大表的数据修改
1.6.2 大表的结构修改
对表中的列的字段类型进行修改
改变字段的宽度时还是会锁表
无法解决主从数据库延迟的问题
利用主从复制,先对从服务器进入修改,然后主从切换
(推荐)
添加一个新表(修改后的结构),老表数据导入新表,老表建立触发器,修改数据同步到新表, 老表加一个排它锁(重命名), 新表重命名, 删除老表。
修改语句这个样子:
alter table sbtest4 modify c varchar(150) not null default ''
利用工具修改:
1.6.3 优化not in 和 <> 查询
子查询改写为关联查询:
SELECT customer_id,first_name,last_name,email FROM customerWHERE customer_idNOT IN (SELECT customer_id FROM payment)
改写后:
SELECT a.customer_id,a.first_name,a.last_name,a.email FROM customer aLEFT JOIN payment b ON a.customer_id = b.customer_idWHERE b.customer_id IS NULL
二、分库分表
2.1 分库分表的几种方式
分担读负载 可通过 一主多从,升级硬件来解决。
2.1.1 把一个实例中的多个数据库拆分到不同实例(集群)
拆分简单,不允许跨库。但并不能减少写负载。
2.1.2 把一个库中的表分离到不同的数据库中
该方式只能在一定时间内减少写压力。
以上两种方式只能暂时解决读写性能问题。
2.1.3 数据库分片
对一个库中的相关表进行水平拆分到不同实例的数据库中
2.1.3.1 如何选择分区键
分区键要能尽可能避免跨分区查询的发生
分区键要尽可能使各个分区中的数据平均
2.1.3.2 分片中如何生成全局唯一ID
使用auto_increment_increment和auto_increment_offset参数使用全局节点来生成ID在Redis等缓存服务器中创建全局ID(推荐)
完!
唐成勇
https://segmentfault.com/a/1190000013781544
linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...相关推荐
- mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- Mysql数据库MMM实现高可用架构
文章目录 一,MMM介绍 二.MMM搭建 一,MMM介绍 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障 ...
- MySQL 数据库之 MMM 高可用架构构建
文章目录 一.MMM 概述 1. 什么是 MMM 2. 应用场景 3. MMM 特点 4. 关于 MMM 高可用架构的说明 5. 用户及授权 二.案例环境 1. 服务器配置 2. 服务器环境 3. 修 ...
- 架构设计器_MySQL:数据库结构优化、高可用架构设计、数据库索引优化
一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...
- MySQL:数据库结构优化、高可用架构设计、数据库索引优化
一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...
- 深度linux使用京麦,京东京麦开放平台的高可用架构之路
京麦是京东商家的多端开放式工作平台,是京东十万商家唯一的店铺运营管理平台,为京东商家提供在移动和桌面端的操作业务,京麦本身是一个开放的端体系架构,由京东官方和 ISV 为商家提供多样的应用服务. 京麦 ...
- ORCALE 19C数据库Linux系统数据泵导入步骤
管理员登录 sqlplus / as sysdba 创建表空间 通过下面的指令创建表空间 create temporary tablespace 表空间名字 tempfile' 文件名.dbf ' s ...
最新文章
- java web乱码_【SpringBoot WEB 系列】RestTemplate 之中文乱码问题 fix
- Linux——curl(转)
- Python中print()函数不换行的方法
- C++中之---数组和vector
- 如何系统地学习深度学习(从初级到高级,初学者必看)
- k8s nginx-ingress 上传大小限制问题配置
- openCV银行卡号识别
- 多线程编程warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 错误解决
- 估计值与平均值的离差平方和_各变量值与其算术平均数的离差平方之和为()
- 植物大战僵尸修改阳光
- word选择性粘贴没有HTML选项,Word选择性粘贴如何使用?Word选择性粘贴的快捷键是什么?...
- l440加装固态硬盘ngff_联想L440笔记本电脑加装固态硬盘笔记
- 全网最简单的RFM模型制作方法,3岁小孩都能学会!
- 揭露数据不一致的利器 —— 实时核对系统
- “最难就业季“中的大学生就业:本硕过半有着落 高职生成香饽饽
- vscode+svn
- excel文件损坏修复绝招_Excel被删除并清空,会计别哭,一招拯救!
- 怎么解决word中英文混合换行后字体间隔变大问题
- ✿2021NEWCTF6.1萌新赛✿MISC-all-WP
- linux 命令行 英语词典
热门文章
- zencart 如何修改在线人数和订单编号
- 【译】微型ORM:PetaPoco
- 【转】盛大创新院许式伟:影响我一生的五个重要选择
- 【剑指offer】面试题34:二叉树中和为某一值的路径
- Js拼接嵌套php代码,分享一个js文件中嵌套php会出错的问题
- 7-二进制,十进制,十六进制
- 语言条件语序心得_考研分享 | 王远新语言学教程要点总结(第五章)
- 如何卸载mysql server 2005_如何卸载SQL Server 2005
- php分页技术的作用,分页原理技术细节剖析(php+mysql)实例
- python+OpenCV图像处理(五)图像的阈值分割