高CPU使用率
内存瓶颈
I/O瓶颈
锁争用
# 检查系统资源使用情况
top
htop
vmstat 1
iostat -x 1
# 内核参数调整
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
sysctl -p
# 文件系统优化
mount -o noatime,nodiratime,data=writeback /dev/sdX /mountpoint
MySQL示例:
[mysqld]
innodb_buffer_pool_size = 4G # 总内存的50-70%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 对数据安全性要求不高时可设为2
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 8
innodb_write_io_threads = 8
query_cache_size = 0 # 对于高并发写入环境建议禁用
PostgreSQL示例:
shared_buffers = 4GB # 总内存的25%
effective_cache_size = 12GB # 总内存的50-75%
work_mem = 64MB # 每个查询操作内存
maintenance_work_mem = 512MB # 维护操作内存
random_page_cost = 1.1 # SSD存储设为1.1
-- 使用EXPLAIN分析查询
EXPLAIN ANALYZE SELECT * FROM large_table WHERE condition;
-- 创建适当索引
CREATE INDEX idx_column ON table_name(column_name);
-- 避免全表扫描
SELECT * FROM table WHERE indexed_column = value;
-- 优化JOIN操作
SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.id WHERE b.condition;
数据库自带工具
SHOW PROCESSLIST
, SHOW ENGINE INNODB STATUS
pg_stat_activity
, pg_stat_statements
第三方工具
分区表
CREATE TABLE sales (
id INT,
sale_date DATE,
amount DECIMAL(10,2)
PARTITION BY RANGE (YEAR(sale_date)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
读写分离
连接池优化
通过系统化的方法识别和解决Linux数据库性能问题,可以显著提高数据库的响应速度和处理能力。