《Mysql學習淺析MySQL內存的使用說明(全局緩存+線程緩存)》要點:
本文介紹了Mysql學習淺析MySQL內存的使用說明(全局緩存+線程緩存),希望對您有用。如果有疑問,可以聯系我們。
首先我們來看一個公式,MySQL中內存分為全局內存和線程內存兩大部分(其實并不全部,只是影響比較大的 部分):
MYSQL實例
線程緩存
每個連接到MySQL服務器的線程都需要有自己的緩沖.大概需要立刻分配256K,甚至在線程空閑時,它們使用默認的線程堆棧,網絡緩存等.事務開始之后,則需要增加更多的空間.運行較小的查詢可能僅給指定的線程增加少量的內存消耗,然而如果對數據表做復雜的操作例如掃描、排序或者需要臨時表,則需分配大約read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size大小的內存空間.不過它們只是在需要的時候才分配,并且在那些操作做完之后就釋放了.有的是立刻分配成單獨的組塊.tmp_table_size 可能高達MySQL所能分配給這個操作的最大內存空間了.
read_buffer_size:是MySQL讀入緩沖區大小.對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段內存緩沖區.read_buffer_size變量控制這一緩沖區的大小.如果對表的順序掃描請求非常頻繁,并且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能.
sort_buffer_size:是MySQL執行排序使用的緩沖大小.如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段.如果不能,可以嘗試增加sort_buffer_size變量的大小.
read_rnd_buffer_size:是MySQL的隨機讀緩沖區大小.當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區.進行排序查詢時,MySQL會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值.但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大.
tmp_table_size:是MySQL的臨時表緩沖大小.所有聯合在一個DML指令內完成,并且大多數聯合甚至可以不用臨時表即可以完成.大多數臨時表是基于內存的(HEAP)表.具有大的記錄長度的臨時表 (所有列的長度的和)或包含BLOB列的表存儲在硬盤上.如果某個內部heap(堆積)表大小超過tmp_table_size,MySQL可以根據需要自動將內存中的heap表改為基于硬盤的MyISAM表.還可以通過設置tmp_table_size選項來增加臨時表的大小.也就是說,如果調高該值,MySQL同時將增加heap表的大小,可達到提高聯接查詢速度的效果.
thread_stack :主要用來存放每一個線程自身的標識信息,如線程id,線程運行時基本信息等等,我們可以通過 thread_stack 參數來設置為每一個線程棧分配多大的內存.
join_buffer_size:應用程序經常會出現一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時候(all/index join),為了減少參與Join的“被驅動表”的讀取次數以提高性能,需要使用到 Join Buffer 來協助完成 Join操作.當 Join Buffer 太小,MySQL 不會將該 Buffer 存入磁盤文件,而是先將Join Buffer中的結果集與需要 Join 的表進行 Join 操作,然后清空 Join Buffer 中的數據,繼續將剩余的結果集寫入此 Buffer 中,如此往復.這勢必會造成被驅動表需要被多次讀取,成倍增加 IO 訪問,降低效率.
binlog_cache_size:在事務過程中容納二進制日志SQL 語句的緩存大小.二進制日志緩存是服務器支持事務存儲引擎并且服務器啟用了二進制日志(―log-bin 選項)的前提下為每個客戶端分配的內存,注意,是每個Client 都可以分配設置大小的binlog cache 空間.如果系統中經常會出現多語句事務的話,可以嘗試增加該值的大小,以獲得更好的性能.當然,我們可以通過MySQL 的以下兩個狀態變量來判斷當前的binlog_cache_size 的狀況:Binlog_cache_use 和Binlog_cache_disk_use.“max_binlog_cache_size”:和"binlog_cache_size"相對應,但是所代表的是binlog 能夠使用的最大cache 內存大小.當我們執行多語句事務的時候,max_binlog_cache_size 如果不夠大的話,系統可能會報出“ Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage”的錯誤.
其中需要注意的是:table_cache表示的是所有線程打開的表的數目,和內存無關.MYSQL實例
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3569.html