成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL內(nèi)存使用之線(xiàn)程獨(dú)享

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

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

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

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

全局共享內(nèi)存

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

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

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

排序使用內(nèi)存(sort_buffer_size):MySQL 用此內(nèi)存區(qū)域進(jìn)行排序操作(filesort),完成客戶(hù)端的排序請(qǐng)求。當(dāng)我們?cè)O(shè)置的排序區(qū)緩存大小無(wú)法滿(mǎn)足排序?qū)嶋H所需內(nèi)存的時(shí)候,MySQL 會(huì)將數(shù)據(jù)寫(xiě)入磁盤(pán)文件來(lái)完成排序。由于磁盤(pán)和內(nèi)存的讀寫(xiě)性能完全不在一個(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 來(lái)協(xié)助完成 Join操作(具體 Join 實(shí)現(xiàn)算法請(qǐng)參考:MySQL 中的 Join 基本實(shí)現(xiàn)原理)。當(dāng) Join Buffer 太小,MySQL 不會(huì)將該 Buffer 存入磁盤(pán)文件,而是先將Join Buffer中的結(jié)果集與需要 Join 的表進(jìn)行 Join 操作,然后清空 Join Buffer 中的數(shù)據(jù),繼續(xù)將剩余的結(jié)果集寫(xiě)入此 Buffer 中,如此往復(fù)。這勢(shì)必會(huì)造成被驅(qū)動(dòng)表需要被多次讀取,成倍增加 IO 訪(fǎng)問(wèn),降低效率。

順序讀取數(shù)據(jù)緩沖區(qū)使用內(nèi)存(read_buffer_size):這部分內(nèi)存主要用于當(dāng)需要順序讀取數(shù)據(jù)的時(shí)候,如無(wú)發(fā)使用索引的情況下的全表掃描,全索引掃描等。在這種時(shí)候,MySQL 按照數(shù)據(jù)的存儲(chǔ)順序依次讀取數(shù)據(jù)塊,每次讀取的數(shù)據(jù)快首先會(huì)暫存在read_buffer_size中,當(dāng) buffer 空間被寫(xiě)滿(mǎn)或者全部數(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等等。總的來(lái)說(shuō),就是當(dāng)數(shù)據(jù)塊的讀取需要滿(mǎn)足一定的順序的情況下,MySQL 就需要產(chǎn)生隨機(jī)讀取,進(jìn)而使用到 read_rnd_buffer_size 參數(shù)所設(shè)置的內(nèi)存緩沖區(qū)。

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

批量插入暫存使用內(nèi)存(bulk_insert_buffer_size):當(dāng)我們使用如 insert … values(…),(…),(…)… 的方式進(jìn)行批量插入的時(shí)候,MySQL 會(huì)先將提交的數(shù)據(jù)放如一個(gè)緩存空間中,當(dāng)該緩存空間被寫(xiě)滿(mǎn)或者提交完所有數(shù)據(jù)之后,MySQL 才會(huì)一次性將該緩存空間中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)并清空緩存。此外,當(dāng)我們進(jìn)行 LOAD DATA INFILE 操作來(lái)將文本文件中的數(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è)置的大小無(wú)法裝下整個(gè)臨時(shí)表的時(shí)候,MySQL 才會(huì)將該表創(chuàng)建成 MyISAM 存儲(chǔ)引擎的表存放在磁盤(pán)上。不過(guò),當(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 才開(kāi)始有,之前一直使用 max_heap_table_size。

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

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

【編輯推薦】

  1. MySQL查看表結(jié)構(gòu)的實(shí)際應(yīng)用命令列舉
  2. MySQL 游標(biāo)的具體使用方案
  3. MySQL show的實(shí)際操作用法
  4. 對(duì)MySQL DELETE語(yǔ)法的詳細(xì)解析
  5. MySQL導(dǎo)入導(dǎo)出.sql文件實(shí)踐演練
責(zé)任編輯:彭凡 來(lái)源: Sky.Jian 朝陽(yáng)的天空
相關(guān)推薦

2010-07-20 16:30:44

MySQL內(nèi)存

2009-08-17 14:08:33

C#進(jìn)度條使用

2009-07-15 09:59:36

MyEclipse使用

2009-07-15 09:59:36

MyEclipse使用

2009-07-09 09:38:43

JDK使用圖解

2009-07-15 09:42:56

MyEclipse使用

2011-08-19 14:27:29

iPhone開(kāi)發(fā)

2011-08-03 14:13:45

Xcode 4 Interface

2022-01-12 08:10:40

APISIXIngress Url Rewrite

2021-07-15 09:57:39

Wireshark數(shù)據(jù)包長(zhǎng)度

2014-07-10 10:43:49

zabbix主從監(jiān)控

2023-11-19 23:29:22

Heap DumpJava

2024-12-26 16:00:00

英特爾推理模型

2010-11-22 16:51:10

MySQL內(nèi)存表

2009-11-03 15:33:45

ADO.NET Tra

2009-07-16 17:40:48

iBATIS高級(jí)查詢(xún)iBATIS使用

2022-02-23 21:10:53

LonghornKubernetes快照

2012-02-23 10:28:12

MySQL

2024-05-29 09:13:37

2010-05-25 16:11:25

Git-SVN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 婷婷色成人 | 亚洲免费三区 | 国产乱码精品1区2区3区 | 99久久精品视频免费 | 日本aⅴ中文字幕 | 国产在线观看一区二区三区 | 色综合久久88色综合天天 | 成人av播放 | 91久久| 国产一区二区三区四 | 午夜影院在线观看版 | a免费视频| 精品亚洲视频在线 | 亚洲综合小视频 | 日本在线网址 | 看av电影 | 欧美8一10sex性hd | 亚洲欧洲精品成人久久奇米网 | 免费的av | 国产美女久久 | www.887色视频免费 | 狠狠热视频 | 91黄色免费看 | 97色在线视频 | 影音先锋成人资源 | 亚洲一区二区三区四区五区午夜 | 国产精品久久久久久久久久三级 | 午夜影院在线观看 | 伊人精品国产 | 国产午夜精品一区二区三区嫩草 | 亚洲人成人一区二区在线观看 | 亚洲精品一区二区三区在线观看 | 视频二区在线观看 | 国产黄色av网站 | 精品久久久久久红码专区 | 欧美精品一区二区三区在线 | 亚洲精品日本 | 日韩一区二区三区视频 | cao视频 | 日韩一区在线观看视频 | 国产精品永久免费视频 |