it编程 > 数据库 > Mysql

MySQL的Query Cache和PostgreSQL的pg_prewarm详解

10人参与 2025-07-24 Mysql

mysql 的 query cachepostgresql 的 pg_prewarm核心功能、原理机制、使用建议、适用场景、对比分析

一、mysql 的 query cache(查询缓存)【已废弃】

功能概述

mysql 的 query cache 是一个用于缓存 sql 查询结果的全局缓存,当完全相同的 sql 被再次执行时,可以直接返回缓存结果,跳过解析、优化、执行流程。

原理机制

主要参数:

query_cache_type = 1           # 0=off, 1=on, 2=demand
query_cache_size = 64m         # 缓存总大小
query_cache_limit = 1m         # 单条查询最大缓存

优缺点:

优点缺点
小型、读多写少场景命中率高,减少 cpu 和磁盘压力易导致全局锁争用,数据一变即清空相关缓存,命中率低
查询速度可极大提升(只要 sql 和表数据都未变化)高并发写时性能下降严重,适得其反;多核扩展性差

注意事项:

二、postgresql 的 pg_prewarm(页级预热)

功能概述

postgresql 的 pg_prewarm 是一个 将表或索引数据加载进共享缓冲区(shared_buffers) 的扩展模块,常用于数据库重启后的 热数据预加载(预热),加快数据库“恢复访问性能”。

原理机制

使用方式

-- 加载扩展
create extension if not exists pg_prewarm;

-- 手动预热某表
select pg_prewarm('mytable');

-- 指定预热方式(可选:prefetch, read, buffer, read_async)
select pg_prewarm('mytable', 'prefetch');

配合自动预热使用

  1. 开启插件:
shared_preload_libraries = 'pg_prewarm'
  1. 使用 pg_buffercache + pg_prewarm 定期导出热数据页,在重启后恢复:
select * from pg_buffercache limit 10;
-- 使用 extension 来结合自动恢复机制

优缺点:

优点缺点
明确、主动地提升关键数据表冷启动性能非自动缓存,需额外维护策略与脚本
适合大表/索引重启预热,提升系统恢复性能如果 shared_buffers 太小,效果有限

三、对比总结

特性 / 系统mysql query cachepostgresql pg_prewarm
缓存内容sql 查询结果数据页(blocks)
缓存粒度sql 层存储层(页级别)
命中条件sql 完全相同且数据未改动无需精确 sql,可按表预热
一致性影响高(数据更新后清除缓存)无影响(数据页始终一致)
是否自动可自动缓存需手动或脚本维护
现代支持情况mysql 8.0 移除postgresql 官方推荐扩展
推荐替代方案redis 缓存 + innodb buffer pool使用 shared_buffers + pg_prewarm

实战建议

若你是运维/postgresql dba

建议使用 pg_prewarm 结合 pg_buffercache、监控热页访问模式,定期导出热数据页信息,并写入 cron 脚本,在系统重启后调用预热脚本提升性能。

若你还在使用老版本 mysql(5.6/5.7)

避免启用 query cache(除非是非常小的读密集型场景),建议通过应用层缓存 + innodb 参数优化提升查询效率。

innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

mysql给字段添加默认值的实现

07-24

MySQL Semaphore wait has lasted使用详解

07-24

MySQL中DELETE、DROP和TRUNCATE的区别与底层原理分析

07-24

MySQL有坏快后drop表就crash了的解决方案

07-24

深入探讨MySQL分词查询与全文索引技术

07-24

MySQL多实例管理如何在一台主机上运行多个mysql

07-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论