一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL緩存的查詢和清除命令使用詳解

MySQL緩存的查詢和清除命令使用詳解

2020-05-25 15:43OrangeHolic Mysql

這篇文章主要介紹了MySQL緩存的查詢和清除命令使用詳解,對于一些不常改變數據且有大量相同sql查詢的表,查詢緩存會顯得比較有用一些,需要的朋友可以參考下

Mysql 查詢緩存
查詢緩存的作用就是當查詢接收到一個和之前同樣的查詢,服務器將會從查詢緩存種檢索結果,而不是再次分析和執行上次的查詢。這樣就大大提高了性能,節省時間。
1.配置查詢緩存
修改配置文件,修改[mysqld]下的query_cache_size和query_cache_type(如果沒有則添加)。其中query_cache_size表示緩存的大小,而query_cache_type有3個值,表示緩存那種類  型的select結果集,query_cache_type各個值如下:
0或off關閉緩存
1或on開啟緩存,但是不保存使用sql_no_cache的select語句,如不緩存select  sql_no_cache name from wei where id=2
2或demand開啟有條件緩存,只緩存帶sql_cache的select語句,緩存select  sql_cache name from wei where id=4
例子的配置為下,配置完成重啟Mysql服務器即可。

?
1
2
query_cache_size=10M
query_cache_type=1

可以用如下命令查看是否開啟,其中have_query_cache為是否開啟,query_cache_limit 指定單個查詢能夠使用的緩沖區大小,缺省為1M;query_cache_min_res_unit為系統分配的最小緩存塊大小,默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據 查詢,就容易造成內存碎片和浪費;query_cache_size和query_cache_type就是上面我們的配置;query_cache_wlock_invalidate表示當有其他客戶端正在對MyISAM表進行寫操作時,如果查詢在query cache中,是否返回cache結果還是等寫操作完成再讀表獲取結果。

?
1
2
3
4
5
6
7
8
9
10
11
12
mysql> show variables like '%query_cache%';
+------------------------------+----------+
| Variable_name        | Value  |
+------------------------------+----------+
| have_query_cache       | YES   |
| query_cache_limit      | 1048576 |
| query_cache_min_res_unit   | 4096   |
| query_cache_size       | 10485760 |
| query_cache_type       | ON    |
| query_cache_wlock_invalidate | OFF   |
+------------------------------+----------+
6 rows in set (0.00 sec)

2.測試
我們先執行一次,select  count(*) from wei ;然后再執行一次,可以看出第二次用的時間遠遠低于第一次的執行,因為第二次從緩存中讀取了select結果。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select count(*) from wei ;
+----------+
| count(*) |
+----------+
| 4194304 |
+----------+
1 row in set (3.92 sec)
 
mysql> select count(*) from wei ;
+----------+
| count(*) |
+----------+
| 4194304 |
+----------+
1 row in set (0.00 sec)

我們可以通過如下命令查看現在緩存的情況

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show status like 'qcache%';
+-------------------------+----------+
| Variable_name      | Value  |
+-------------------------+----------+
| Qcache_free_blocks   | 1    |
| Qcache_free_memory   | 10475424 |
| Qcache_hits       | 1    |
| Qcache_inserts     | 1    |
| Qcache_lowmem_prunes  | 0    |
| Qcache_not_cached    | 0    |
| Qcache_queries_in_cache | 1    |
| Qcache_total_blocks   | 4    |
+-------------------------+----------+
8 rows in set (0.00 sec)

其中各個參數的意義如下:

  • Qcache_free_blocks:緩存中相鄰內存塊的個數。數目大說明可能有碎片。FLUSH QUERY CACHE會對緩存中的碎片進行整理,從而得到一個空閑塊。
  • Qcache_free_memory:緩存中的空閑內存。
  • Qcache_hits:每次查詢在緩存中命中時就增大
  • Qcache_inserts:每次插入一個查詢時就增大。命中次數除以插入次數就是不中比率。
  • Qcache_lowmem_prunes:緩存出現內存不足并且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個 數字在不斷增長,就表示可能碎片非常嚴重,或者內存很少。(上面的 free_blocks和free_memory可以告訴您屬于哪種情況)
  • Qcache_not_cached:不適合進行緩存的查詢的數量,通常是由于這些查詢不是 SELECT 語句或者用了now()之類的函數。
  • Qcache_queries_in_cache:當前緩存的查詢(和響應)的數量。
  • Qcache_total_blocks:緩存中塊的數量。


