新聞中心
MySQL是流行的關系型數(shù)據(jù)庫管理系統(tǒng),它支持各種功能,包括數(shù)據(jù)緩存。緩存能夠顯著提高MySQL數(shù)據(jù)庫的性能和響應時間,但它也會占用大量的內(nèi)存資源。在某些情況下,清空緩存表可能是必要的,例如:在進行壓力測試時,調(diào)整服務器配置時,或者進行數(shù)據(jù)備份和恢復時。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的遂寧網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
本文將介紹如何清空MySQL數(shù)據(jù)庫的緩存表。
之一步:檢查MySQL的緩存表
在開始清空MySQL的緩存表之前,首先需要確定MySQL正在使用哪些緩存表??梢允褂靡韵虏樵兠顏頇z查:
SHOW STATUS LIKE ‘Qcache%’;
SHOW VARIABLES LIKE ‘query_cache%’;
這些命令將顯示MySQL緩存表的詳細信息,如緩存表的名稱、大小、命中率等。
第二步:清空MySQL的緩存表
清空MySQL緩存表的方法有很多,下面我們將介紹其中的兩種方式:使用命令行和使用MySQL Workbench。
1. 使用命令行
使用命令行可以輕松清空MySQL的緩存表。請按照以下步驟進行操作:
a. 連接到MySQL服務器。在命令行界面上鍵入以下命令:
mysql -h hostname -u username -p
其中,hostname是MySQL服務器的IP地址或域名,username是MySQL用戶名。按回車鍵后,將出現(xiàn)提示輸入您的密碼。
b. 關閉MySQL查詢緩存。為了確保緩存表已被清空,需要關閉MySQL查詢緩存。在MySQL命令行中輸入以下命令:
SET GLOBAL query_cache_size = 0;
c. 清空MySQL緩存表。使用以下命令可以清空MySQL的緩存表:
FLUSH QUERY CACHE;
執(zhí)行完畢后,可以使用步驟一中的命令重新檢查MySQL的緩存表,以確認緩存表已被清空。
2. 使用MySQL Workbench
MySQL Workbench是一款流行的MySQL數(shù)據(jù)庫工具,它提供了清空緩存表的簡單方式。請按照以下步驟進行操作:
a. 打開MySQL Workbench,連接到MySQL服務器并打開“Server Status”頁面。
b. 在“緩存和索引”標簽下,單擊“刷新”按鈕。
c. 在“緩存和索引”選項卡下,找到“查詢緩存”并單擊“清除”按鈕。
d. 單擊“應用”按鈕,保存更改。執(zhí)行完畢后,可以使用步驟一中的命令重新檢查MySQL的緩存表,以確認緩存表已被清空。
注意事項
在進行MySQL緩存表清空時,需要注意以下幾點:
1. 清空MySQL緩存表會導致查詢速度變慢。由于緩存表中的數(shù)據(jù)未保存,因此新的查詢將需要重新計算。
2. 在生產(chǎn)環(huán)境中,應該謹慎清空MySQL的緩存表,可能會對性能產(chǎn)生負面影響。在清空之前,建議先備份數(shù)據(jù)庫,并評估清空的必要性和影響。
3. 在測試和開發(fā)環(huán)境中,可以定期清空MySQL緩存表以確保更佳性能。
結(jié)論
MySQL緩存表是提高數(shù)據(jù)庫性能的重要組成部分。在某些情況下,如優(yōu)化性能、備份和恢復數(shù)據(jù)等,清空MySQL的緩存表可能是必要的。本文介紹了如何使用命令行和MySQL Workbench清空MySQL緩存表,同時也提供了注意事項。希望這篇文章對您有所幫助。
相關問題拓展閱讀:
- MySQL數(shù)據(jù)庫優(yōu)化(七)
MySQL數(shù)據(jù)庫優(yōu)化(七)
為了能最小化磁盤I/O MyISAM 存儲引擎采用了很多數(shù)據(jù)庫系統(tǒng)使用的一種策略 它采用一種機制將最經(jīng)常訪問的表保存在內(nèi)存區(qū)塊中
對索引區(qū)塊來說 它維護著一個叫索引緩存(索引緩沖)的結(jié)構(gòu)體 這個結(jié)構(gòu)體中放著許多那些最常使用的索引區(qū)塊的緩沖區(qū)塊 對數(shù)據(jù)區(qū)塊來說 MySQL沒有使用特定的緩存 它依靠操作系統(tǒng)的本地文件系統(tǒng)緩存
本章首先描述了 MyISAM 索引緩存的基本操作 然后討論在MySQL 中所做的改進 它提高了索引緩存性能 同時能更好地控制緩存操作
線程之間不再是串行地訪問索引緩存 多個線程可以并行地訪問索引緩存 可以設置多個索引緩存 同時也能指定數(shù)據(jù)表索引到特定的緩存中
索引緩存機制對 ISAM 表同樣適用 不過 這種有效性正在減弱 自從MySQL 開始 MyISAM 表類型引進之后 ISAM 就不再建議使用了 MySQL 更是延續(xù)了這個趨勢 ISAM 類型默認被禁用了
可以通過系統(tǒng)變量 key_buffer_size 來控制索引緩存區(qū)塊的大小 如果這個值大小為 那么就不使用緩存 當這個值小得于不足以分配區(qū)塊緩沖的最小數(shù)量( )時 也不會使用緩存
當索引緩存無法操作時 索引文件就只通過操作系統(tǒng)提供的本地文件系統(tǒng)緩沖來訪問(換言之 表索引區(qū)塊采用的訪問策略和數(shù)據(jù)區(qū)塊的一致)
一個索引區(qū)塊在 MyISAM 索引文件中數(shù)純升是一個連續(xù)訪問的單元 通常這個索引區(qū)塊的大小和B樹索引節(jié)點大小一樣薯老(索引在磁盤中是以B樹結(jié)構(gòu)來表示的 這個樹的底部時葉子節(jié)點 葉子節(jié)點之上則是非葉子節(jié)點)
在索引緩存結(jié)構(gòu)中所有的區(qū)塊大小都是一樣的 這個值可能等于 大于 或小于表的索引區(qū)塊大小 通常這兩個值是不一樣的
當必須訪問來自任何表的索引區(qū)塊時 服務器首先檢查在索引緩存中是否有可用的緩沖區(qū)塊 如果有 服務器就訪問緩存中的數(shù)據(jù) 而非磁盤 就是說 它直接存取緩存 而不是存取磁盤 否則 服務器選擇一個(多個)包含其它不同表索引區(qū)塊的緩存緩沖區(qū)塊 將它的內(nèi)容替換成請求表的索引區(qū)塊的拷貝 一旦新的索引區(qū)塊在緩存中了 索引數(shù)據(jù)就可以存取了
當發(fā)生被選中要替換的區(qū)塊內(nèi)容修改了的情況時 這個區(qū)塊就被認為 臟 了 那么 在替換之前 它的內(nèi)容就必須先刷新到它指向的標索引
通常服務器遵循LRU(最近最少使用)策略 當要選擇替換的區(qū)塊時 它選擇最近最少使用的索引區(qū)塊 為了想要讓選擇變得更容易 索引緩存模塊會維護一個包含所有使用區(qū)塊特別的隊列(LRU鏈) 當一個區(qū)塊被訪問了 就把它放到隊列的最后位置 當區(qū)塊要被替換時 在隊列開始位置的區(qū)塊就是最近最少使用的 它就是之一候選刪除對象
共享訪問索引緩存
在MySQL 以前 訪問索引緩存是串行的 兩個線程不能并行地訪問索引緩存緩沖 服務器處理一個訪問索引區(qū)塊的請求只能等它之前的請求處理完 結(jié)果 新的請求所需的索引區(qū)塊就不在任何索引緩存環(huán)沖區(qū)塊中 因為其他線程把包含這個索引區(qū)塊的緩沖給更新了
從MySQL 開始 服務器支持共享方式訪問索引緩存
沒有正在被更新的緩沖可以被多個線程訪問
緩沖正被更新時 需要使用這個緩沖的線程只能等到更新完成之后
多個線程可以初始化需要替換緩存區(qū)塊的請求 只要它們不干擾別的線程(也就是 它們請求不同的索引區(qū)塊 因此不同的緩存區(qū)塊被替換)
共享方式訪問索引緩存令服務器明顯改善了吞吐量
多重索引緩存
共享訪問索引緩存改善了性能 卻不能完全消褲尺除線程間的沖突 它們?nèi)匀粻帗尶刂乒芾泶嫒∷饕彺婢彌_的結(jié)構(gòu) 為了更進一步減少索引緩存存取沖突 MySQL 提供了多重索引緩存特性 這能將不同的表索引指定到不同的索引緩存
當有多個索引緩存 服務器在處理指定的 MyISAM 表查詢時必須知道該使用哪個 默認地 所有的 MyISAM 表索引都緩存在默認的索引緩存中 想要指定到特定的緩存中 可以使用 CACHE INDEX 語句
如下語句所示 指定表的索 t t 和 t 引緩存到名為 hot_cache 的緩存中
mysql> CACHE INDEX t t t IN hot_cache; + + + + + | Table | Op | Msg_type | Msg_text | + + + + + | test t | assign_to_keycache | status | OK | | test t | assign_to_keycache | status | OK | | test t | assign_to_keycache | status | OK | + + + + +
注意 如果服務器編譯支持存 ISAM 儲引擎了 那么 ISAM 表也使用索引緩存機制 不過 ISAM 表索引只能使用默認的索引緩存而不能自定義
CACHE INDEX 語句中用到的索引緩存是根據(jù)用 SET GLOBAL 語句的參數(shù)設定的值或者服務器啟動參數(shù)指定的值創(chuàng)建的 如下 mysql> SET GLOBAL keycache key_buffer_size= * ; 想要刪除索引緩存 只需設置它的大小為 mysql> SET GLOBAL keycache key_buffer_size= ; 索引緩存變量是一個結(jié)構(gòu)體變量 由名字和組件構(gòu)成 例如 keycache key_buffer_size keycache 就是緩存名 key_buffer_size 是緩存組件 默認地 表索引在服務器啟動時指定到主(默認的)索引緩存中 當一個索引緩存被刪掉后 指定到這個緩存的所有索引都被重新指向到了默認索引緩存中去 對一個繁忙的系統(tǒng)來說 我們建議以下三條策略來使用索引緩存 熱緩存占用 %的總緩存空間 用于繁重搜索但很少更新的表 冷緩存占用 %的總緩存空間 用于中等強度更新的表 如臨時表 冷緩存占用 %的總緩存空間 作為默認的緩存 用于所有其他表 使用三個緩存的一個原因是好處在于 存取一個緩存結(jié)構(gòu)時不會阻止對其他緩存的訪問 訪問一個表索引的查詢不會跟指定到其他緩存的查詢競爭 性能提高還表現(xiàn)在以下幾點原因 熱緩存只用于檢索記錄 因此它的內(nèi)容總是不需要變化 所以 無論什么時候一個索引區(qū)塊需要從磁盤中引入 被選中要替換的緩存區(qū)塊的內(nèi)容總是要先被刷新 索引被指向熱緩存中后 如果沒有需要掃描全部索引的查詢 那么對應到B樹中非葉子節(jié)點的索引區(qū)塊極可能還保留在緩存中 在臨時表里必須頻繁執(zhí)行一個更新操作是相當快的 如果要被更新的節(jié)點已經(jīng)在緩存中了 它無需先從磁盤中讀取出來 當臨時表的索引大小和冷緩存大小一樣時 那么在需要更新一個節(jié)點時它已經(jīng)在緩存中存在的幾率是相當高的
中點插入策略
默認地 MySQL 的索引緩存管理系統(tǒng)采用LRU策略來選擇要被清除的緩存區(qū)塊 不過它也支持更完善的方法 叫做 中點插入策略
使用中點插入策略時 LRU鏈就被分割成兩半 一個熱子鏈 一個溫子鏈 兩半分割的點不是固定的 不過緩存管理系統(tǒng)會注意不讓溫子鏈部分 太短 總是至少包括全部緩存區(qū)塊的 key_cache_division_limit 比率 key_cache_division_limit 是緩存結(jié)構(gòu)體變量的組件部分 因此它是每個緩存都可以設置這個參數(shù)值
當一個索引區(qū)塊從表中讀入緩存時 它首先放在溫子鏈的末尾 當達到一定的點擊率(訪問這個區(qū)塊)后 它就提升到熱子鏈中去 目前 要提升一個區(qū)塊的點擊率( )對每個區(qū)塊來說都是一樣的 將來 我們會讓點擊率依靠B樹中對應的索引區(qū)塊節(jié)點的級別 包含非葉子節(jié)點的索引區(qū)塊所要求的提升點擊率就低一點 包含葉子節(jié)點的B索引樹的區(qū)塊的值就高點
提升起來的區(qū)塊首先放在熱子鏈的末尾 這個區(qū)塊在熱子鏈內(nèi)一直循環(huán) 如果這個區(qū)塊在該子鏈開頭位置停留時間足夠長了 它就會被降級回溫子鏈 這個時間是由索引緩存結(jié)構(gòu)體變量的組件 key_cache_age_threshold 值來決定的
這個閥值是這么描述的 一個索引緩存包含了 N 個區(qū)塊 熱子鏈開頭的區(qū)塊在低于 N*key_cache_age_threshold/ 次訪問后就被移動到溫子鏈的開頭位置 它又首先成為被刪除的候選對象 因為要被替換的區(qū)塊還是從溫子鏈的開頭位置開始的
中點插入策略就能在緩存中總能保持更有價值的區(qū)塊 如果更喜歡采用LRU策略 只需讓 key_cache_division_limit 的值低于默認值
中點插入策略能幫助改善在執(zhí)行需要有效掃描索引 它會將所有對應到B樹中高級別的有價值的節(jié)點推出的查詢時的性能 為了避免這樣 就必須設定 key_cache_division_limit 遠遠低于 以采用中點插入策略 則在掃描索引操作時那些有價值的頻繁點擊的節(jié)點就會保留在熱子鏈中了
索引預載入
如果索引緩存中有足夠的區(qū)塊用來保存全部索引 或者至少足夠保存全部非葉子節(jié)點 那么在使用前就載入索引緩存就很有意義了 將索引區(qū)塊以十分有效的方法預載入索引緩存緩沖 從磁盤中順序地讀取索引區(qū)塊
沒有預載入 查詢所需的索引區(qū)塊仍然需要被放到緩存中去 雖然索引區(qū)塊要保留在緩存中 因為有足夠的緩沖 它們可以從磁盤中隨機讀取到 而非順序地
想要預載入緩存 可以使用 LOAD INDEX INTO CACHE 語句 如下語句預載入了表 t 和 t 的索引節(jié)點(區(qū)塊)
mysql> LOAD INDEX INTO CACHE t t IGNORE LEAVES; + + + + + | Table | Op | Msg_type | Msg_text | + + + + + | test t | preload_keys | status | OK | | test t | preload_keys | status | OK | + + + + +
增加修飾語 IGNORE LEAVES 就只預載入非葉子節(jié)點的索引區(qū)塊 因此 上述語句加載了 t 的全部索引區(qū)塊 但是只加載 t 的非葉子節(jié)點區(qū)塊
如果使用 CACHE INDEX 語句將索引指向一個索引緩存 將索引區(qū)塊預先放到那個緩存中去 否則 索引區(qū)塊只會加載到默認的緩存中去
索引緩存大小
MySQL 引進了對每個索引緩存的新變量 key_cache_block_size 這個變量可以指定每個索引緩存的區(qū)塊大小 用它就可以來調(diào)整索引文件I/O操作的性能
當讀緩沖的大小和本地操作系統(tǒng)的I/O緩沖大小一樣時 就達到了I/O操作的更高性能了 但是設置索引節(jié)點的大小和I/O緩沖大小一樣未必能達到更好的總體性能 讀比較大的葉子節(jié)點時 服務器會讀進來很多不必要的數(shù)據(jù) 這大大阻礙了讀其他葉子節(jié)點
目前 還不能控制數(shù)據(jù)表的索引區(qū)塊大小 這個大小在服務器創(chuàng)建索引文件 ` MYI 時已經(jīng)設定好了 它根據(jù)數(shù)據(jù)表的索引大小的定義而定 在很多時候 它設置成和I/O緩沖大小一樣 在將來 可以改變它的值 并且會全面采用變量 key_cache_block_size
重建索引緩存
索引緩存可以通過修改其參數(shù)值在任何時候重建它 例如
mysql> SET GLOBAL cold_cache key_buffer_size= * * ;
如果設定索引緩存的結(jié)構(gòu)體變量組件變量 key_buffer_size 或 key_cache_block_size 任何一個的值和它當前的值不一樣 服務器就會清空原來的緩存 在新的變量值基礎上重建緩存 如果緩存中有任何的 臟 索引塊 服務器會先把它們保存起來然后才重建緩存 重新設定其他的索引緩存變量并不會重建緩存
lishixinzhi/Article/program/Oracle/202311/16615
關于mysql清空數(shù)據(jù)庫的緩存表的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設、網(wǎng)站維護、網(wǎng)站改版的網(wǎng)站建設公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應式移動網(wǎng)站開發(fā)制作等網(wǎng)站服務。
當前文章:如何清空MySQL數(shù)據(jù)庫的緩存表?(mysql清空數(shù)據(jù)庫的緩存表)
地址分享:http://m.fisionsoft.com.cn/article/ccohohj.html


咨詢
建站咨詢
