欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

有哪些數(shù)據(jù)庫(kù)內(nèi)存知識(shí)點(diǎn)

本篇內(nèi)容介紹了“有哪些數(shù)據(jù)庫(kù)內(nèi)存知識(shí)點(diǎn)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)從2013年開(kāi)始,先為峽江等服務(wù)建站,峽江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為峽江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

一、如何看懂內(nèi)存指標(biāo)

遇到內(nèi)存問(wèn)題,可以先通過(guò)free、vmstat、top等命令,進(jìn)行檢查。free命令,可以獲取系統(tǒng)內(nèi)存的總體使用情況;vmstat命令,可以實(shí)時(shí)觀察內(nèi)存的變化情況;top命令,可以進(jìn)行排序,獲取內(nèi)存占用大的進(jìn)程。這里簡(jiǎn)單介紹一下free命令輸出(以CentOS 7為例):

total        used        free      shared  buff/cache   available Mem:        8008704     5234876      157920         640     2615908     2467292 Swap:          2047           0        2047

第一行是內(nèi)存數(shù)據(jù)

1. total:內(nèi)存總大小,對(duì)應(yīng)于/proc/meminfo的MemTotal

2. used:已使用的內(nèi)存大小,對(duì)應(yīng)于/proc/meminfo的(MemTotal - MemFree - Buffers - Cached - Slab)

3. free:未使用的內(nèi)存大小,對(duì)應(yīng)于/proc/meminfo的MemFree

4. buff/cache:已使用的緩存大小,對(duì)應(yīng)于/proc/meminfo的Buffers+Cached

5. available:可供使用的內(nèi)存大小,這是一個(gè)預(yù)估值,對(duì)應(yīng)于/proc/meminfo的MemAvailable

第二行是交換分區(qū)數(shù)據(jù)

1. total:交換分區(qū)總大小,對(duì)應(yīng)于/proc/meminfo的SwapTotal

2. used:已使用的交換分區(qū),對(duì)應(yīng)于/proc/meminfo的(SwapTotal - SwapFree)

3. free:未使用的的內(nèi)存大小,對(duì)應(yīng)于/proc/meminfo的SwapFree

這里值得注意的是,Linux操作系統(tǒng)會(huì)最大限度利用內(nèi)存,空閑內(nèi)存free少,不代表系統(tǒng)內(nèi)存不夠用了。個(gè)人建議,一方面需要觀察內(nèi)存增長(zhǎng)的整體趨勢(shì)是否逐漸趨于平穩(wěn)、以及used和buff/cache的變化情況;另一方面需要觀察是否頻繁使用到交換分區(qū)swap,當(dāng)然了,這里要避免NUMA和swapiness設(shè)置不正確帶來(lái)的干擾。

二、MySQL如何使用內(nèi)存

在MySQL中,內(nèi)存占用主要包括以下幾部分,全局共享的內(nèi)存、線程獨(dú)占的內(nèi)存、內(nèi)存分配器占用的內(nèi)存,具體如下:

全局共享

1. innodb_buffer_pool_size:InnoDB緩沖池的大小

2. innodb_additional_mem_pool_size:InnoDB存放數(shù)據(jù)字典和其他內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)存大小,5.7已被移除

3. innodb_log_buffer_size:InnoDB日志緩沖的大小

4. key_buffer_size:MyISAM緩存索引塊的內(nèi)存大小

5. query_cache_size:查詢緩沖的大小,8.0已被移除

線程獨(dú)占

1. thread_stack:每個(gè)線程分配的堆棧大小

2. sort_buffer_size:排序緩沖的大小

3. join_buffer_size:連接緩沖的大小

4. read_buffer_size:MyISAM順序讀緩沖的大小

5. read_rnd_buffer_size:MyISAM隨機(jī)讀緩沖的大小、MRR緩沖的大小

6. tmp_table_size/max_heap_table_size:內(nèi)存臨時(shí)表的大小

7. binlog_cache_size:二進(jìn)制日志緩沖的大小

內(nèi)存分配器

在MySQL中,buffer pool的內(nèi)存,是通過(guò)mmap()方式直接向操作系統(tǒng)申請(qǐng)分配;除此之外,大多數(shù)的內(nèi)存管理,都需要經(jīng)過(guò)內(nèi)存分配器。為了實(shí)現(xiàn)更高效的內(nèi)存管理,避免頻繁的內(nèi)存分配與回收,內(nèi)存分配器會(huì)長(zhǎng)時(shí)間占用大量?jī)?nèi)存,以供內(nèi)部重復(fù)使用。關(guān)于內(nèi)存分配器的選擇,推薦使用jemalloc,可以有效解決內(nèi)存碎片與提升整體性能。

