mysql記憶體使用統計:
mysql分配緩衝區和快取以提高資料庫操作的效能。預設配置是大約512mb ram的虛擬機器上啟動。可以通過增加某些快取和緩衝區相關系統變數的值來提高mysql效能。還可以修改預設配置以在記憶體有限的系統上執行mysql。
以下列舉了mysql的記憶體使用方法:
innodb緩衝池是保持快取的innodb表,索引,及其它輔助緩衝中的資料。為了提高大容量讀取操作的效率,緩衝池被分成多個例項可以容納更多的行。為了提高快取管理的效率,緩衝池使用lru演算法的變體 。
innodb使用malloc()函式在伺服器啟動時為整個緩衝池分配記憶體,由innodb_buffer_pool_size變數控制;
在大容量記憶體的系統上,可以通過將緩衝池劃分為多個緩衝池例項來提高併發性 。innodb_buffer_pool_instances 系統變數定義緩衝池例項的數量;
過小的緩衝池可能會導致過多的資料交換;
過大的緩衝池可能會因記憶體競爭而導致交換;
所有執行緒共享myisam 緩衝區。由 key_buffer_size系統變數決定大小;
對於開啟的每個myisam表,索引檔案開啟一次;
為訪問該錶的每個併發執行的執行緒開啟一次資料檔案;
每個併發執行緒,分配表結構,每列的列結構和大小的緩衝區,相當於表資料大小;
每個連線3*n的緩衝區(n為行長度,row_length),blob列需要額外5到8個位元組加上blob資料的長度;
myisam_use_mmap預設為關閉,可以設定為1,使能對所有記憶體對映myisam表;
每個執行緒分配一次tmp_table_size,增長程度由 max_heap_table_size變數決定,超過後產生硬碟臨時表,引擎由internal_tmp_disk_storage_engine決定;
顯式建立的memory引擎表,由 max_heap_table_size變數控制增長程度;
performance_schema模式監控mysql記憶體使用情況,以遞增方式動態分配記憶體。分配記憶體後,在重新啟動伺服器之前不會釋放記憶體;
每個併發執行緒,都會分配一些空間,可能會分配多次:
thread_stack
連線緩衝區 net_buffer_length
結果緩衝區 net_buffer_length
連線緩衝區和結果緩衝區的大小都等於net_buffer_length位元組大小,max_allowed_packet根據需要動態放大到 位元組
max_digest_length
read_buffer_size
read_rnd_buffer_size
sort_buffer_size
join_buffer_size
當不再需要執行緒時,分配給它的記憶體被釋放並返回給系統,除非執行緒返回到執行緒快取中。在這種情況下,記憶體仍然是分配的。
所有執行緒共享相同的基本記憶體。
對於每個具有blob 列的表,動態放大緩衝區以讀取更大的blob值。如果掃瞄表,緩衝區會增大到 blob最大值。
所有連線都是一次執行,大多數連線都可以在不使用臨時表的情況下完成。大多數臨時表都是基於記憶體的雜湊表。包含blob列的臨時表儲存在磁碟上。
mysql需要表快取的記憶體和描述符。所有正在使用的表的處理程式結構都儲存在表快取中,並作為「 先進先出 」(fifo)進行管理。
table_open_cache變數定義快取大小。
table_definition_cache變數定義表的定義。如果使用大表,則可以建立大型表定義來加速開啟速度。
flush tables語句關閉所有未同時使用的表,並將所有正在使用的表標記為在當前執行執行緒完成時關閉,這可以有效釋放記憶體占用。
mysql伺服器快取了grant, create user, create server,和 install plugin語句,需要使用flush privileges釋放。
mysql的記憶體使用可以在performance_schema庫下找到以memory開頭的表:
memory_summary_by_account_by_event_name:
以賬戶形式顯示記憶體使用。
memory_summary_by_host_by_event_name
以host形式顯示記憶體使用。
memory_summary_by_thread_by_event_name
以執行緒形式顯示記憶體使用
memory_summary_by_user_by_event_name
以使用者形式顯示記憶體使用
memory_summary_global_by_event_name
顯示全域性記憶體使用
或者在sys庫下,查詢memory相關表,這些表更清晰的提供了記憶體使用。
mysql 記憶體使用 mysql記憶體使用分析 一
author skate time 2012 02 16 mysql記憶體使用分析 從記憶體的使用方式來說,mysql的記憶體使用主要分為以下兩類 1.執行緒獨享記憶體 2.全域性共享記憶體 1.執行緒獨享記憶體 在mysql 中,執行緒獨享記憶體主要用於各客戶端連線線程儲存各種操作的獨享資料,如執...
Mysql 記憶體使用
在這裡我們將介紹的是mysql記憶體使用上的執行緒獨享,執行緒獨享記憶體主要用於各客戶端連線線程儲存各種操作的獨享資料,如執行緒棧資訊,分組排序操作,資料讀寫緩衝,結果集暫存等等,而且大多數可以通過相關引數來控制記憶體的使用量。對於任何乙個資料庫管理系統來說,記憶體的分配使用絕對可以算的上是其核心之...
mysql 記憶體計算 MYSQL使用記憶體計算
mysql記憶體占用計算 global buffer all thread buffer global buffer innodb buffer pool size 快取表資料和索引資料,加速查詢,並且使查詢結果集儲存在內以供重用,一般設定到主機記憶體的70 以下 innodb additional...