亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在 MySQL中線程獨享內存有什么用

發布時間:2022-01-19 13:35:50 來源:億速云 閱讀:135 作者:小新 欄目:數據庫

這篇文章主要介紹了在 MySQL中線程獨享內存有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

  在 MySQL 中,線程獨享內存主要用于各客戶端連接線程存儲各種操作的獨享數據,如線程棧信息,分組排序操作,數據讀寫緩沖,結果集暫存等等,而且大多數可以通過相關參數來控制內存的使用量。

  線程棧信息使用內存(thread_stack):主要用來存放每一個線程自身的標識信息,如線程id,線程運行時基本信息等等,我們可以通過 thread_stack 參數來設置為每一個線程棧分配多大的內存。

  排序使用內存(sort_buffer_size):MySQL 用此內存區域進行排序操作(filesort),完成客戶端的排序請求。當我們設置的排序區緩存大小無法滿足排序實際所需內存的時候,MySQL 會將數據寫入磁盤文件來完成排序。由于磁盤和內存的讀寫性能完全不在一個數量級,所以sort_buffer_size參數對排序操作的性能影響絕對不可小視。排序操作的實現原理請參考:MySQL Order By 的實現分析。

  Join操作使用內存(join_buffer_size):應用程序經常會出現一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時候(all/index join),為了減少參與Join的“被驅動表”的讀取次數以提高性能,需要使用到 Join Buffer 來協助完成 Join操作(具體 Join 實現算法請參考:MySQL 中的 Join 基本實現原理)。當 Join Buffer 太小,MySQL 不會將該 Buffer 存入磁盤文件,而是先將Join Buffer中的結果集與需要 Join 的表進行 Join 操作,然后清空 Join Buffer 中的數據,繼續將剩余的結果集寫入此 Buffer 中,如此往復。這勢必會造成被驅動表需要被多次讀取,成倍增加 IO 訪問,降低效率。

  順序讀取數據緩沖區使用內存(read_buffer_size):這部分內存主要用于當需要順序讀取數據的時候,如無發使用索引的情況下的全表掃描,全索引掃描等。在這種時候,MySQL 按照數據的存儲順序依次讀取數據塊,每次讀取的數據快首先會暫存在read_buffer_size中,當 buffer 空間被寫滿或者全部數據讀取結束后,再將buffer中的數據返回給上層調用者,以提高效率。

  隨機讀取數據緩沖區使用內存(read_rnd_buffer_size):和順序讀取相對應,當 MySQL 進行非順序讀取(隨機讀取)數據塊的時候,會利用這個緩沖區暫存讀取的數據。如根據索引信息讀取表數據,根據排序后的結果集與表進行Join等等。總的來說,就是當數據塊的讀取需要滿足一定的順序的情況下,MySQL 就需要產生隨機讀取,進而使用到 read_rnd_buffer_size 參數所設置的內存緩沖區。

  連接信息及返回客戶端前結果集暫存使用內存(net_buffer_size):這部分用來存放客戶端連接線程的連接信息和返回客戶端的結果集。當 MySQL 開始產生可以返回的結果集,會在通過網絡返回給客戶端請求線程之前,會先暫存在通過 net_buffer_size 所設置的緩沖區中,等滿足一定大小的時候才開始向客戶端發送,以提高網絡傳輸效率。不過,net_buffer_size 參數所設置的僅僅只是該緩存區的初始化大小,MySQL 會根據實際需要自行申請更多的內存以滿足需求,但最大不會超過 max_allowed_packet 參數大小。

  批量插入暫存使用內存(bulk_insert_buffer_size):當我們使用如 insert …values(…),(…),(…)… 的方式進行批量插入的時候,MySQL 會先將提交的數據放如一個緩存空間中,當該緩存空間被寫滿或者提交完所有數據之后,MySQL 才會一次性將該緩存空間中的數據寫入數據庫并清空緩存。此外,當我們進行 LOAD DATA INFILE 操作來將文本文件中的數據 Load 進數據庫的時候,同樣會使用到此緩沖區。

  臨時表使用內存(tmp_table_size):當我們進行一些特殊操作如需要使用臨時表才能完成的 Order By,Group By 等等,MySQL 可能需要使用到臨時表。當我們的臨時表較小(小于 tmp_table_size 參數所設置的大小)的時候,MySQL 會將臨時表創建成內存臨時表,只有當 tmp_table_size 所設置的大小無法裝下整個臨時表的時候,MySQL 才會將該表創建成 MyISAM 存儲引擎的表存放在磁盤上。不過,當另一個系統參數 max_heap_table_size 的大小還小于 tmp_table_size 的時候,MySQL 將使用 max_heap_table_size 參數所設置大小作為最大的內存臨時表大小,而忽略 tmp_table_size 所設置的值。而且 tmp_table_size 參數從 MySQL 5.1.2 才開始有,之前一直使用 max_heap_table_size。

  上面所列舉的 MySQL 線程獨享內存僅僅只是所有線程獨享內存中的部分,并不是全部,選擇的原則是可能對 MySQL 的性能產生較大的影響,且可以通過系統參數進行調節。

  由于以上內存都是線程獨享,極端情況下的內存總體使用量將是所有連接線程的總倍數。所以各位朋友在設置過程中一定要謹慎,切不可為了提升性能就盲目的增大各參數值,避免因為內存不夠而產生 Out Of Memory 異常或者是嚴重的 Swap 交換反而降低整體性能

感謝你能夠認真閱讀完這篇文章,希望小編分享的“在 MySQL中線程獨享內存有什么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会昌县| 北宁市| 米脂县| 克拉玛依市| 江门市| 京山县| 淮南市| 辽宁省| 华蓥市| 庆安县| 嘉黎县| 安溪县| 永靖县| 谷城县| 元谋县| 时尚| 峡江县| 水富县| 泽普县| 乳山市| 宣恩县| 雷山县| 吉木萨尔县| 青冈县| 阿鲁科尔沁旗| 扶风县| 宣威市| 平远县| 巴东县| 洪江市| 濮阳县| 济宁市| 张家港市| 太仓市| 金湖县| 定边县| 莱阳市| 墨江| 松滋市| 金平| 龙南县|