軟件測(cè)試 | table_cache的設(shè)置
在mysqld中對(duì)table_cache參數(shù)的定義如下:
這個(gè)參數(shù)表示數(shù)據(jù)庫(kù)用戶打開(kāi)表的緩存數(shù)量。每個(gè)連接進(jìn)來(lái),都會(huì)至少打開(kāi)一個(gè)表緩存。因此,table_cache與max_connections有關(guān),例如,對(duì)于200個(gè)并行運(yùn)行的連接,應(yīng)該讓表的緩存至少有200xN,這里N是可以執(zhí)行的查詢的一個(gè)聯(lián)接中表的最大數(shù)量。此外,還需要為臨時(shí)表和文件保留一些額外的文件描述符。
可以通過(guò)檢查mysqld的狀態(tài)變量open_tables和opend_tables確定這個(gè)參數(shù)是否過(guò)小,這兩個(gè)參數(shù)的區(qū)別是前者表示當(dāng)前打開(kāi)的表緩存數(shù),如果執(zhí)行FLUSH TABLES操作,則此系統(tǒng)會(huì)關(guān)閉一些當(dāng)前沒(méi)用使用的表緩存而使得此狀態(tài)值減??;后者表示曾經(jīng)打開(kāi)的表緩存數(shù),會(huì)一直進(jìn)行累加,如果執(zhí)行FLUSH TABLES操作,值不會(huì)減少。下面的例子驗(yàn)證了這個(gè)過(guò)程。
(1)首先清空表緩存,記錄兩個(gè)狀態(tài)的值:
(2)然后,執(zhí)行一個(gè)SQL,對(duì)表t進(jìn)行查詢:
(3)接著再查看這兩個(gè)參數(shù)的值:
(4)可以發(fā)現(xiàn),兩個(gè)參數(shù)值都因?yàn)閷?duì)表t的查詢而狀態(tài)加1。這時(shí),再次執(zhí)行剛才對(duì)表t的查詢:
(5)此時(shí)這兩個(gè)參數(shù)的值并沒(méi)有變化,因?yàn)楸韙的描述符已經(jīng)在此連接中打開(kāi)過(guò)一次,因此保存了表緩存中。因此,狀態(tài)值“open_tables”對(duì)于設(shè)置table_cache值有著更有價(jià)值的參考。