因此,MySQL占用內(nèi)存高的原因可能包括:innodb_buffer_pool_size設(shè)置過(guò)大、連接數(shù)/并發(fā)數(shù)過(guò)高、大量排序操作、內(nèi)存分配器占用、以及MySQL Bug等等。一般來(lái)說(shuō),在MySQL整個(gè)運(yùn)行周期內(nèi),剛啟動(dòng)時(shí)內(nèi)存上漲會(huì)比較快,運(yùn)行一段時(shí)間后會(huì)逐漸趨于平穩(wěn),這種情況是不需要過(guò)多關(guān)注的;如果在穩(wěn)定運(yùn)行后,出現(xiàn)內(nèi)存突增、內(nèi)存持續(xù)增長(zhǎng)不釋放的情況,那就需要我們進(jìn)一步分析是什么原因造成的。

三、到底是誰(shuí)占用了內(nèi)存

在絕大多數(shù)情況下,我們是不需要花費(fèi)過(guò)多精力,去關(guān)注MySQL內(nèi)存使用情況的; 但是,也不能排除確實(shí)存在內(nèi)存占用異常的情況,這個(gè)時(shí)候我們應(yīng)該如何去進(jìn)行深入排查呢? 其實(shí),MySQL官方就提供了強(qiáng)大的實(shí)時(shí)監(jiān)控工具——performance_schema庫(kù)下的監(jiān)控內(nèi)存表,通過(guò)這個(gè)工具,我們可以很清晰地觀察到MySQL內(nèi)存到底是被誰(shuí)占用了、分別占用了多少。

開(kāi)啟內(nèi)存監(jiān)控

實(shí)例啟動(dòng)時(shí)開(kāi)啟

我們可以選擇,在實(shí)例啟動(dòng)時(shí),開(kāi)啟內(nèi)存監(jiān)控采集器,具體方法如下:

vi my.cnf performance-schema-instrument='memory/%=ON'

禁用方法如下:

vi my.cnf performance-schema-instrument='memory/%=OFF'

實(shí)例運(yùn)行時(shí)開(kāi)啟

我們也可以選擇 ,在實(shí) 例運(yùn) 行時(shí),動(dòng)態(tài)開(kāi)啟內(nèi)存監(jiān)控采集器,具體方法如下:

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'memory/%';

禁用方法如下:

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'NO' WHERE NAME LIKE 'memory/%';

因?yàn)椴杉鞯膶?shí)現(xiàn)原理,是在內(nèi)存進(jìn)行分配/回收時(shí),更新相對(duì)應(yīng)內(nèi)存監(jiān)控表的數(shù)據(jù);換句話說(shuō),就是采集器只能監(jiān)控到開(kāi)啟之后的內(nèi)存使用情況;而MySQL很大一部分內(nèi)存都是在實(shí)例啟動(dòng)時(shí)就預(yù)先分配的,因此要想準(zhǔn)確監(jiān)控實(shí)例的內(nèi)存使用率,需要在實(shí)例啟動(dòng)時(shí)就開(kāi)啟內(nèi)存采集器。

內(nèi)存監(jiān)控表

在performance_schema庫(kù)下,提供多個(gè)維度的內(nèi)存監(jiān)控表,具體如下:

memory_summary_by_account_by_event_name: 賬號(hào)緯度的內(nèi)存監(jiān)控表

memory_summary_by_host_by_event_name: 主機(jī)緯度的內(nèi)存監(jiān)控表

memory_summary_by_thread_by_event_name: 線程維度的內(nèi)存監(jiān)控表

memory_summary_by_user_by_event_name: 用戶緯度的內(nèi)存監(jiān)控表

memory_summary_global_by_event_name: 全局緯度的內(nèi)存監(jiān)控表

內(nèi)存監(jiān)控表均包括以下關(guān)鍵字段:

COUNT_ALLOC: 內(nèi)存分配次數(shù)

C OUNT_FREE: 內(nèi)存回收次數(shù)

S UM_NUMBER_OF_BYTES_ALLOC: 內(nèi)存分配大小

SUM_NUMBER_OF_BYTES_FREE: 內(nèi)存回收大小

