国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL內存使用之線程獨享介紹

2024-07-24 12:46:35
字體:
來源:轉載
供稿:網友

前言

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

線程棧信息使用內存(thread_stack)

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

排序使用內存(sort_buffer_size)

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

Join操作使用內存(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 訪問,降低效率。

順序讀取數據緩沖區使用內存(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 參數大小。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵溪市| 三江| 盈江县| 曲沃县| 大名县| 临沂市| 武邑县| 邵武市| 拉孜县| 德化县| 涡阳县| 威海市| 大庆市| 宝坻区| 道真| 荥经县| 阳高县| 政和县| 海宁市| 布拖县| 元谋县| 兰西县| 彭阳县| 汶川县| 永兴县| 区。| 边坝县| 彰化县| 眉山市| 忻城县| 彭州市| 海晏县| 大石桥市| 措美县| 瑞丽市| 红安县| 雷山县| 墨竹工卡县| 阳信县| 友谊县| 井冈山市|