mysql執行緒獨佔記憶體引數
thread_stack 執行緒棧資訊使用記憶體
default:192KB,用來存放每一個執行緒自身的標識資訊及執行緒棧分配多大的記憶體,如thread_id,執行緒執行時基本資訊
mysql排序演算法:
第一種,mysql4.1之前演算法,實現方式是先將需要排序的欄位columns和可以直接定位到相關行row資料的指標資訊取出,
然後在設定的排序區(sort_buffer_size)中排序,完成排序之後再次通過行指標資訊取出所需的columns,也就是需
要訪問2次資料;
第二種,自mysql4.1開始使用改進的演算法,一次性將所需的columns全部取出,在排序區排序後直接將資料返回給請求客戶端。
注意點:改進後的演算法只需要訪問一次資料,減少了大量的隨機IO,極大提高排序query語句效率,但,改進後演算法一次性取
出資料比第一種演算法要很多。故給出引數:max_length_for_sort_data
sort_buffer_size 排序使用記憶體 每個需要進行排序的執行緒分配該大小的一個快取區
default:2M,用此記憶體區域進行排序操作(filesort),完成客戶端排序請求。若我們設定的排序區快取大小無法滿足
排序實際所需記憶體,會將資料寫入磁碟檔案來完成排序。
使用這個引數時,引入引數max_length_for_sort_data 用於控制排序時選擇第一種演算法還是第二種,當取出所有大欄位總大小
大於此引數,選擇第一種排序演算法,否則第2種演算法
join_buffer_size 連線操作使用記憶體
default:8M,join基本實現原理:Nested Loop Join,通過驅動表的結果集作為迴圈基礎資料,然後一條
一條的通過該結果集中的資料作為過濾條件到下一個表中查詢資料,然後合併結果。如果還有第三個參
與Join,則再通過前2個表的Join結果集作為迴圈基礎資料,再一次通過迴圈查詢條件到第三個表中查詢
資料,如此往復。
在Join型別是ALL,index,rang 或 index_merge時觸發使用Join buffer
read_buffer_size 順序讀取資料緩衝區使用記憶體
用於當需要順序讀取資料的時候,如無法用索引情況下全表掃描,全索引掃描等,在此情況,mysql按照數
據的儲存順序依次讀取資料塊,每次讀取資料塊首先暫存在read_buffer_size中,當buffer空間被寫滿或
全部資料讀取結束後,再將buffer中的資料返回給上層呼叫者,以提高效率。
read_rnd_buffer_size 隨機讀取資料緩衝區使用記憶體
default:8M 當Mysql進行非順序讀取(隨機讀取)資料塊時,會利用這個緩衝區暫存讀取的資料。
net_buffer_size 連線資訊及返回客戶端前結果集暫存使用記憶體
default:16kB 用來存放客戶端連線執行緒的連線資訊和返回客戶端的結果集。當mysql開始產生可以返回的結果集,會在通過
網路返回給客戶端請求執行緒之前,會先暫存在該引數設定的緩衝區中,等滿足一定大小時候才開始向客戶端傳送,
以提高網路傳輸效率。該引數僅是該快取區初始化大小,mysql會根據實際需要自行申請更多記憶體以滿足需求,但
最大不會超過max_allowed_packet大小default:65M
bulk_insert_buffer_size 批量插入暫存使用記憶體
default:65M 當我們使用如insert ..values(),(),()..方式進行批量插入時,會先將提交的資料放入一個快取空間中,當
該快取空間被寫滿或提交完所有資料之後,才會一次性將該快取空間中資料寫入資料庫並清空快取。
tmp_table_size 臨時表使用記憶體
default:512M 我們進行一些特殊操作使用臨時表才能完成(如:order by ,group by),需超過使用臨時表空間大小,會
建立磁碟臨時表,增加IO操作;
比較理想配置:Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%
所列執行緒獨佔記憶體僅僅只是部分,極端情況下記憶體總體使用量將是所有連線執行緒的總倍數,設定時要注意,過大設定,
會導致記憶體不夠異常,反而降低整體效能.
MySQL 記憶體使用計算如下:
used_Mem = key_buffer_size
+ query_cache_size
+ innodb_buffer_pool_size
+ innodb_additional_mem_pool_size
+ innodb_log_buffer_size
+ max_connections *(
read_buffer_size
+ read_rnd_buffer_size
+ sort_buffer_size
+ join_buffer_size
+ binlog_cache_size
+ thread_stack
+ tmp_table_size)
SET @giga_bytes=1024*1024*1024;
SELECT (@@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-765058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL記憶體執行緒獨享使用的方法MySql記憶體執行緒
- mysql各個記憶體引數的介紹,分執行緒獨享和全域性共享兩大類MySql記憶體執行緒
- Swift 5將強制執行記憶體獨佔訪問Swift記憶體
- 執行緒相關記憶體引數sort_buffer/join_buffer等的記憶體分配時機執行緒記憶體
- Java 執行緒記憶體模型Java執行緒記憶體模型
- Java多執行緒記憶體模型Java執行緒記憶體模型
- mysql記憶體引數分類大全MySql記憶體
- MySQL記憶體引數及調整MySql記憶體
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- Swift 5強制獨佔記憶體Swift記憶體
- 【Mysql】為MySQL增加執行緒記憶體監控 (MySQL Thread Memory Usage Monitor)MySql執行緒記憶體thread
- Java多執行緒之記憶體模型Java執行緒記憶體模型
- 記憶體池、程式池、執行緒池記憶體執行緒
- mysql用於分配記憶體的引數MySql記憶體
- 深入理解Java的堆記憶體和執行緒記憶體Java記憶體執行緒
- 從 JVM 記憶體模型談執行緒安全JVM記憶體模型執行緒
- 多執行緒之Java記憶體模型(JMM)(一)執行緒Java記憶體模型
- 各個執行緒 Autorelease 物件的記憶體管理執行緒物件記憶體
- JVM記憶體引數配置JVM記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- MySQL記憶體佔用計算公式MySql記憶體公式
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- Oracle記憶體引數調優Oracle記憶體
- java中如何給多執行緒中子執行緒傳遞引數?Java執行緒
- 如何檢視MySQL資料庫佔多大記憶體,佔用太多記憶體怎麼辦?MySql資料庫記憶體
- filebeat實踐-記憶體佔用-最大記憶體佔用記憶體
- 要點提煉| 理解JVM之記憶體模型&執行緒JVM記憶體模型執行緒
- JVM(二)-記憶體區域之執行緒私有區域JVM記憶體執行緒
- [Java虛擬機器]Java記憶體模型與執行緒Java虛擬機記憶體模型執行緒
- JVM執行緒和記憶體溢位問題排查思路JVM執行緒記憶體溢位
- JVM完整詳解:記憶體分配+執行原理+回收演算法+GC引數等JVM記憶體演算法GC
- openGauss執行緒池相關引數執行緒
- C# 多執行緒引數傳遞C#執行緒
- 為什麼JVM指定-Xmx引數後佔用記憶體會變少?JVM記憶體
- 故障排除指南:MySQL執行記憶體不足怎麼辦?MySql記憶體
- innodb的幾個記憶體引數記憶體
- Tomcat記憶體引數調整Tomcat記憶體
- win10開機記憶體佔用60%怎麼辦 解決開機執行記憶體佔用率過高的方法Win10記憶體