CURRENT_COUNT_USED: 當(dāng)前分配的內(nèi)存,通過(guò)COUNT_ALLOC-COUNT_FREE計(jì)算得到

CURRENT_NUMBER_OF_BYTES_USED: 當(dāng)前分配的內(nèi)存大小,通過(guò)SUM_NUMBER_OF_BYTES_ALLOC-SUM_NUMBER_OF_BYTES_FREE計(jì)算得到

LOW_COUNT_USED: CURRENT_COUNT_USED的最小值

HIGH_COUNT_USED: CURRENT_COUNT_USED的最大值

LOW_NUMBER_OF_BYTES_USED: CURRENT_NUMBER_OF_BYTES_USED的最小值

HIGH_NUMBER_OF_BYTES_USED: CURRENT_NUMBER_OF_BYTES_USED的最大值

接下來(lái),讓我們看一個(gè)正常運(yùn)行實(shí)例的內(nèi)存使用情況,具體如下:

mysql> select USER,HOST,EVENT_NAME,COUNT_ALLOC,COUNT_FREE,CURRENT_COUNT_USED,SUM_NUMBER_OF_BYTES_ALLOC,SUM_NUMBER_OF_BYTES_FREE,CURRENT_NUMBER_OF_BYTES_USED from performance_schema.memory_summary_by_account_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc limit 10; +------+-----------+----------------------------+-------------+------------+--------------------+---------------------------+--------------------------+------------------------------+ | USER | HOST      | EVENT_NAME                 | COUNT_ALLOC | COUNT_FREE | CURRENT_COUNT_USED | SUM_NUMBER_OF_BYTES_ALLOC | SUM_NUMBER_OF_BYTES_FREE | CURRENT_NUMBER_OF_BYTES_USED | +------+-----------+----------------------------+-------------+------------+--------------------+---------------------------+--------------------------+------------------------------+ | NULL | NULL      | memory/innodb/buf_buf_pool |          32 |          0 |                 32 |                4500488192 |                        0 |                   4500488192 | | NULL | NULL      | memory/innodb/os0event     |     1573559 |          0 |            1573559 |                 214004024 |                        0 |                    214004024 | | NULL | NULL      | memory/innodb/hash0hash    |          82 |          6 |                 76 |                 397976480 |                227067024 |                    170909456 | | NULL | NULL      | memory/innodb/log0log      |          10 |          0 |                 10 |                  33565840 |                        0 |                     33565840 | | root | localhost | memory/innodb/std          |     3650638 |    3043111 |             607527 |                 160778066 |                141334898 |                     19443168 | | NULL | NULL      | memory/mysys/KEY_CACHE     |           3 |          0 |                  3 |                   8390768 |                        0 |                      8390768 | | NULL | NULL      | memory/innodb/ut0pool      |           2 |          0 |                  2 |                   4194480 |                        0 |                      4194480 | | NULL | NULL      | memory/innodb/sync0arr     |           3 |          0 |                  3 |                   2506184 |                        0 |                      2506184 | | NULL | NULL      | memory/innodb/lock0lock    |          33 |          0 |                 33 |                   2245040 |                        0 |                      2245040 | | root | localhost | memory/innodb/mem0mem      |     9897784 |    9896793 |                991 |                8845389160 |               8843147749 |                      2241411 | +------+-----------+----------------------------+-------------+------------+--------------------+---------------------------+--------------------------+------------------------------+ 10 rows in set (0.01 sec)

再看一個(gè)Bug #86821的場(chǎng)景,buffer pool占用最大內(nèi)存正常,但是存儲(chǔ)過(guò)程占用3GB就比較異常了,存在內(nèi)存泄漏的風(fēng)險(xiǎn);由此可知,通過(guò)內(nèi)存監(jiān)控表,我們可以快速定位內(nèi)存異常占用問(wèn)題。

