MySQL 数据库架构
1 架构
master-slave
性能,qps,tps,cpu,disk,memory,network,raid卡,fashion卡,
并发量:同一时刻需要db处理
连接量:
大表:1000w行或者表文件10g
影响:慢查询,对表ddl操作(长时间的锁表,主从复制延时,对数据操作影响)
处理:分库分表,把一个大表分成多个小表
难点:分表主键的选择,订单号,供应商,地区分表
分表后跨分区的查询和统计
影响后端已有的业务 处理:对大表的历史数据归档,减少对前后端业务的影响
难点:归档时间的选择,比如订单,1年前,或者几个月,纯日志归档,可以1个月
如何进行归档操作,主从延时,
大事务:事务是数据库系统区别于其他一切文件系统的重要特性
是一组具有原子性的sql语句,或者是一个独立的单元
原子性 atomicity,要么全部成功,要么全部失败
一致性 consistency,将一种一致性状态转换到另外一种一致性状态,完整性没有被破坏
隔离性isolation,一个事务对数据进行修改,未提交前,其他事务是不可见
RR/RC--可重读,已提交读(不可重复读)
持久性 durability,所做的修改永远保存到数据库中
大事务,运行时间比较长,操作的数据比较多的事务
风险:锁定太多的数据,找出大量的阻塞和锁超时
回滚时所需要的时间比较长
执行时间长,容易造成主从延时
处理:避免一次处理太多的数据,多批次处理
移除不必要的事务中的select操作
2 性能影响
硬件
操作系统/服务器系统
数据库engine的选择
数据库参数配置
数据库表结构设计和sql语句 cpu,--cpu选择,频率,数量
计算密集型--频率
系统并发量--数量 16,32
web类应用,mysql版本5.6,5.7 ,数量>频率
内存:数据库利用内存有限,ssd,fusion io
磁盘:传统磁盘,磁头,磁盘--存储容量,传输速度,访问时间,主轴转速
raid传统磁盘,raid0,raid1,raid5,raid10(raid1,raid0)
ssd,-更好随机读写性能,更好支持并发,容易损坏(每次写入,需要擦除)
ssd,--slave 单线程
pci-e ssd--接口
san-光纤到服务器,网络存储--数据库备份
nas--网络设备
网络:网络带宽,网络质量
--网络隔离
--多网卡绑定
--高性能交换机
操作系统;
linux
centos系统参数优化
/etc/sysctl.conf
net.core.somaxconn=65535
net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.wmem_default=87380
net.core.wmem_max
net.core.rmem_default
net.core.rmem_max
net.ipv4.tcp_keepalive_time/intvl/probes=120/30/3
kernel.shmmax=4g
vm.swappiness=0/10
/etc/security/limit.conf
* soft nofile 65535
* hard nofile 65535
磁盘调度策略
/sys/block/devname/queue/scheduler
--deadline
文件系统
linux ext3,ext4,xfs
ext3/4系统挂载参数 /etc/fstab data=writeback
noatime,nodiratime
mysql:engine
客户端--连接管理器-查询缓存-查询解析-查询优化器-mysql服务层
myisam--查询优化器生成的临时表
--并发性,锁级别
--表损坏修复-check table tablename,repair table tablename,myisamcheck
--fulltext index,text block index,压缩表myisampack -b -f myisam.MYI(read only)
--非事务型应用,只读类应用--压缩,空间类应用--空间函数5.7之前
innodb--事务,ibd,ibdata-tablespace undo,redo-顺序,undo 随机,
--mvcc,2pc,doublewrite,自适应hash index,wal日志预写,插入缓冲
--使用独立表空间,mysqldump导出数据,新建data目录,导入原来的ibdata的数据
--支持行级锁,RR,gap lock,支持并发,行级锁是在engine层实现
--锁,管理共享资源的并发访问,实现事务的隔离性
--x 锁,s锁,--innodb两步获得锁
--阻塞,死锁
--show engine innodb status
--5.7-支持全文索引,空间函数
csv--普通csv文件
--数据以文本方式存储在文件中
--.csv文件存储表内容,csm表的元数据
--1,"aaa"-所有列不能为null,不支持索引,不适合大表,不适合在线处理,
--可对数据文件直接进行编辑,flush tables
--适合为数据交换的中间表,数据-csv文件-mysql,web程序
archive--对表数据进行压缩,磁盘io更少
--arz后缀,只支持insert,select,高并发操作
--只允许在自增id上增加index
--使用场景,日志和数据采集类应用
memory--所有数据保存在内存中,只有frm文件
--支持hash索引和btree索引,所有字段固定长度char(10),不支持blob和text等大字段
--表级锁,大小有max_heap_table_size 参数决定,旧表无效,必须重建
--vs临时表,查询优化器,系统使用的临时表(myisam,memory),create tempary table建立的临时表
--使用场景,找着或映射表,保存中产生的中间表
federated--类似oracle dblink,访问远程mysql服务器上表的方法
--本地不存数据,数据放在远程服务器
--本地需要保存表结构
engine选择:事务,备份,崩溃恢复,存储引擎的特有特性
mysql 参数
set global 参数名=参数值
set @@global.参数名=参数值
set session
set @@session
1 内存
sort_buffer_size,join_buffer_size,read_buffer_size myisam读,read_rnd_buffer_size每个session
系统预留内存
innodb_buffer_pool_size
key_buffer_size
2 io
innodb_log_file_size
innodb_log_files_in_group
innodb_log_buffer_size
innodb_flush_log_at_trx_commit
innodb_flush_method
innodb_file_per_table
innodb_doublewrite
expire_logs_days
max_allowed_packet
skip_name_resolve
3 安全
sysdate_is_now
read_only
skip_slave_start
sql_mode
4 其他
sync_binlog
tmp_table_size,max_heap_table_size
max_connections 数据库结构设计和sql优化
过分的反范式化为表建立太多的列
过分的范式化造成太多的表关联
使用不恰当的分区表
使用外键保证数据的完整性
3 数据库测试
基准测试-上线之前,压力测试-逻辑
sysbench,tpcc-mysql,mysqlslap,orzdba
qps,tps,响应时间,并发量,cpu,io,network
4 数据库结构优化
减少数据冗余
尽量避免数据维护中出现更新, 插入和删除异常
节约数据存储空间
提高查询效率 需求分析:全面了解产品设计的存储需求,存储需求,数据处理需求,数据的安全性和完整性
逻辑设计:设计数据的逻辑存储结构,数据实体之间的逻辑关系,解决数据冗余和数据维护异常
物理设计:根据所使用的数据库特点进行表结构设计
mysql,innodb,varchar,int,date
维护优化:根据实际情况对索引,存储结构进行优化 设计范式:1 表中的列不可再分,单一属性,单一属性的列由基本数据类型构成,二维表
2 表中只有一个业务主键,表中不存在非主键列对部分主键的依赖
3 存在传递依赖关系
MySQL 数据库架构的更多相关文章
- MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段
--查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...
- mysql数据库架构设计与优化
mysql数据库架构设计与优化 2019-04-23 20:51:20 无畏D尘埃 阅读数 179 收藏 更多 分类专栏: MySQL 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)
什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...
- 《打造扛得住的MySQL数据库架构》第3章 MySQL基准测试
3-1 什么是基准测试 测量系统性能,优化是否有效?MySQL基准测试. 定义:基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,以便当系统发生软硬件 变化时重新进行基准测试以评 ...
- 《打造扛得住的MySQL数据库架构》第7章 SQL查询优化
SQL查询优化 7-1 获取有性能问题SQL的三种方法 如何设计最优的数据库表结构 如何建立最好的索引 如何拓展数据库的查询 查询优化,索引优化,库表结构优化 如何获取有性能问题的SQL 1.通过测试 ...
- 《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化
4-1 数据库结构优化介绍 良好的数据库逻辑设计和物理设计是数据库获得高性能的基础. 1.减少不必要的数据冗余. 2.尽量避免数据维护中出现更新,插入和删除异常. 插入异常:如果表中的某个实体随着另一 ...
- 查询MySql数据库架构信息:数据库,表,表字段
/*1.查询所有数据库*/ show databases; /*2.查询所有数据表*/ select * from information_schema.tables where table_sch ...
- Linux实战教学笔记29:MySQL数据库企业级应用实践
第二十九节 MySQL数据库企业级应用实践 一,概述 1.1 MySQL介绍 MySQL属于传统关系型数据库产品,它开放式的架构使得用户选择性很强,同时社区开发与维护人数众多.其功能稳定,性能卓越,且 ...
- MySQL数据库企业级应用实践(主从复制)
MySQL数据库企业级应用实践(主从复制) 链接:https://pan.baidu.com/s/1ANGg3Kd_28BzQrA5ya17fQ 提取码:ekpy 复制这段内容后打开百度网盘手机App ...
随机推荐
- HCW 19 Team Round (ICPC format) B. Beggin' For A Node(树的重心,交互题)
B. Beggin' For A Node time limit per test2.0 s memory limit per test256 MB inputstandard input outpu ...
- radio(单选框)/checkbox(复选框) 美化
由于某种原因,可能需要对单选框(radio)或复选框(checkbox)进行美化,那么直接修改样式是行不通,要实现就需要添加js,以下js依赖于jquery radio.js: function ra ...
- 【leetcode】1250. Check If It Is a Good Array
题目如下: Given an array nums of positive integers. Your task is to select some subset of nums, multiply ...
- 几种最常见的js array操作方法及示例
1. 序言 操作array可谓前端最基础的工作,无论是从接口中取的数据,还是筛选数据,或者是添加按钮权限等等操作,array都是绕不开的东西.array的操作很多,初学者十分容易搞混,不是很熟练的情况 ...
- 部署安装snort--入侵检测工具
1:部署安装snort yum -y install wget 2: 基本依赖环境 yum -y install gcc flex bison zlib zlib-devel libpcap libp ...
- Java多线程和并发(七),synchronized
目录 1.线程安全的主要原因 2.互斥锁的特性 3.锁的类别 4.类锁和对象锁的总结 七.synchronized 1.线程安全的主要原因 2.互斥锁的特性 Java中synchronized锁的不是 ...
- UVa 1595 Symmetry (set && math)
题意:给出n个在直角坐标系上的点,问你能不能找出一条竖轴(即垂直于x的轴)使得所有的点根据这条轴对称,能则输出YES,否则输出NO 分析:首先需要找到对称轴的值,将所有n个点的x轴的值加起来然后去除以 ...
- codevs 5960 信使x
题目描述 Description •战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位).指挥部设在第一个哨所. ...
- Codeforces 1213C Book Reading
cf题面 中文题意 多组数据,每组给一个n给一个m,要求正整数\(1\)~\(n\)中,所有能被m整除的数的个位之和. 解题思路 首先,能被m整除的数的数量是\(\lfloor\frac{n}{m}\ ...
- pycharm中调用函数方法自动补全p,m,c,v,f分别是什么意思
p:parameter 参数m:method 方法c:class 类v:variable 变量f:function 函数