最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL的Query?Cache和PostgreSQL的pg_prewarm詳解

 更新時(shí)間:2025年07月24日 09:42:13   作者:喝醉酒的小白  
MySQL?QueryCache(已廢棄)緩存SQL結(jié)果,依賴(lài)全匹配且數(shù)據(jù)不變,高并發(fā)寫(xiě)時(shí)性能差;PostgreSQL?pg_prewarm預(yù)加載數(shù)據(jù)頁(yè)至共享緩沖區(qū),提升冷啟動(dòng)效率,需手動(dòng)維護(hù),建議用應(yīng)用層緩存或InnoDB?BufferPool替代

MySQL 的 Query CachePostgreSQL 的 pg_prewarm核心功能、原理機(jī)制、使用建議、適用場(chǎng)景、對(duì)比分析

一、MySQL 的 Query Cache(查詢(xún)緩存)【已廢棄】

功能概述

MySQL 的 Query Cache 是一個(gè)用于緩存 SQL 查詢(xún)結(jié)果的全局緩存,當(dāng)完全相同的 SQL 被再次執(zhí)行時(shí),可以直接返回緩存結(jié)果,跳過(guò)解析、優(yōu)化、執(zhí)行流程。

原理機(jī)制

  • 查詢(xún)緩存的是 結(jié)果集(Result Set),不是執(zhí)行計(jì)劃。
  • 只有完全相同的 SQL 字符串(包括空格、大小寫(xiě))才能命中緩存。
  • 當(dāng)表中的數(shù)據(jù)發(fā)生變化(如 INSERT/UPDATE/DELETE),該表相關(guān)的緩存會(huì)全部失效。
  • Query Cache 是全局唯一的,不分庫(kù)表、用戶(hù),也不是線程局部緩存。

主要參數(shù):

query_cache_type = 1           # 0=off, 1=on, 2=DEMAND
query_cache_size = 64M         # 緩存總大小
query_cache_limit = 1M         # 單條查詢(xún)最大緩存

優(yōu)缺點(diǎn):

優(yōu)點(diǎn)缺點(diǎn)
小型、讀多寫(xiě)少場(chǎng)景命中率高,減少 CPU 和磁盤(pán)壓力易導(dǎo)致全局鎖爭(zhēng)用,數(shù)據(jù)一變即清空相關(guān)緩存,命中率低
查詢(xún)速度可極大提升(只要 SQL 和表數(shù)據(jù)都未變化)高并發(fā)寫(xiě)時(shí)性能下降嚴(yán)重,適得其反;多核擴(kuò)展性差

注意事項(xiàng):

  • MySQL 5.7 開(kāi)始默認(rèn)關(guān)閉,8.0 已完全移除(廢棄)。
  • 在現(xiàn)代系統(tǒng)中,推薦使用應(yīng)用層緩存(如 Redis)、Proxy 層緩存或使用 InnoDB Buffer Pool(頁(yè)緩存)而非 Query Cache。

二、PostgreSQL 的 pg_prewarm(頁(yè)級(jí)預(yù)熱)

功能概述

PostgreSQL 的 pg_prewarm 是一個(gè) 將表或索引數(shù)據(jù)加載進(jìn)共享緩沖區(qū)(shared_buffers) 的擴(kuò)展模塊,常用于數(shù)據(jù)庫(kù)重啟后的 熱數(shù)據(jù)預(yù)加載(預(yù)熱),加快數(shù)據(jù)庫(kù)“恢復(fù)訪問(wèn)性能”。

原理機(jī)制

  • PostgreSQL 使用 Buffer Pool(共享緩沖區(qū)) 管理數(shù)據(jù)頁(yè),冷啟動(dòng)時(shí)緩存為空。
  • pg_prewarm 可以將指定的表、索引頁(yè)主動(dòng)讀取進(jìn)緩存,避免冷啟動(dòng)時(shí)慢查詢(xún)。
  • 可以搭配 auto_preload_libraries 自動(dòng)在啟動(dòng)時(shí)加載,也可以定期 dump 熱頁(yè)信息并在啟動(dòng)恢復(fù)。

