您好,登錄后才能下訂單哦!
這篇文章主要介紹了MySQL中table_cache如何優(yōu)化,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
table_cache 參數(shù)設(shè)置表高速緩存的數(shù)目。每個(gè)連接進(jìn)來(lái),都會(huì)至少打開一個(gè)表緩存。因此, table_cache 的大小應(yīng)與 max_connections 的設(shè)置有關(guān)。例如,對(duì)于 200 個(gè)并行運(yùn)行的連接,應(yīng)該讓表的緩存至少有 200 × N ,這里 N 是應(yīng)用可以執(zhí)行的查詢的一個(gè)聯(lián)接中表的最大數(shù)量。此外,還需要為臨時(shí)表和文件保留一些額外的文件描述符。
當(dāng) Mysql 訪問(wèn)一個(gè)表時(shí),如果該表在緩存中已經(jīng)被打開,則可以直接訪問(wèn)緩存;如果還沒(méi)有被緩存,但是在 Mysql 表緩沖區(qū)中還有空間,那么這個(gè)表就被打開并放入表緩沖區(qū);如果表緩存滿了,則會(huì)按照一定的規(guī)則將當(dāng)前未用的表釋放,或者臨時(shí)擴(kuò)大表緩存來(lái)存放,使用表緩存的好處是可以更快速地訪問(wèn)表中的內(nèi)容。
執(zhí)行 flush tables 會(huì)清空緩存的內(nèi)容。一般來(lái)說(shuō),可以通過(guò)查看運(yùn)行峰值時(shí)間的狀態(tài)值 Open_tables 和 Opened_tables ,判斷是否需要增加 table_cache 的值。其中 open_tables 是當(dāng)前打開的表的數(shù)量, Opened_tables 則是已經(jīng)打開的表的數(shù)量。下面我們的例子顯示了這兩個(gè)狀態(tài)值的變化情況:
首先,清空表緩存:
> flush tables;
Query OK, 0 rows affected (0.00 sec)
察看當(dāng)前的表緩存情況:
mysql> show global status like open%_tables;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 0 |
| Opened_tables | 543 |
+---------------+-------+
2 rows in set (0.00 sec)
在當(dāng)前連接訪問(wèn)一個(gè)表:
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.03 sec)
mysql> show global status like open%_tables;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 1 |
| Opened_tables | 544 |
+---------------+-------+
2 rows in set (0.00 sec)
Open_tables和opened_tables都增加1。
再訪問(wèn)一個(gè)其他表,可以看到兩個(gè)參數(shù)都增加。
mysql> select count(*) from t2;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.06 sec)
mysql> show global status like open%_tables;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 2 |
| Opened_tables | 545 |
+---------------+-------+
2 rows in set (0.00 sec)
再訪問(wèn)表t1的時(shí)候:
mysql> select * from t1;
+------+
| id |
+------+
| 2 |
| 1 |
| 1 |
| 3 |
+------+
4 rows in set (0.02 sec)
mysql> show global status like open%_tables;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 2 |
| Opened_tables | 545 |
+---------------+-------+
2 rows in set (0.00 sec)
兩個(gè)參數(shù)都沒(méi)有變化,因?yàn)樵摫硪呀?jīng)在表緩存中打開了,沒(méi)有重復(fù)打開。
如果發(fā)現(xiàn) open_tables 接近 table_cache 的時(shí)候,并且 Opened_tables 這個(gè)值在逐步增加,那就說(shuō)明可能 table_cache 設(shè)置的偏小,經(jīng)常需要將緩存的表清出,將新的表放入緩存,這時(shí)可以考慮增加這個(gè)參數(shù)的大小來(lái)改善訪問(wèn)的效率
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MySQL中table_cache如何優(yōu)化”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。