關於mysql記憶體管理 MYSQL記憶體管理及優化

2021-10-17 20:29:32 字數 1481 閱讀 8046

mysql記憶體管理及優化

記憶體是影響資料庫效能的主要資源,也是mysql效能優化的乙個重要方面;

記憶體優化的原則

將盡量多的記憶體分配給mysql做快取,但是要給作業系統和其他程式的執行預留足夠的記憶體,否則產生swap頁交換,將嚴重影響系統效能;

myisam的資料檔案讀取以來作業系統自身的io快取,如果有myisam的表,就要預留更多的記憶體給作業系統做io快取;

排序區,連線區等快取是分配給每個資料庫會話session專用的,預設值的設定要根據最大的連線資料合理分配,如果設定的太大,不但浪費記憶體資源,在併發比較高的時候會導致物理記憶體耗盡;

myisam記憶體優化

myisam儲存引擎使用 key_buffer快取索引塊,以加速myisam索引的讀寫速度。

myisam表的資料庫,mysql沒有特別的索引機制,完全依賴系統的io 快取。

1.ey_buffer_size 設定

key_buffer_size決定myisam索引快取區的大小;一般可以記憶體的1/4;

2.用多個索引快取

3.整 中點插入策略

4.整 read_buffer_size 和 read_rnd_buffer_size

innodb的記憶體優化

innod的快取機制

innodb用以塊記憶體做io快取池,該快取池不僅用來快取innodb的索引,而且也用來快取innodb的資料塊;

與myisam是不同的;

innod的快取機制

innodb_buffer_pool_size的設定

innodb_buffer_pool_size決定innodb儲存引擎表資料和索引資料的最大快取區的大小;

與oracle的快取機制很類似。

快取區越大,快取的命中率越高,需要的磁碟io越少,效能越高。

在乙個專用的資料庫伺服器上,可以將80%的物理記憶體分配給innodb buffer pool ,但是一定要注意設定過大導致頁交換,系統或其他的程式可以記憶體不足;

調整old sublist 大小

old sublist的比例有innodb_old_blocks_pct決定,預設是37;

在沒有比較大的表掃瞄或索引掃瞄的情況下,如果youngs的值很低,可能需要適當的增大innodb_old_blocks_pct的值,或者減少 innodb_old_blocks_time的值。

調整innodb_old_blocks_time的設定;

這個引數決定了快取資料塊由old sublist轉移到young sublit的快慢;

調整快取池的數量,減少內部對快取池資料結構的掙用;

mysql內部不同的執行緒對innodb快取池的訪問在某些階段是互斥的,這種內部的掙用現象也會產生效能問題,尤其是在搞併發和buffer pool 比較大的情況下。

通過inndb_buffer_pool_instances引數設定

控制innodb buffer重新整理,延長資料快取時間,減緩磁碟io;

innodb doublewrite

關於記憶體管理

簡單的理解,可以將記憶體分為三個部分 靜態區,棧和堆,三個部分都有自己的許可權,不可以隨便讀寫。靜態區 儲存自動全域性變數和static變數,靜態區的內容在總的程式的生命週期都存在,由編譯器在編譯的時候分配。棧 儲存區域性變數。棧上的內容只在函式的範圍內存在,當函式結束,這些內容也會被自動銷毀,效率...

關於記憶體管理

什麼是記憶體管理?是指軟體執行時對計算機記憶體資源的分配和使用技術。其最主要的目的就是如何高效 快速的分配,並且在適當的時候釋放和 記憶體資源。在 ios 中資料是存在堆和棧中的,然而我們的記憶體管理管理的是堆上的記憶體,棧上的記憶體並不需要我們管理。引用計數是計算機程式語言中的一種記憶體管理技術,...

關於記憶體管理

記憶體管理涉及根據資料庫更改的需求為oracle database例項記憶體結構維護最佳大小。必須管理的記憶體結構是系統全域性區域 sga 和例項程式全域性區域 例項pga oracle資料庫支援各種由初始化引數設定選擇的記憶體管理方法。oracle建議您啟用稱為自動記憶體管理的方法。自動記憶體管理...