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建議您啟用稱為自動記憶體管理的方法。自動記憶體管理...