mysql怎么寫內(nèi)存 mysql內(nèi)存占用高怎么釋放

MySQL內(nèi)存使用以及優(yōu)化中需要的幾點(diǎn)注意

1、從內(nèi)存中讀取數(shù)據(jù)是微秒級(jí)別的。而從磁盤讀則是毫秒級(jí)別的。二者相差一個(gè)數(shù)量級(jí)。所以想優(yōu)化數(shù)據(jù)庫,第一個(gè)要做到的就是優(yōu)化io。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作與策劃設(shè)計(jì),龍州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:龍州等地區(qū)。龍州做網(wǎng)站價(jià)格咨詢:028-86922220

2、key_buffer_size[global]設(shè)置的內(nèi)存區(qū)域大小緩存了myisam表的索引。由于myisam只緩存索引在內(nèi)存中,并不緩存數(shù)據(jù)在內(nèi)存,所以如果內(nèi)存允許,要讓這個(gè)參數(shù)足夠能容納所有myisam的所有索引來提高性能。另外,在myisam表上,盡量讓所有的查詢條件都限制在索引上,以便能讓緩存替我們提高查找效率。

3、bulk_insert_buffer_size[thread]僅僅用在myisam中,用于在插入數(shù)據(jù)的時(shí)候臨時(shí)緩存數(shù)據(jù)。當(dāng)我們使用如下的寫入語句的時(shí)候,會(huì)使用這個(gè)內(nèi)存區(qū)域幫助批量寫入數(shù)據(jù)文件:

insert ... select ...

insert into ... values ...

如何在mysql中創(chuàng)建內(nèi)存表

內(nèi)存表有大小限制,內(nèi)存文件超過 my.ini 中設(shè)置以后,會(huì)自動(dòng)轉(zhuǎn)換部分到硬盤。

內(nèi)存表所占內(nèi)存以固定的大小分配空間,即使一個(gè)表中只有一條記錄,也可能占幾M空間。

內(nèi)存表是有大小限制的,在 my.ini 中可以設(shè)置,當(dāng)內(nèi)存大小達(dá)到限制時(shí),可能會(huì)報(bào)錯(cuò):#1114: The table ‘XXX’ is full 。

mysql 如何分配內(nèi)存

我們?nèi)匀皇褂脙蓚€(gè)會(huì)話,一個(gè)會(huì)話 run,用于運(yùn)行主 SQL;另一個(gè)會(huì)話 ps,用于進(jìn)行 performance_schema 的觀察:

主會(huì)話線程號(hào)為 29,

將 performance_schema 中的統(tǒng)計(jì)量重置,

臨時(shí)表的表大小限制取決于參數(shù)? tmp_table_size 和 max_heap_table_size 中較小者,我們實(shí)驗(yàn)中以設(shè)置 max_heap_table_size 為例。

我們將會(huì)話級(jí)別的臨時(shí)表大小設(shè)置為 2M(小于上次實(shí)驗(yàn)中臨時(shí)表使用的空間),執(zhí)行使用臨時(shí)表的 SQL:

查看內(nèi)存的分配記錄:

會(huì)發(fā)現(xiàn)內(nèi)存分配略大于 2M,我們猜測臨時(shí)表會(huì)比配置略多一點(diǎn)消耗,可以忽略。

查看語句的特征值:

可以看到語句使用了一次需要落磁盤的臨時(shí)表。

那么這張臨時(shí)表用了多少的磁盤呢?

我們開啟 performance_schema 中 waits 相關(guān)的統(tǒng)計(jì)項(xiàng):

重做實(shí)驗(yàn),略過。

再查看 performance_schema 的統(tǒng)計(jì)值:

可以看到幾個(gè)現(xiàn)象:

1. 臨時(shí)表空間被寫入了 7.92MiB 的數(shù)據(jù)。

2. 這些數(shù)據(jù)是語句寫入后,慢慢逐漸寫入的。

來看看這些寫入操作的特征,該方法我們?cè)?實(shí)驗(yàn) 03?使用過:

可以看到寫入的線程是 page_clean_thread,是一個(gè)刷臟操作,這樣就能理解數(shù)據(jù)為什么是慢慢寫入的。

也可以看到每個(gè) IO 操作的大小是 16K,也就是刷數(shù)據(jù)頁的操作。

結(jié)論:

我們可以看到,

1. MySQL 會(huì)基本遵守 max_heap_table_size 的設(shè)定,在內(nèi)存不夠用時(shí),直接將表轉(zhuǎn)到磁盤上存儲(chǔ)。

2. 由于引擎不同(內(nèi)存中表引擎為 heap,磁盤中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實(shí)驗(yàn)寫磁盤的數(shù)據(jù)量和?實(shí)驗(yàn) 05?中使用內(nèi)存的數(shù)據(jù)量不同。

3. 如果臨時(shí)表要使用磁盤,表引擎配置為 InnoDB,那么即使臨時(shí)表在一個(gè)時(shí)間很短的 SQL 中使用,且使用后即釋放,釋放后也會(huì)刷臟頁到磁盤中,消耗部分 IO。

當(dāng)前名稱:mysql怎么寫內(nèi)存 mysql內(nèi)存占用高怎么釋放
文章出自:http://muchs.cn/article48/doegihp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、網(wǎng)站排名電子商務(wù)、網(wǎng)站內(nèi)鏈云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司