mysql> select event_name, current_alloc, high_alloc from memory_global_by_current_bytes where current_count > 0; +--------------------------------------------------------------------------------+---------------+-------------+ | event_name                                                                     | current_alloc | high_alloc  | +--------------------------------------------------------------------------------+---------------+-------------+ | memory/innodb/buf_buf_pool                                                     | 7.29 GiB      | 7.29 GiB    | | memory/sql/sp_head::main_mem_root                                              | 3.21 GiB      | 3.62 GiB    | | memory/innodb/hash0hash                                                        | 210.16 MiB    | 323.63 MiB  | | memory/sql/TABLE                                                               | 183.82 MiB    | 190.28 MiB  | | memory/sql/Query_cache                                                         | 128.02 MiB    | 128.02 MiB  | | memory/mysys/KEY_CACHE                                                         | 64.00 MiB     | 64.00 MiB   | | memory/innodb/log0log                                                          | 32.08 MiB     | 32.08 MiB   | | memory/innodb/parallel_doublewrite                                             | 30.27 MiB     | 30.27 MiB   | | memory/performance_schema/table_handles                                        | 27.19 MiB     | 27.19 MiB   | | memory/innodb/mem0mem                                                          | 19.14 MiB     | 20.79 MiB   | | memory/performance_schema/events_statements_history_long                       | 13.66 MiB     | 13.66 MiB   | | memory/performance_schema/events_statements_summary_by_digest.tokens           | 9.77 MiB      | 9.77 MiB    |

另外,如果我們?cè)趦?nèi)存監(jiān)控表,看見(jiàn)一些比較陌生的event,可以翻閱官方文檔或源碼,繼續(xù)進(jìn)一步解讀,例如

memory/innodb/os0event

/** @file include/os0event.h   The interface to the operating system condition variables     Created 2012-09-23 Sunny Bains (split from os0sync.h)   *******************************************************/

memory/innodb/hash0hash

/** @file include/hash0hash.h   The simple hash table utility     Created 5/20/1997 Heikki Tuuri   *******************************************************/

四、總結(jié)

總的來(lái)說(shuō),只要我們的操作系統(tǒng)/數(shù)據(jù)庫(kù)有一個(gè)相對(duì)合理的配置(NUMA、swapiness、jemalloc 、innodb_buffer_pool_size等等),大多數(shù)情況是不需要關(guān)注內(nèi)存問(wèn)題的; 如果非常不幸運(yùn)地碰到內(nèi)存占用異常問(wèn)題,可以通過(guò)官方提供的實(shí)時(shí)監(jiān)控工具——內(nèi)存監(jiān)控表,快速進(jìn)行定位; 不過(guò)需要注意的是,開(kāi)啟內(nèi)存采集器也會(huì)帶來(lái)一些問(wèn)題,比如額外的內(nèi)存占用和性能損耗,一般建議是在系統(tǒng)出現(xiàn)內(nèi)存問(wèn)題之后,再重啟實(shí)例啟用,并等待復(fù)現(xiàn)。

“有哪些數(shù)據(jù)庫(kù)內(nèi)存知識(shí)點(diǎn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞名稱:有哪些數(shù)據(jù)庫(kù)內(nèi)存知識(shí)點(diǎn)
轉(zhuǎn)載來(lái)源:http://aaarwkj.com/article46/pchieg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、商城網(wǎng)站、云服務(wù)器網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航ChatGPT

廣告

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

手機(jī)網(wǎng)站建設(shè)
亚洲第一女人天堂av| avav男人天堂亚洲天堂| 中文字幕有码在线朋友| 国产三级三级在线观看| 福利视频免费观看欧美| 黑人巨大亚洲一区二区久| 国产成人免费自拍一区| 日韩精品熟女一区二区三区| 日本视频天堂在线不卡| 丰满人妻被猛烈进入中| 人妻熟妇av在线一区二区三区| 中文字幕日本人妻影视| 亚洲av粉色一区二区三区| 日韩50岁老女人骚色| 最新国产不卡一区二区| 色哟哟网站一区二区精品久久| 欧美精品在线高清观看| 丰满人妻毛片一区二区三区| 日韩精品福利片午夜免费| 91免费版在线观看网址| 日本在线精品在线观看| 国产经典三级在线观看| 三级视频一区二区三区| 欧美一区日韩二区国产三区| 亚洲成人av综合在线| 国产国产人免费人成免费人妖| 国产粉嫩一区二区三区在线观看| 要爽死国产一区在线播放| 香蕉视频欧美日韩国产| 亚洲欧美日韩成人在线| 免费在线观看一区二区三区视频| 久久人妻蜜桃一区二区三区| 亚洲黄色手机在线网站| 久久精品国产免费夜夜嗨| 亚洲精品日韩在线欧美| 粉嫩av一区二区三区四区| 天天干天天干夜夜操| 久草视频免费福利观看| 久久精品亚洲夜色国产av| 色综合色综合蘑菇在线| 欧美精品一区二区三区色|