在 Linux 上运行 IBM Informix 出现慢查询(slow query),通常不是单一原因,而是多个层面叠加。下面按最常见 → 较少见的顺序,系统性说明原因和排查思路。
典型表现
Sequential Scan)WHERE 条件字段没索引排查
SET EXPLAIN ON;
SELECT ...;
查看 sqexplain.out 是否出现:
Sequential Scan
解决
WHERE / JOIN / ORDER BY 字段上建索引表现
解决
UPDATE STATISTICS FOR TABLE table_name;
-- 或
UPDATE STATISTICS HIGH FOR TABLE table_name;
常见问题
WHERE DATE(create_time) = '2024-01-01'
→ 无法使用索引
SELECT * 返回大量字段LIKE '%xxx%'优化示例
WHERE create_time >= '2024-01-01 00:00:00'
AND create_time < '2024-01-02 00:00:00'
关键参数
BUFFERSLOCKSLOGSIZESHMVIRTSIZE表现
排查
vmstat 1
iostat -x 1
表现
iowait 很高检查
iostat -x 1
关注:
%util 接近 100%await 很大解决
Informix 推荐:
ext4 或 xfsnoatimebarrier(视存储而定)/etc/fstab 示例:
/dev/sdb /informix ext4 defaults,noatime 1 2
问题
建议
echo never > /sys/kernel/mm/transparent_hugepage/enabled
表现
排查
SELECT * FROM sysmaster:syslocks;
✅ 是否用了索引?
✅ 是否更新过 statistics?
✅ 是否磁盘 IO 高?
✅ 是否内存不足 / swap?
✅ 是否锁等待?
✅ SQL 是否可改写?
如果你愿意,可以贴出:
SET EXPLAIN 输出我可以 直接帮你分析执行计划并给出优化方案。