使用方式

-- 加載擴(kuò)展
CREATE EXTENSION IF NOT EXISTS pg_prewarm;

-- 手動(dòng)預(yù)熱某表
SELECT pg_prewarm('mytable');

-- 指定預(yù)熱方式(可選:prefetch, read, buffer, read_async)
SELECT pg_prewarm('mytable', 'prefetch');

配合自動(dòng)預(yù)熱使用

  1. 開(kāi)啟插件:
shared_preload_libraries = 'pg_prewarm'
  1. 使用 pg_buffercache + pg_prewarm 定期導(dǎo)出熱數(shù)據(jù)頁(yè),在重啟后恢復(fù):
SELECT * FROM pg_buffercache LIMIT 10;
-- 使用 extension 來(lái)結(jié)合自動(dòng)恢復(fù)機(jī)制

優(yōu)缺點(diǎn):

優(yōu)點(diǎn)缺點(diǎn)
明確、主動(dòng)地提升關(guān)鍵數(shù)據(jù)表冷啟動(dòng)性能非自動(dòng)緩存,需額外維護(hù)策略與腳本
適合大表/索引重啟預(yù)熱,提升系統(tǒng)恢復(fù)性能如果 shared_buffers 太小,效果有限

三、對(duì)比總結(jié)

特性 / 系統(tǒng)MySQL Query CachePostgreSQL pg_prewarm
緩存內(nèi)容SQL 查詢(xún)結(jié)果數(shù)據(jù)頁(yè)(blocks)
緩存粒度SQL 層存儲(chǔ)層(頁(yè)級(jí)別)
命中條件SQL 完全相同且數(shù)據(jù)未改動(dòng)無(wú)需精確 SQL,可按表預(yù)熱
一致性影響高(數(shù)據(jù)更新后清除緩存)無(wú)影響(數(shù)據(jù)頁(yè)始終一致)
是否自動(dòng)可自動(dòng)緩存需手動(dòng)或腳本維護(hù)
現(xiàn)代支持情況MySQL 8.0 移除PostgreSQL 官方推薦擴(kuò)展
推薦替代方案Redis 緩存 + InnoDB Buffer Pool使用 shared_buffers + pg_prewarm

實(shí)戰(zhàn)建議

若你是運(yùn)維/PostgreSQL DBA

建議使用 pg_prewarm 結(jié)合 pg_buffercache、監(jiān)控?zé)犴?yè)訪問(wèn)模式,定期導(dǎo)出熱數(shù)據(jù)頁(yè)信息,并寫(xiě)入 cron 腳本,在系統(tǒng)重啟后調(diào)用預(yù)熱腳本提升性能。

若你還在使用老版本 MySQL(5.6/5.7)

