mysql -基础介绍 01
一、MySQL 的介绍
MySQL 是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,现属于 Oracle 旗下产品。它采用客户端/服务器架构,使用结构化查询语言(SQL)进行数据库操作。
主要特点:
-
开源免费(社区版)
-
跨平台支持(Windows、Linux、Mac等)
-
高性能、高可靠性
-
支持多用户、多线程
-
丰富的API接口
-
支持多种编程语言
二、MySQL 的作用
MySQL 主要用于结构化数据的存储和管理,具体应用包括:
-
数据存储:持久化存储业务数据
-
数据检索:高效查询和获取数据
-
数据管理:提供数据增删改查(CRUD)功能
-
数据安全:通过权限控制保障数据安全
-
事务处理:保证数据操作的原子性和一致性
-
数据关系维护:通过外键等维护数据间关系
典型应用场景:
-
Web应用后端数据库
-
电子商务系统
-
日志记录系统
-
数据仓库
-
嵌入式数据库
三、MySQL 体系结构详解
MySQL 采用分层架构,主要分为三层:
+-----------------------+
| 客户端层 |
| (连接处理、授权认证等) |
+-----------------------+
↓
+-----------------------+
| 服务层 |
| (查询解析、优化、执行等) |
+-----------------------+
↓
+-----------------------+
| 存储引擎层 |
| (数据存储与提取) |
+-----------------------+
1. 客户端层
功能:
-
处理客户端连接请求
-
身份验证和权限检查
-
维持和管理连接
核心组件:
-
连接管理器:接收连接请求,分配线程
-
线程池(企业版):复用连接线程
-
授权模块:验证用户名/密码和权限
2. 服务层
功能:
-
SQL语句解析和处理
-
查询优化
-
内置函数实现
-
跨存储引擎功能
核心组件:
(1) SQL接口
-
接收SQL命令
-
返回结果集
-
支持DML、DDL、存储过程等
(2) 解析器
-
词法分析:将SQL分解为tokens
-
语法分析:检查语法正确性
-
生成解析树
(3) 查询优化器
-
基于成本的优化(CBO)
-
决定:
-
使用哪个索引
-
表的连接顺序
-
是否使用临时表
-
-
生成执行计划
(4) 执行器
-
调用存储引擎接口
-
执行查询计划
-
返回结果集
3. 存储引擎层
功能:
-
数据的物理存储和检索
-
实现事务、锁等特性
常见存储引擎对比:
| 特性 | InnoDB | MyISAM | Memory |
|---|---|---|---|
| 事务支持 | 支持(ACID) | 不支持 | 不支持 |
| 锁粒度 | 行级锁 | 表级锁 | 表级锁 |
| 外键 | 支持 | 不支持 | 不支持 |
| 崩溃恢复 | 支持 | 有限支持 | 不支持 |
| 适用场景 | 高并发写/事务场景 | 读密集型场景 | 临时数据/缓存 |
四、MySQL 性能测试关注点
1. 连接层性能
关注指标:
-
最大连接数(
max_connections) -
连接建立时间
-
线程缓存命中率(
thread_cache_hit_rate) -
连接错误率
优化建议:
-
合理设置
max_connections -
启用线程池(企业版)
-
优化连接超时参数(
wait_timeout)
2. 查询处理性能
关注指标:
-
QPS(每秒查询数)
-
TPS(每秒事务数)
-
平均查询响应时间
-
慢查询比例
优化建议:
-
优化SQL语句
-
合理使用索引
-
调整
query_cache_size(8.0前) -
优化
sort_buffer_size等缓冲区
3. 存储引擎性能(InnoDB为例)
关注指标:
-
IOPS(每秒IO操作数)
-
缓冲池命中率(
innodb_buffer_pool_hit_rate) -
脏页比例(
innodb_buffer_pool_dirty_pages) -
锁等待时间
优化建议:
-
设置合适的
innodb_buffer_pool_size -
优化
innodb_io_capacity -
调整
innodb_flush_log_at_trx_commit -
监控和解决锁竞争
4. 系统资源使用
关注指标:
-
CPU使用率
-
内存使用量
-
磁盘I/O吞吐量
-
网络带宽使用
优化建议:
-
监控
CPU-bound和I/O-bound情况 -
优化Linux内核参数
-
使用高性能存储设备(如SSD)
-
考虑读写分离架构
5. 并发性能
关注指标:
-
并发用户数下的响应时间
-
吞吐量随并发增长曲线
-
死锁发生率
-
线程等待时间
优化建议:
-
进行压力测试找到性能拐点
-
优化事务设计(减少锁持有时间)
-
合理设置隔离级别
-
使用连接池管理连接
五、常用性能测试工具
-
sysbench:综合基准测试工具
-
mysqlslap:MySQL自带的基准测试工具
-
JMeter:可进行复杂场景测试
-
TPC-C:事务处理性能测试
-
Prometheus+Grafana:监控和可视化
六、性能测试关键参数
以下参数应在测试前后监控和调整:
# 连接相关 max_connections = 500 thread_cache_size = 50 # 查询缓存(8.0前) query_cache_size = 64M query_cache_type = 1 # InnoDB缓冲池 innodb_buffer_pool_size = 4G # 通常设为物理内存的50-70% innodb_buffer_pool_instances = 8 # IO相关 innodb_io_capacity = 2000 innodb_flush_neighbors = 1 # 日志相关 innodb_log_file_size = 256M innodb_log_buffer_size = 16M # 锁相关 innodb_lock_wait_timeout = 50

浙公网安备 33010602011771号