嵌入式设备资源受限,MySQL通常以轻量级模式(如mysqld_safe最小配置或Percona Server for ARM)部署,事务控制需兼顾一致性与实时性,而非单纯追求ACID完备性。
优先启用InnoDB存储引擎,禁用MyISAM;通过innodb_buffer_pool_size设为物理内存的30%–50%(如256MB设备设为64MB),避免swap抖动。关闭innodb_flush_log_at_trx_commit=2——牺牲极小数据丢失风险(断电最多丢1秒日志),换取写入吞吐显著提升。

建议图AI生成,仅供参考
单事务操作务必精简:单次事务内SQL不超过5条,且仅涉及同一业务逻辑单元(如“传感器校准+状态标记+时间戳更新”)。避免跨表联查或大字段UPDATE,防止锁等待超时或事务回滚开销激增。
显式控制事务边界,禁用AUTOCOMMIT=1。采用BEGIN → 执行关键SQL → 检查每步返回码(如mysql_affected_rows()非负)→ 成功则COMMIT,失败则ROLLBACK并记录错误码。不依赖隐式提交,确保故障时状态可溯。
针对高频率采集场景,用INSERT … ON DUPLICATE KEY UPDATE替代先SELECT再INSERT/UPDATE,减少RTT与锁竞争。对历史数据归档,采用分表策略(按小时/天命名),配合EVENT定时TRUNCATE旧表,避免单表膨胀拖慢事务响应。
锁策略聚焦行级锁定:主键或唯一索引WHERE条件必加,避免全表扫描触发表锁。读操作优先使用SELECT … FOR UPDATE仅当需强一致性修改,否则改用SELECT … LOCK IN SHARE MODE或直接读已提交隔离级别(READ-COMMITTED),降低锁冲突概率。
日志精简:关闭general_log,保留slow_query_log但设置long_query_time=2.0;二进制日志(binlog)按需启用(仅用于主从同步),格式设为STATEMENT以减小体积。定期清理ib_logfile文件,防止SD卡空间耗尽。
实测验证:在目标硬件上用sysbench模拟并发事务,监控show engine innodb status输出中的“TRANSACTIONS”与“SEMAPHORES”节,若lock waits持续高于5%,需回溯SQL路径优化索引或拆分事务粒度。