Debian LNMP数据库优化技巧
systemctl disable禁用未使用的服务(如蓝牙、打印服务),减少系统资源占用。noatime选项(减少文件访问时间更新的开销)。/etc/sysctl.conf中的关键参数,如vm.swappiness=10(降低swap使用概率)、net.core.somaxconn=65535(增加TCP连接队列长度)、net.ipv4.tcp_fin_timeout=30(缩短TCP连接超时时间)。innodb_buffer_pool_size为系统内存的50%-80%(如16GB内存设置为8GB-12GB),用于缓存数据和索引,显著提升查询性能。max_connections(如500-1000),避免过多连接导致资源耗尽;同时设置wait_timeout=60(非交互连接超时时间)、interactive_timeout=28800(交互连接超时时间),及时释放闲置连接。sort_buffer_size=4M(排序操作内存)、tmp_table_size=64M(临时表内存大小),减少磁盘临时表的创建(磁盘I/O远慢于内存)。utf8mb4(支持完整的Unicode字符,如emoji),避免乱码问题。shared_buffers为系统内存的25%-40%(如16GB内存设置为4GB-6GB),用于缓存数据页,提升读取性能。work_mem=16M(排序、哈希操作内存)、maintenance_work_mem=256M(维护操作如VACUUM的内存),优化复杂查询和数据库维护性能。wal_buffers=16M(WAL缓冲区大小)、commit_delay=100(提交延迟毫秒数),提升写入性能(需权衡数据安全性)。WHERE、JOIN、ORDER BY的列添加索引(如主键、外键、高频查询字段);避免过度索引(每个索引会增加写入开销)。(user_id, create_time)),遵循最左前缀原则(查询条件需包含索引左侧列)。OPTIMIZE TABLE整理表碎片,删除不再使用的索引(通过SHOW INDEX查看索引使用情况)。EXPLAIN命令查看执行计划,识别全表扫描、索引未使用等问题(如type列为ALL表示全表扫描)。SELECT id, name FROM users),减少数据传输量和内存占用。LIMIT offset, size时,避免大offset(如LIMIT 10000, 10),改用WHERE id > last_id LIMIT 10(基于上一页最后一条记录的ID查询)。DELETE语句时分批删除(如LIMIT 1000),避免锁表。OPTIMIZE TABLE整理表碎片(针对InnoDB表,相当于ALTER TABLE ... FORCE),恢复空间利用率。ANALYZE TABLE更新表的统计信息,帮助优化器生成更优的执行计划。slow_query_log=1),设置long_query_time=1(超过1秒的查询视为慢查询),定期分析慢查询日志(如使用mysqldumpslow工具)。