避免啟用 Query Cache(除非是非常小的讀密集型場(chǎng)景),建議通過(guò)應(yīng)用層緩存 + InnoDB 參數(shù)優(yōu)化提升查詢(xún)效率。

  • 使用 InnoDB 緩沖池預(yù)熱
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mysql 日期時(shí)間 DATE_FORMAT(date,format)

    Mysql 日期時(shí)間 DATE_FORMAT(date,format)

    Mysql 日期時(shí)間 DATE_FORMAT(date,format) ,需要的朋友可以參考下。
    2010-12-12
  • MySQL事務(wù)與隔離級(jí)別的使用基礎(chǔ)理論

    MySQL事務(wù)與隔離級(jí)別的使用基礎(chǔ)理論

    這篇文章主要介紹了MySQL事務(wù)的隔離級(jí)別詳情,事務(wù)隔離級(jí)別越高,為避免沖突所花費(fèi)的性能也就越多,即效率低。在“可重復(fù)讀”級(jí)別,實(shí)際上可以解決部分的虛讀問(wèn)題,但是不能防止update更新產(chǎn)生的虛讀問(wèn)題,要禁止虛讀產(chǎn)生,還是需要設(shè)置串行化隔離級(jí)別
    2023-02-02
  • MySQL插入數(shù)據(jù)與查詢(xún)數(shù)據(jù)

    MySQL插入數(shù)據(jù)與查詢(xún)數(shù)據(jù)

    這篇文章主要介紹了 MySQL插入數(shù)據(jù)與查詢(xún)數(shù)據(jù),缺省插入、缺省插入、缺省插入等各種數(shù)據(jù)插入分享,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • linux下mysql開(kāi)啟遠(yuǎn)程訪問(wèn)權(quán)限 防火墻開(kāi)放3306端口

    linux下mysql開(kāi)啟遠(yuǎn)程訪問(wèn)權(quán)限 防火墻開(kāi)放3306端口

    這篇文章主要為大家詳細(xì)介紹了linux下mysql開(kāi)啟遠(yuǎn)程訪問(wèn)權(quán)限,防火墻開(kāi)放3306端口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL存儲(chǔ)數(shù)據(jù)亂碼的問(wèn)題解析

    MySQL存儲(chǔ)數(shù)據(jù)亂碼的問(wèn)題解析

    這篇文章主要介紹了MySQL存儲(chǔ)數(shù)據(jù)亂碼的問(wèn)題解析,作者從實(shí)際使用中的多個(gè)方面定位其原因然后解決,需要的朋友可以參考下
    2015-05-05
  • mysql數(shù)據(jù)庫(kù)重命名語(yǔ)句分享

    mysql數(shù)據(jù)庫(kù)重命名語(yǔ)句分享

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)重命名語(yǔ)句救命示例,語(yǔ)句中的數(shù)據(jù)庫(kù)表前綴換成自己的就可以了,大家參考使用吧
    2014-01-01
  • 深入理解Mysql的四種隔離級(jí)別

    深入理解Mysql的四種隔離級(jí)別

    開(kāi)發(fā)工作中我們會(huì)使用到事務(wù),那你們知道事務(wù)又分哪幾種嗎?MYSQL標(biāo)準(zhǔn)定義了4類(lèi)隔離級(jí)別,用來(lái)限定事務(wù)內(nèi)外的哪些改變是可見(jiàn)的,哪些是不可見(jiàn)的。低的隔離級(jí)一般支持更高的并發(fā)處理,并擁有更低的系統(tǒng)開(kāi)銷(xiāo)。下面通過(guò)這篇文章我們來(lái)一起深入理解Mysql中的四種隔離級(jí)別。
    2016-11-11
  • Mysql遷移到TiDB雙寫(xiě)數(shù)據(jù)庫(kù)兜底方案詳解

    Mysql遷移到TiDB雙寫(xiě)數(shù)據(jù)庫(kù)兜底方案詳解

    這篇文章主要為大家介紹了Mysql遷移到TiDB雙寫(xiě)數(shù)據(jù)庫(kù)兜底方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • MySQL的主從復(fù)制原理詳細(xì)分析

    MySQL的主從復(fù)制原理詳細(xì)分析

    這篇文章主要介紹了MySQL的主從復(fù)制原理詳細(xì)分析,讀寫(xiě)分離是基于主從復(fù)制來(lái)實(shí)現(xiàn)的。文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • MySQL主從復(fù)制配置心跳功能介紹

    MySQL主從復(fù)制配置心跳功能介紹

    這篇文章主要介紹了MySQL主從復(fù)制配置心跳功能介紹,解決Slave has read all relay log; waiting for the slave I/O thread to update it問(wèn)題,需要的朋友可以參考下
    2014-06-06

最新評(píng)論

阜城县| 达拉特旗| 濉溪县| 宜州市| 娱乐| 营山县| 汪清县| 阿巴嘎旗| 江西省| 金山区| 田阳县| 吴忠市| 务川| 玉屏| 个旧市| 靖西县| 青冈县| 泗水县| 会泽县| 南平市| 茂名市| 海淀区| 济南市| 文登市| 宿州市| 崇义县| 紫云| 崇左市| 保靖县| 汕尾市| 华亭县| 谷城县| 东城区| 东阳市| 手游| 曲沃县| 江津市| 勐海县| 五华县| 大悟县| 永和县|