亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠(chéng)為您提供優(yōu)質(zhì)的服務(wù)! 誠(chéng)征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購(gòu)買流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁(yè) >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

MySQL應(yīng)用技巧之內(nèi)存使用線程獨(dú)享

添加時(shí)間:2014-3-15 16:55:57  添加: 思海網(wǎng)絡(luò) 

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

  對(duì)于任何一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)來說,內(nèi)存的分配使用絕對(duì)可以算的上是其核心之一了,所以很多希望更為深入了解某數(shù)據(jù)庫(kù)管理系統(tǒng)的人,都會(huì)希望一窺究竟,我也不例外。

  從內(nèi)存的使用方式MySQL 數(shù)據(jù)庫(kù)的內(nèi)存使用主要分為以下兩類

  線程獨(dú)享內(nèi)存

  全局共享內(nèi)存

  今天這篇文章暫時(shí)先分析 MySQL 中主要的 “線程獨(dú)享內(nèi)存” 的。

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

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

  排序使用內(nèi)存(sort_buffer_size):MySQL 用此內(nèi)存區(qū)域進(jìn)行排序操作(filesort),完成客戶端的排序請(qǐng)求。當(dāng)我們?cè)O(shè)置的排序區(qū)緩存大小無法滿足排序?qū)嶋H所需內(nèi)存的時(shí)候,MySQL 會(huì)將數(shù)據(jù)寫入磁盤文件來完成排序。由于磁盤和內(nèi)存的讀寫性能完全不在一個(gè)數(shù)量級(jí),所以sort_buffer_size參數(shù)對(duì)排序操作的性能影響絕對(duì)不可 小視。排序操作的實(shí)現(xiàn)原理請(qǐng)參考:MySQL Order By 的實(shí)現(xiàn)分析。

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

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

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

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

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

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

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

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

關(guān)鍵字:MySQL、線程、數(shù)據(jù)庫(kù)

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開網(wǎng)站