简单、高效、可靠
使用场景
- web站点
- 日志记录系统
- 数据仓库
- 嵌入式开发
MySQL文件
-
数据文件
- .frm 元数据
- .myi myisam 引擎数据文件
- .ibd infodb 独享空间存储文件,每个表独享文件
- .ibdata 表使用同一个文件
-
日志文件
- error log
- binlog
- updatelog
- slow query log
- querylog
- infodb 的redo log
MySQL逻辑模块
-
环境
- 初始化
- 核心
- 网络交互
- client和server交互协议模块
- 用户模块
- 安全控制
- 连接管理、连接池、线程管理
-
SQL实现
- query解析与转发
- query cache
- query 优化
-
数据存储
- 表变更管理
- 表管理
- 表维护
-
系统
- 系统状态管理
-复制转发 - 日志管理
- 存储引擎接口
- 系统状态管理
数据引擎
MySQL的插件式存储引擎主要包括MyISAM、InnoDB、NDB Cluster、Maria、Falcon、Memory、Archive、Merge、Federated等,其中最著名而且使用最为广泛的是MyISAM和InnoDB两种存储引擎。MyISAM是MySQL最早的ISAM存储引擎的升级版本,也是MySQL默认的存储引擎。
性能优化关键因素
- 不合理需求
- 无用数据堆积
- 架构影响
- 不合理数据
- 流式数据,比如日志
- 二进制媒体数据
- 超大文本
- 未合理使用缓存
- 频繁使用的数据
- 不频繁更新的数据
- 统计数据处理
- 热点数据未做处理
性能三大指标
最大的性能瓶颈就是在于磁盘IO,也就是数据的存取操作上面。
- io
- CPU
CPU损耗在于计算,比如sort,groupby等。而记录行数损耗的是io,比如查询100条记录主要消耗的是io。
iops与吞吐量
可以通过内存与加载缓解io瓶颈,原理:内存读取总比磁盘块。
infodb 缓存配置
schema设计
- 冗余设计
infodb
对于InnoDB的存储引擎,如果使用的是共享表空间来存储数据,那么须要打开的文件描述符就比较少,而如果使用的是独享表空间方式来存储数据,由于存储表数据的数据文件较多,则同样会打开很多的表文件描述符。除了数据库的实际表或索引打开时须要使用文件描述符以外,临时文件同样也须要,因此同样会占用系统中open_files_limit的设置限额。
- tablecache
table_open_cache = max_connections * N
这个N为执行Query时,Query所包含的Table的个数也并不是太合适,因为不能忽略索引文件的打开。虽然索引文件描述符在各个连接线程之间是可以共享的,但至少每个索引文件总还是需要一个的。
- Sort Buffer、Join Buffer和Read Buffer
其它搜索引擎优化
搜索引擎优化主要针对配置优化,可以先看系统配置参数,然后再修改调整
show variables like '%buffer%';
profile
- 开启
SET profiling=1;
- 查询当前多个profile概要信息
show profiles;
- 查询当个query详细信息
show profile cpu, block io for query 6;
- show profile 语法
show profile ✘✘✘ for query 6;
- 其它命令
- ALL 显示所有性能信息
- BLOCK IO 显示块IO操作的次数
- CONTEXT SWITCHES 显示上下文切换次数,-
- 不管是主动还是被动
- CPU 显示用户CPU时间、系统CPU时间
- IPC 显示发送和接收的消息数量
- MEMORY [暂未实现]
- PAGE FAULTS 显示页错误数量
- SOURCE 显示源码中的函数名称与位置
- SWAPS 显示SWAP的次数
网友评论