欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL內(nèi)存使用之線程獨享介紹

 更新時間:2014年12月01日 10:38:13   投稿:junjie  
這篇文章主要介紹了MySQL內(nèi)存使用之線程獨享介紹,線程獨享內(nèi)存主要用于各客戶端連接線程存儲各種操作的獨享數(shù)據(jù),如線程棧信息,分組排序操作,數(shù)據(jù)讀寫緩沖,結(jié)果集暫存等等,而且大多數(shù)可以通過相關(guān)參數(shù)來控制內(nèi)存的使用量,需要的朋友可以參考下

前言

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

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

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

排序使用內(nèi)存(sort_buffer_size)

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

Join操作使用內(nèi)存(join_buffer_size)

應(yīng)用程序經(jīng)常會出現(xiàn)一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時候(all/index join),為了減少參與Join的“被驅(qū)動表”的讀取次數(shù)以提高性能,需要使用到 Join Buffer 來協(xié)助完成 Join操作。當(dāng) Join Buffer 太小,MySQL 不會將該 Buffer 存入磁盤文件,而是先將Join Buffer中的結(jié)果集與需要 Join 的表進行 Join 操作,然后清空 Join Buffer 中的數(shù)據(jù),繼續(xù)將剩余的結(jié)果集寫入此 Buffer 中,如此往復(fù)。這勢必會造成被驅(qū)動表需要被多次讀取,成倍增加 IO 訪問,降低效率。

順序讀取數(shù)據(jù)緩沖區(qū)使用內(nèi)存(read_buffer_size)

這部分內(nèi)存主要用于當(dāng)需要順序讀取數(shù)據(jù)的時候,如無法使用索引的情況下的全表掃描,全索引掃描等。在這種時候,MySQL 按照數(shù)據(jù)的存儲順序依次讀取數(shù)據(jù)塊,每次讀取的數(shù)據(jù)快首先會暫存在read_buffer_size中,當(dāng) buffer 空間被寫滿或者全部數(shù)據(jù)讀取結(jié)束后,再將buffer中的數(shù)據(jù)返回給上層調(diào)用者,以提高效率。

隨機讀取數(shù)據(jù)緩沖區(qū)使用內(nèi)存(read_rnd_buffer_size)

和順序讀取相對應(yīng),當(dāng) MySQL 進行非順序讀?。S機讀取)數(shù)據(jù)塊的時候,會利用這個緩沖區(qū)暫存讀取的數(shù)據(jù)。如根據(jù)索引信息讀取表數(shù)據(jù),根據(jù)排序后的結(jié)果集與表進行Join等等??偟膩碚f,就是當(dāng)數(shù)據(jù)塊的讀取需要滿足一定的順序的情況下,MySQL 就需要產(chǎn)生隨機讀取,進而使用到 read_rnd_buffer_size 參數(shù)所設(shè)置的內(nèi)存緩沖區(qū)。

連接信息及返回客戶端前結(jié)果集暫存使用內(nèi)存(net_buffer_size)

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

批量插入暫存使用內(nèi)存(bulk_insert_buffer_size)

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

臨時表使用內(nèi)存(tmp_table_size)

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

總結(jié)

上面所列舉的 MySQL 線程獨享內(nèi)存僅僅只是所有線程獨享內(nèi)存中的部分,并不是全部,選擇的原則是可能對 MySQL 的性能產(chǎn)生較大的影響,且可以通過系統(tǒng)參數(shù)進行調(diào)節(jié)。

由于以上內(nèi)存都是線程獨享,極端情況下的內(nèi)存總體使用量將是所有連接線程的總倍數(shù)。所以各位朋友在設(shè)置過程中一定要謹慎,切不可為了提升性能就盲目的增大各參數(shù)值,避免因為內(nèi)存不夠而產(chǎn)生 Out Of Memory 異?;蛘呤菄乐氐?Swap 交換反而降低整體性能。

相關(guān)文章

  • mysql下的max_allowed_packet參數(shù)設(shè)置詳解

    mysql下的max_allowed_packet參數(shù)設(shè)置詳解

    本文主要介紹了mysql下的max_allowed_packet參數(shù)設(shè)置詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql 查詢數(shù)據(jù)庫中的存儲過程與函數(shù)的語句

    mysql 查詢數(shù)據(jù)庫中的存儲過程與函數(shù)的語句

    mysql 查詢數(shù)據(jù)庫中的存儲過程與函數(shù)的語句,需要的朋友可以參考下。
    2011-05-05
  • mysql 循環(huán)insert方式

    mysql 循環(huán)insert方式

    這篇文章主要介紹了mysql 循環(huán)insert方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL數(shù)據(jù)庫鎖機制原理解析

    MySQL數(shù)據(jù)庫鎖機制原理解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫鎖機制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • MySql安裝步驟圖文教程及中文亂碼的解決方案

    MySql安裝步驟圖文教程及中文亂碼的解決方案

    這篇文章主要介紹了MySql安裝步驟圖文教程及中文亂碼的解決方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • mysql 獲取規(guī)定時間段內(nèi)的統(tǒng)計數(shù)據(jù)

    mysql 獲取規(guī)定時間段內(nèi)的統(tǒng)計數(shù)據(jù)

    這篇文章主要介紹了mysql 獲取規(guī)定時間段內(nèi)的統(tǒng)計數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • MySQL實戰(zhàn)教程之Join語句執(zhí)行流程

    MySQL實戰(zhàn)教程之Join語句執(zhí)行流程

    這篇文章主要介紹了MySQL Join語句執(zhí)行流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Explain命令在優(yōu)化查詢中的實際應(yīng)用

    Explain命令在優(yōu)化查詢中的實際應(yīng)用

    在MySQL中,EXPLAIN命令是一種非常重要的查詢優(yōu)化工具,它可以幫助我們分析SQL查詢語句的執(zhí)行計劃,以及如何優(yōu)化它們。本文介紹了Explain命令在優(yōu)化查詢中的實際應(yīng)用,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • 如何避免mysql啟動時錯誤及sock文件作用分析

    如何避免mysql啟動時錯誤及sock文件作用分析

    這篇文章主要為大家介紹了在mysql啟動過程中遇到錯誤時sock文件作用的分析詳解,以及如何避免發(fā)生錯誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • MySQL全局共享內(nèi)存介紹

    MySQL全局共享內(nèi)存介紹

    這篇文章主要介紹了MySQL全局共享內(nèi)存介紹,全局共享內(nèi)存則主要是 MySQL Instance(mysqld進程)以及底層存儲引擎用來暫存各種全局運算及可共享的暫存信息,如存儲查詢緩存的 Query Cache,緩存連接線程的 Thread Cache等等,需要的朋友可以參考下
    2014-12-12

最新評論