清除緩存
mysql的FLUSH句法(清除緩存)

?
1
FLUSH flush_option [,flush_option]

如果你想要清除一些MySQL使用內部緩存,你應該使用FLUSH命令。為了執行FLUSH,你必須有reload權限。
flush_option可以是下列任何東西:

  • HOSTS       這個用的最多,經常碰見。主要是用來清空主機緩存表。如果你的某些主機改變IP數字,或如果你得到錯誤消息Host ... isblocked,你應該清空主機表。當在連接MySQL服務器時,對一臺給定的主機有多于 max_connect_errors個錯誤連續不斷地發生,MySQL為了安全的需要將會阻止該主機進一步的連接請求。清空主機表允許主機再嘗試連接。
  • LOGS        關閉當前的二進制日志文件并創建一個新文件,新的二進制日志文件的名字在當前的二進制文件的編號上加1。
  • PRIVILEGES  這個也是經常使用的,每當重新賦權后,為了以防萬一,讓新權限立即生效,一般都執行一把,目地是從數據庫授權表中重新裝載權限到緩存中。
  • TABLES       關閉所有打開的表,同時該操作將會清空查詢緩存中的內容。
  • FLUSH TABLES WITH READ LOCK   關閉所有打開的表,同時對于所有數據庫中的表都加一個讀鎖,直到顯示地執行unlock tables,該操作常常用于數據備份的時候。
  • STATUS       重置大多數狀態變量到0。
  • MASTER        刪除所有的二進制日志索引文件中的二進制日志文件,重置二進制日志文件的索引文件為空,創建一個新的二進制日志文件,不過這個已經不推薦使用,改成reset master 了。可以想象,以前自己是多土啊,本來一條簡單的命令就可以搞定的,卻要好幾條命令來,以前的做法是先查出來當前的二進制日志文件名,再用purge 操作。
  • QUERY CACHE   重整查詢緩存,消除其中的碎片,提高性能,但是并不影響查詢緩存中現有的數據,這點和Flush table 和Reset Query  Cache(將會清空查詢緩存的內容)不一樣的。
  • SLAVE        類似于重置復制吧,讓從數據庫忘記主數據庫的復制位置,同時也會刪除已經下載下來的relay log,與Master一樣,已經不推薦使用,改成Reset Slave了。這個也很有用的。

  一般來講,Flush操作都會記錄在二進制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不會記錄,因此上述操作如果記錄在二進制日志文件中話,會對從數據庫造成影響。注意:Reset操作其實扮演的是一個Flush操作的增強版的角色。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小嫩videos| 欧美精品国产第一区二区 | 欧美成人精品福利网站 | 国产亚洲精品看片在线观看 | 果冻传媒mv在线观看入口免费 | 肥胖女人一级毛片 | 无套大战白嫩乌克兰美女 | 甜蜜调教 | 免费看国产精品麻豆 | 99视频都是精品热在线播放 | 黄片毛片| 青青草原国产在线 | 好大好硬快点好爽公 | 亚洲高清色图 | 国产精品全国探花在线观看 | 日本暖暖在线 | 欧美激情精品久久久久久不卡 | 激情男人天堂 | 2022最新a精品视频在线观看 | 亚洲第一综合天堂另类专 | 婷婷在线观看香蕉五月天 | 亚洲AV无码专区国产乱码网站 | sedog在线长片 | 国产精品久久国产精品99 | 欧美第十页| 久久视热频国产这里只有精品23 | 亚洲精品乱码蜜桃久久久 | 欧美日韩国产在线一区 | 久99久热只有精品国产99 | 亚洲国产精品综合福利专区 | 午夜深情在线观看免费 | 精品国偷自产在线 | 2023毛片| 国产福利视频一区二区微拍视频 | 久久精品热只有精品 | 我的男友是消防员在线观看 | 激情小说色图 | 国产色网 | 96免费精品视频在线 | 亚洲gogo人体大胆西西安徽 | 久久精品麻豆国产天美传媒果冻 |