如何在表讀取時進行緩存優化
作者:佚名 時間:2014-11-22 分享到:
在mysql中有兩種讀取數據文件的緩沖區,一種是sequential scan方式掃描表數據的時候使用,另一種則是在random scan的時候使用,雖然這兩種文件讀取緩沖區并不是myisam存儲引擎所特有的,但是myisam存儲引擎并不會cache數據文件,每次對數據文件的訪問都須要通過調用文件系統的相關指令從磁盤上面讀取物理文件,所以每次讀取數據文件所需的內存緩沖區的設置就對數據文件訪問的性能非常重要了,在mysql中對應這兩種緩沖區的相關參數如下:
1.read_buffer_size,以seequential scan方式掃描表數據時候使用的buffer
每個thread進行sequential scan的時候都會產生這個buffer,所以在設置的時候盡量不要太高,避免因為并發太大造成內存不夠,系統默認為128kb,最大為2gb,設置的值必須是4kb的倍數,否則系統會自動更改成小于設置值的最大的4kb的倍數,一般來說,可以嘗試適當調大些參數看是否能夠發送全表掃描的性能.在不同的平臺上可能會有不同的表現,這主要與os級別文件系統io的大小有關,這個參數的設置最好是在真實環境中通過多次更改流芳同,這樣才能選找到一個最佳值.
2.read_md_buffer_size,進行random scan的時候使用的buffer
read_md_buffer_size所設置的buffer實際上剛好和read_buffer_size所設置的buffer相反,一個是順序讀的時候使用,一個是隨機讀的時候使用,但是兩者都是對針對于線程的設置,每個線程都可能產生兩種buffer中的任何一個,read_md_buffer_size的默認值256kb,最大值為4gb.一般來說,將read_md_buffer_size的值適當調 大,對提高order by操作的性能有一定的效果,但這并不是說read_md_buffer_size就是用在order by操作所產生的數據讀取操作中.