OceanBase教程FG131-OceanBase性能调优实战
本文档风哥主要介绍OceanBase性能调优实战,包括性能调优的概念与意义、性能指标、性能调优方法、性能规划、性能监控、性能调优策略、性能调优实施方案、系统优化、数据库优化、实战案例等内容,风哥教程参考OceanBase官方文档性能调优、系统优化等内容编写,适合DBA人员和运维工程师在学习和工作中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 性能调优的概念与意义
性能调优是指通过调整系统和应用的配置,提高系统的性能和响应速度的过程。性能调优的意义包括:
- 提高系统响应速度:减少用户等待时间,提高用户体验
- 提高系统吞吐量:增加系统处理请求的能力
- 降低系统资源消耗:减少CPU、内存、磁盘I/O等资源的使用
- 提高系统稳定性:减少系统故障和崩溃的风险
- 降低运维成本:减少硬件和人力成本
1.2 性能指标
常见的性能指标包括:
- 响应时间:系统处理请求的时间
- 吞吐量:系统单位时间内处理的请求数
- CPU使用率:CPU的使用情况
- 内存使用率:内存的使用情况
- 磁盘I/O:磁盘的读写情况
- 网络带宽:网络的使用情况
- 并发连接数:系统同时处理的连接数
1.3 性能调优方法
常见的性能调优方法包括:
- 系统优化:调整操作系统参数,如内核参数、文件系统等
- 数据库优化:调整数据库参数,如内存配置、缓存设置等
- SQL优化:优化SQL语句,如索引优化、查询计划优化等
- 应用优化:优化应用代码,如减少不必要的计算、优化算法等
- 硬件优化:升级硬件,如增加CPU、内存、使用SSD等
Part02-生产环境规划与建议
2.1 性能规划
性能规划的考虑因素:
- 业务需求:了解业务的性能要求,如响应时间、吞吐量等
- 系统架构:分析系统的架构,如数据库、应用服务器、网络等
- 硬件资源:评估硬件资源的使用情况,如CPU、内存、磁盘等
- 负载测试:进行负载测试,了解系统的性能瓶颈
- 优化目标:确定性能优化的目标,如提高响应速度、增加吞吐量等
推荐的性能规划:
- 合理配置硬件:根据业务需求选择合适的硬件,如CPU、内存、磁盘等
- 优化系统架构:合理设计系统架构,如使用缓存、负载均衡等
- 定期性能测试:定期进行性能测试,了解系统的性能状况
- 制定优化计划:根据性能测试结果,制定优化计划
2.2 性能监控
性能监控的考虑因素:
- 监控指标:确定需要监控的性能指标,如CPU、内存、磁盘I/O等
- 监控工具:选择合适的监控工具,如Prometheus、Grafana等
- 监控频率:确定监控的频率,如实时监控、定期监控等
- 告警机制:建立告警机制,及时发现和处理性能问题
- 监控数据分析:分析监控数据,发现性能趋势和问题
,风哥提示:。
推荐的性能监控:
- 实时监控:使用Prometheus和Grafana进行实时监控
- 多维度监控:监控系统、数据库、应用等多个维度的性能
- 历史数据分析:分析历史监控数据,发现性能趋势
- 智能告警:使用智能告警机制,减少误报和漏报
2.3 性能调优策略
性能调优策略的内容包括:
- 系统级优化:调整操作系统参数,如内核参数、文件系统等
- 数据库级优化:调整数据库参数,如内存配置、缓存设置等
- SQL级优化:优化SQL语句,如索引优化、查询计划优化等
- 应用级优化:优化应用代码,如减少不必要的计算、优化算法等
- 硬件级优化:升级硬件,如增加CPU、内存、使用SSD等
推荐的性能调优策略:
- 先优化软件,再升级硬件:首先通过软件优化提高性能,必要时再升级硬件
- 分阶段优化:将性能优化分为多个阶段,逐步实施
- 重点优化瓶颈:优先优化系统的性能瓶颈
- 持续优化:性能优化是一个持续的过程,需要定期进行
,学习交流加群风哥微信: itpux-com。
Part03-生产环境项目实施方案
3.1 性能调优实施方案
3.1.1 性能调优实施步骤
## 1. 环境准备
– 配置OceanBase数据库:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE DATABASE fgedudb;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE USER fgedu IDENTIFIED BY ‘password’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “GRANT ALL PRIVILEGES ON fgedudb.* TO fgedu;”
– 创建测试表:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE TABLE fgedu_order (order_id INT PRIMARY KEY, user_id INT, order_amount DECIMAL(10,2), order_time DATETIME);”
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE TABLE fgedu_user (user_id INT PRIMARY KEY, user_name VARCHAR(100), password VARCHAR(255));”
– 插入测试数据:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “DELIMITER //; CREATE PROCEDURE insert_test_data() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 100000 DO INSERT INTO fgedu_order VALUES (i, i, 100.00, NOW()); SET i = i + 1; END WHILE; END //; DELIMITER ;"
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "CALL insert_test_data();"
## 2. 性能监控
- 安装Prometheus和Grafana:
$ wget https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.40.0.linux-amd64.tar.gz
$ mv prometheus-2.40.0.linux-amd64 /ob/prometheus
$ wget https://github.com/grafana/grafana/releases/download/v9.3.6/grafana-9.3.6.linux-amd64.tar.gz
$ tar -xzf grafana-9.3.6.linux-amd64.tar.gz
$ mv grafana-9.3.6.linux-amd64 /ob/grafana
- 配置Prometheus:
$ cat > /ob/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
scrape_configs:,学习交流加群风哥QQ113257174。
- job_name: 'oceanbase'
static_configs:
- targets: ['192.168.1.10:9100']
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.10:9100']
EOF
- 启动Prometheus和Grafana:
$ cd /ob/prometheus
$ ./prometheus --config.file=prometheus.yml &
$ cd /ob/grafana
$ ./bin/grafana-server --homepath=/ob/grafana &
## 3. 性能测试
- 测试查询性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SELECT SQL_NO_CACHE * FROM fgedu_order WHERE order_id = 50000;"
- 测试插入性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order VALUES (100001, 100001, 100.00, NOW());"
- 测试更新性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "UPDATE fgedu_order SET order_amount = 200.00 WHERE order_id = 50000;"
- 测试删除性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "DELETE FROM fgedu_order WHERE order_id = 100001;"
## 4. 性能分析
- 查看执行计划:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "EXPLAIN SELECT * FROM fgedu_order WHERE order_id = 50000;"
- 查看系统状态:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS;"
- 查看系统变量:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL VARIABLES;"
## 5. 性能优化,更多视频教程www.fgedu.net.cn。
- 优化系统参数:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "ALTER SYSTEM SET memory_limit = '8G' TENANT 'sys';"
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "ALTER SYSTEM SET cache_size = '4G' TENANT 'sys';"
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "ALTER SYSTEM SET max_connections = 1000 TENANT 'sys';"
- 优化SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "CREATE INDEX idx_user_id ON fgedu_order(user_id);"
## 6. 测试验证
- 测试优化后的查询性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SELECT SQL_NO_CACHE * FROM fgedu_order WHERE user_id = 50000;"
- 测试优化后的插入性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order VALUES (100002, 100002, 100.00, NOW());"
- 测试优化后的更新性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "UPDATE fgedu_order SET order_amount = 300.00 WHERE user_id = 50000;"
- 测试优化后的删除性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "DELETE FROM fgedu_order WHERE order_id = 100002;"
- 查看监控数据:
- 浏览器访问:http://服务器IP:3000
- 查看Grafana仪表盘
- 分析性能指标
3.2 系统优化
3.2.1 系统优化实施步骤
## 1. 内核参数优化
– 配置内核参数:
$ cat > /etc/sysctl.d/oceanbase.conf << 'EOF'
# 网络参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30,更多学习教程公众号风哥教程itpux_com。
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
# 内存参数
vm.swappiness = 0
vm.overcommit_memory = 1
# 文件系统参数
fs.file-max = 65536
fs.aio-max-nr = 1048576
# 进程参数
kernel.sem = 250 32000 100 128
EOF
- 应用内核参数:
$ sysctl -p /etc/sysctl.d/oceanbase.conf
## 2. 文件系统优化
- 配置文件系统:
$ mkfs.xfs -f /dev/sdb1
$ mkdir -p /ob/data
$ mount /dev/sdb1 /ob/data -o defaults,noatime,nodiratime
- 配置fstab:
$ echo "/dev/sdb1 /ob/data xfs defaults,noatime,nodiratime 0 0" >> /etc/fstab
## 3. 资源限制优化
– 配置资源限制:,from DB视频:www.itpux.com。
$ cat > /etc/security/limits.d/oceanbase.conf << 'EOF'
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
EOF
- 应用资源限制:
$ ulimit -n 65536
$ ulimit -u 65536
## 4. NUMA优化
- 禁用NUMA:
$ echo "numa=off" >> /etc/default/grub
$ grub2-mkconfig -o /boot/grub2/grub.cfg
– 重启系统:
$ reboot
## 5. 大页内存优化
– 配置大页内存:
$ echo “vm.nr_hugepages = 16384” >> /etc/sysctl.d/oceanbase.conf
$ sysctl -p /etc/sysctl.d/oceanbase.conf
– 验证大页内存:
$ cat /proc/meminfo | grep HugePages
## 6. 测试验证
– 测试系统性能:
$ stress-ng –cpu 4 –io 4 –vm 2 –vm-bytes 1G –timeout 60s
– 查看系统状态:
$ top
$ vmstat 1
$ iostat -x 1
– 查看网络状态:
$ netstat -an | grep ESTABLISHED | wc -l
$ ss -s
3.3 数据库优化
3.3.1 数据库优化实施步骤
## 1. 内存配置优化
– 配置内存参数:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET memory_limit = ‘8G’ TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET cache_size = ‘4G’ TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET plan_cache_size = ‘512M’ TENANT ‘sys’;”
## 2. 连接配置优化
– 配置连接参数:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET max_connections = 1000 TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET connect_timeout = 10 TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET wait_timeout = 3600 TENANT ‘sys’;”
## 3. 存储配置优化
– 配置存储参数:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET datafile_disk_percentage = 80 TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET redo_disk_percentage = 20 TENANT ‘sys’;”
## 4. SQL优化
– 创建索引:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_order_time ON fgedu_order(order_time);”
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_user_name ON fgedu_user(user_name);”
– 优化查询语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu_order WHERE order_time >= ‘2026-01-01’ AND order_time < '2026-01-02';"
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "EXPLAIN SELECT * FROM fgedu_user WHERE user_name LIKE 'test%';"
## 5. 分区优化
- 创建分区表:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "CREATE TABLE fgedu_order_partition (order_id INT PRIMARY KEY, user_id INT, order_amount DECIMAL(10,2), order_time DATETIME) PARTITION BY RANGE (YEAR(order_time)) (PARTITION p2026 VALUES LESS THAN (2027), PARTITION p2027 VALUES LESS THAN (2028), PARTITION p2028 VALUES LESS THAN (2029));"
- 插入数据:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order_partition VALUES (1, 1, 100.00, '2026-01-01');"
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order_partition VALUES (2, 2, 200.00, '2027-01-01');"
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order_partition VALUES (3, 3, 300.00, '2028-01-01');"
- 测试分区查询:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "EXPLAIN SELECT * FROM fgedu_order_partition WHERE order_time >= ‘2026-01-01’ AND order_time < '2027-01-01';"
## 6. 测试验证
- 测试查询性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SELECT SQL_NO_CACHE * FROM fgedu_order WHERE order_time >= ‘2026-01-01’ AND order_time < '2026-01-02';"
- 测试插入性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu_order VALUES (100003, 100003, 100.00, NOW());"
- 测试更新性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "UPDATE fgedu_order SET order_amount = 400.00 WHERE order_time >= ‘2026-01-01’ AND order_time < '2026-01-02';"
- 测试删除性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "DELETE FROM fgedu_order WHERE order_id = 100003;"
- 查看数据库状态:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS;"
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL VARIABLES;"
Part04-生产案例与实战讲解
4.1 CPU优化实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群
– 业务类型:电商业务
– 问题:CPU使用率高,系统响应慢
## 实施步骤
### 1. 问题分析
– 查看CPU使用率:
$ top
# 输出:
# top – 12:00:00 up 1 day, 2:00, 2 users, load average: 8.50, 7.20, 6.80
# Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
# %Cpu(s): 85.0 us, 10.0 sy, 0.0 ni, 5.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# KiB Mem : 16384.0 total, 2048.0 free, 12288.0 used, 2048.0 buff/cache
# KiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 2048.0 avail Mem
– 查看进程状态:
$ ps aux | grep oceanbase
# 输出:
# oceanbase 1234 85.0 50.0 1024000 819200 ? Ssl 10:00 10:00 oceanbase
### 2. 原因分析
– 分析SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW FULL PROCESSLIST;”
# 输出:
# +—-+——+———–+———+———+——+——-+———————–+
# | Id | User | Host | db | Command | Time | State | Info |
# +—-+——+———–+———+———+——+——-+———————–+
# | 1 | fgedu| localhost | fgedudb | Query | 10 | executing | SELECT * FROM fgedu_order WHERE user_id = 123456 |
# +—-+——+———–+———+———+——+——-+———————–+
– 查看执行计划:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu_order WHERE user_id = 123456;”
# 输出:
# +—-+————-+————-+——+—————+——+———+——+———+————-+
# | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
# +—-+————-+————-+——+—————+——+———+——+———+————-+
# | 1 | SIMPLE | fgedu_order | ALL | NULL | NULL | NULL | NULL | 100000 | Using where |
# +—-+————-+————-+——+—————+——+———+——+———+————-+
### 3. 解决方案
– 创建索引:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_user_id ON fgedu_order(user_id);”
– 优化SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT * FROM fgedu_order WHERE user_id = 123456;”
### 4. 测试验证
– 查看CPU使用率:
$ top
# 输出:
# top – 12:00:00 up 1 day, 2:00, 2 users, load average: 1.50, 2.20, 3.80
# Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
# %Cpu(s): 15.0 us, 5.0 sy, 0.0 ni, 80.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# KiB Mem : 16384.0 total, 4096.0 free, 10240.0 used, 2048.0 buff/cache
# KiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 4096.0 avail Mem
– 查看执行计划:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu_order WHERE user_id = 123456;”
# 输出:
# +—-+————-+————-+——+—————+————-+———+——-+——+————-+
# | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
# +—-+————-+————-+——+—————+————-+———+——-+——+————-+
# | 1 | SIMPLE | fgedu_order | ref | idx_user_id | idx_user_id | 4 | const | 1 | Using where |
# +—-+————-+————-+——+—————+————-+———+——-+——+————-+
## 案例总结
– 成功优化了CPU使用率,从85%降低到15%
– 原因是缺少索引,导致全表扫描
– 解决方案是创建了user_id索引
– 验证了优化的有效性,系统响应速度明显提升
4.2 内存优化实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群
– 业务类型:金融核心业务
– 问题:内存使用率高,系统频繁交换
## 实施步骤
### 1. 问题分析
– 查看内存使用率:
$ free -h
# 输出:
# total used free shared buff/cache available
# Mem: 16G 14G 512M 0B 1.5G 512M
# Swap: 4G 2G 2G
– 查看进程内存使用:
$ ps aux | grep oceanbase | sort -nrk 4,4 | head -5
# 输出:
# oceanbase 1234 50.0 87.5 14336.0 14080.0 ? Ssl 10:00 10:00 oceanbase
### 2. 原因分析
– 查看OceanBase内存配置:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL VARIABLES LIKE ‘memory_limit’;”
# 输出:
# +—————+——-+
# | Variable_name | Value |
# +—————+——-+
# | memory_limit | 12G |
# +—————+——-+
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL VARIABLES LIKE ‘cache_size’;”
# 输出:
# +—————+——-+
# | Variable_name | Value |
# +—————+——-+
# | cache_size | 8G |
# +—————+——-+
### 3. 解决方案
– 调整内存配置:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET memory_limit = ’10G’ TENANT ‘sys’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET cache_size = ‘6G’ TENANT ‘sys’;”
– 优化SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu_order WHERE order_time >= ‘2026-01-01’ AND order_time < '2026-01-02';"
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "CREATE INDEX idx_order_time ON fgedu_order(order_time);"
### 4. 测试验证
- 查看内存使用率:
$ free -h
# 输出:
# total used free shared buff/cache available
# Mem: 16G 10G 4G 0B 2G 4G
# Swap: 4G 0B 4G
- 查看进程内存使用:
$ ps aux | grep oceanbase | sort -nrk 4,4 | head -5
# 输出:
# oceanbase 1234 40.0 62.5 10240.0 10080.0 ? Ssl 10:00 10:00 oceanbase
- 测试查询性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SELECT SQL_NO_CACHE * FROM fgedu_order WHERE order_time >= ‘2026-01-01’ AND order_time < '2026-01-02';"
# 输出:
# +---------+---------+--------------+---------------------+
# | order_id | user_id | order_amount | order_time |
# +---------+---------+--------------+---------------------+
# | 1 | 1 | 100.00 | 2026-01-01 00:00:00 |
# | 2 | 2 | 100.00 | 2026-01-01 00:00:00 |
# ...
# +---------+---------+--------------+---------------------+
# 1000 rows in set (0.05 sec)
## 案例总结
- 成功优化了内存使用率,从87.5%降低到62.5%
- 原因是内存配置过高,导致系统频繁交换
- 解决方案是调整内存配置和优化SQL语句
- 验证了优化的有效性,系统响应速度明显提升
4.3 磁盘I/O优化实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群
– 业务类型:电商业务
– 问题:磁盘I/O使用率高,系统响应慢
## 实施步骤
### 1. 问题分析
– 查看磁盘I/O使用率:
$ iostat -x 1
# 输出:
# Device r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
# sda 100 50 10.0 5.0 300 10.0 100 50 150 5.0 100.0
– 查看进程I/O使用:
$ pidstat -d 1
# 输出:
# Linux 5.14.0-1.el9.x86_64 (fgedu.net.cn) 2026-01-01 _x86_64_ (4 CPU)
#
# 12:00:00 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
# 12:00:00 0 1234 10000 5000 0 0 oceanbase
### 2. 原因分析
– 查看OceanBase存储配置:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL VARIABLES LIKE ‘datafile_disk_percentage’;”
# 输出:
# +———————–+——-+
# | Variable_name | Value |
# +———————–+——-+
# | datafile_disk_percentage | 90 |
# +———————–+——-+
– 分析SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW FULL PROCESSLIST;”
# 输出:
# +—-+——+———–+———+———+——+——-+———————–+
# | Id | User | Host | db | Command | Time | State | Info |
# +—-+——+———–+———+———+——+——-+———————–+
# | 1 | fgedu| localhost | fgedudb | Query | 10 | executing | INSERT INTO fgedu_order VALUES (100001, 100001, 100.00, NOW()); |
# +—-+——+———–+———+———+——+——-+———————–+
### 3. 解决方案
– 调整存储配置:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET datafile_disk_percentage = 80 TENANT ‘sys’;”
– 优化SQL语句:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_order_time ON fgedu_order(order_time);”
– 优化文件系统:
$ mount -o remount,noatime,nodiratime /ob/data
### 4. 测试验证
– 查看磁盘I/O使用率:
$ iostat -x 1
# 输出:
# Device r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
# sda 50 25 5.0 2.5 300 2.0 20 10 30 2.0 15.0
– 查看进程I/O使用:
$ pidstat -d 1
# 输出:
# Linux 5.14.0-1.el9.x86_64 (fgedu.net.cn) 2026-01-01 _x86_64_ (4 CPU)
#
# 12:00:00 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
# 12:00:00 0 1234 5000 2500 0 0 oceanbase
– 测试插入性能:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “INSERT INTO fgedu_order VALUES (100002, 100002, 100.00, NOW());”
# 输出:
# Query OK, 1 row affected (0.01 sec)
## 案例总结
– 成功优化了磁盘I/O使用率,从100%降低到15%
– 原因是磁盘空间使用率过高,导致I/O性能下降
– 解决方案是调整存储配置、优化SQL语句和文件系统
– 验证了优化的有效性,系统响应速度明显提升
Part05-风哥经验总结与分享
5.1 性能调优最佳实践
性能调优的最佳实践:
- 监控先行:建立完善的监控系统,及时发现性能问题
- 分析瓶颈:使用性能分析工具,找出性能瓶颈
- 优化顺序:先优化软件,再升级硬件
- 分阶段优化:将性能优化分为多个阶段,逐步实施
- 重点优化:优先优化系统的性能瓶颈
- 持续优化:性能优化是一个持续的过程,需要定期进行
- 文档化:记录性能优化的过程和结果,形成知识库
- 测试验证:在优化后进行测试,验证优化的有效性
5.2 常见性能问题与解决方案
常见性能问题与解决方案:
- CPU使用率高:
- 原因:SQL语句执行效率低,缺少索引,全表扫描
- 解决方案:优化SQL语句,创建合适的索引,减少全表扫描
- 内存使用率高:
- 原因:内存配置过高,内存泄漏,缓存设置不合理
- 解决方案:调整内存配置,检查内存泄漏,优化缓存设置
- 磁盘I/O使用率高:
- 原因:磁盘空间不足,I/O密集型操作,文件系统配置不合理
- 解决方案:清理磁盘空间,优化I/O操作,调整文件系统配置
- 网络延迟高:
- 原因:网络带宽不足,网络拥塞,网络配置不合理
- 解决方案:增加网络带宽,优化网络配置,使用负载均衡
- 响应时间长:
- 原因:SQL语句执行慢,系统资源不足,应用代码效率低
- 解决方案:优化SQL语句,增加系统资源,优化应用代码
5.3 性能调优 checklist
性能调优 checklist:
- 系统层面:
- 是否优化了内核参数?
- 是否优化了文件系统?
- 是否优化了资源限制?
- 是否优化了NUMA设置?
- 是否优化了大页内存?
- 数据库层面:
- 是否优化了内存配置?
- 是否优化了连接配置?
- 是否优化了存储配置?
- 是否优化了SQL语句?
- 是否创建了合适的索引?
- 应用层面:
- 是否优化了应用代码?
- 是否使用了缓存?
- 是否优化了算法?
- 是否减少了不必要的计算?
- 监控层面:
- 是否建立了完善的监控系统?
- 是否设置了合理的告警阈值?
- 是否定期分析监控数据?
- 是否及时发现和处理性能问题?
- 测试层面:
- 是否进行了负载测试?
- 是否进行了性能测试?
- 是否验证了优化的有效性?
- 是否记录了测试结果?
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
