MySQL會話連接數消耗內存分析

關于連接數消耗內存情況

FROM DEEPSEEK

在 MySQL 中,每個單獨的空閑連接所消耗的內存量取決于多個因素,包括連接的線程棧大小(由 `thread_stack` 參數設置)和其他每個連接的緩沖區。根據測試結果來看,對于空閑連接的內存消耗并沒有一個固定的數值,因為它會根據連接的活躍狀態和執行的查詢類型而變化。然而,對于內存規劃目的,推薦平均每個連接計劃約10MB內存。

線程棧(Thread Stack)是操作系統為每個線程分配的一段內存區域,用于存儲線程的局部變量、函數調用信息、返回地址等。在多線程環境中,每個線程都有自己的線程棧,以確保線程之間數據隔離,防止數據競爭和相互干擾。

線程棧的大小:

線程棧的大小對應用程序的性能和資源使用有重要影響。棧太小可能導致棧溢出(Stack Overflow),而棧太大則可能導致內存浪費。

  • 棧溢出:如果線程調用的函數太深或局部變量太大,可能會超出棧的限制,導致棧溢出錯誤。
    • 程序崩潰:當線程棧溢出時,程序可能會崩潰,導致正在執行的數據庫操作失敗。
    • 數據不一致:如果棧溢出發生在事務處理過程中,可能會導致數據不一致,因為事務可能無法正確提交或回滾。
    • 資源泄露:棧溢出可能導致資源未能正確釋放,從而引發內存泄露或其他資源管理問題。
  • 內存浪費:如果棧大小設置得過大,會浪費內存資源,尤其是在創建大量線程的情況下。

MySQL中的線程棧:

在 MySQL 中,可以通過配置參數 thread_stack 來設置線程棧的大小。這個參數影響 MySQL 服務器為每個新線程分配的內存量。MySQL 5.6 之前的版本中,thread_stack 的默認值通常是 128KB,而在 MySQL 5.7 及更高版本中,這個值增加到了 1MB。

此外,每個 MySQL 連接需要一定量的內存來維護連接狀態、緩存查詢結果和執行計劃等,這個內存量相對較小,可能在幾十KB到幾百KB之間。對于連接池中的空閑連接,它們會占用一定的內存,但這個內存通常遠小于活躍連接時的內存消耗。連接池可以顯著減少創建和銷毀連接的開銷,從而提高數據庫交互的效率。

總的來說,空閑連接的內存消耗相對較小,但隨著連接數量的增加,累積的內存消耗可能會變得顯著。因此,合理地管理數據庫連接,例如通過使用連接池技術,對于優化數據庫性能和資源使用非常重要。

MySQL8.0.28新特性

MySQL 8.0.28開始,新增一個特性,支持監控統計并限制各個連接(會話)的內存消耗,避免大量用戶連接因為執行垃圾SQL消耗過多內存,造成可能被OOM kill的風險。

首先,需要先設置系統選項 global_connection_memory_tracking = 1,之后可以通過系統狀態變量 Global_connection_memory 查看當前所有連接消耗的內存總量

相關參數介紹

global_connection_memory_trackingGlobal_connection_memoryconnection_memory_chunk_sizeconnection_memory_limit

官方文檔:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html

問題分析

開源 MySQL8.0.37 開啟global_connection_memory_tracking參數

當前有3個連接存在,共消耗內存約1096KB

可以看到當新增一個空閑的連接,內存大概增加了8.05KB左右

并發測試:

待補充.....

可以調整每個會話連接可使用內存上限,由選項 connection_memory_limit 定義其限制,默認值及最大值都是 18446744073709551615,這個默認值太大了,等同于沒有限制。

設置connection_memory_limit =209715即2MB

然后調用存儲過程插入數據時會發現當前會話超出連接內存限制2097152字節,關閉連接

(4082, 'Connection closed. Connection memory limit 2097152 bytes exceeded. Consumed 2563352 bytes.')

。。。。。。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93819.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Objective-C實現調節筆記本屏幕亮度(附完整源碼)

Objective-C實現調節筆記本屏幕亮度 在macOS上,您可以使用Objective-C來調節筆記本的屏幕亮度。以下是一個簡單的示例,演示如何使用CoreGraphics框架來實現這一功能。請確保您的Xcode項目中包含CoreGraphics框架。 完整源碼示例 #import <Cocoa/Cocoa.h> #import <…

三十一、【Linux網站服務器】搭建httpd服務器演示個人主頁、用戶認證、https加密網站配置

httpd服務器功能演示一、安裝 HTTPD 服務二、配置個人用戶主頁1. 啟用個人空間功能2. 創建測試用戶及網站目錄3. 配置 SELinux 權限三、配置用戶認證1. 創建密碼文件2. 配置目錄認證3. 重啟服務生效四、配置 SSL 加密網站1. 生成自簽名證書2. 配置 SSL 虛擬主機3. 重啟服務驗證…

把Java程序部署到本地Docker

一&#xff1a;clean && install程序install之后會在target中生成jar包 二&#xff1a;準備三個文件&#xff08;1&#xff09;其中Dockerfile主要起到配置作用&#xff1a;# 基礎鏡像 FROM openjdk:17-jdk-slim # 作者 MAINTAINER "" # 配置 ENV PAR…

Java學習-------外觀模式

在軟件開發中&#xff0c;隨著系統的不斷迭代&#xff0c;模塊會越來越多&#xff0c;模塊之間的依賴關系也會變得錯綜復雜。這不僅會增加開發難度&#xff0c;還會讓系統的維護和擴展變得棘手。而外觀模式就像一位 “前臺接待員”&#xff0c;為復雜的系統提供一個簡潔統一的接…

Go語言-->變量

Go語言–>變量 在 Go 語言中&#xff0c;定義變量有幾種常見的方式。下面是一些常見的語法和用法&#xff1a; 1. 使用 var 關鍵字定義變量 最常見的方式是使用 var 關鍵字&#xff0c;后面跟上變量名和類型。你也可以為變量賦初值。 基本格式&#xff1a; var variableName…

分布式鏈路追蹤的實現原理

分布式鏈路追蹤系統的實現涉及多個核心技術環節&#xff0c;下面我將從數據采集、上下文傳播、存儲分析等維度深入解析其工作原理。 一、核心架構組件 1. 系統組成模塊 #mermaid-svg-pDlZY54w2Z0Bp1H1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

Python爬蟲實戰:研究micawber庫相關技術構建網頁采集系統

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上的數據量呈現出爆炸式增長。如何從海量的網頁數據中提取有價值的信息,成為了一個重要的研究課題。網絡爬蟲作為一種自動獲取網頁內容的技術,為解決這一問題提供了有效的手段。通過網絡爬蟲,可以快速、高效地采集…

前端框架Vue3(三)——路由和pinia

路由的理解 路由就是一組key-value的對應關系&#xff0c;多個路由&#xff0c;需要經過路由器的管理。 路由-基本切換效果 導航區、展示區請來路由器制定路由的具體規則&#xff08;什么路徑&#xff0c;對應著什么組件&#xff09;形成一個一個的路由 【兩個注意點】 路由組件…

【go】實現BMI計算小程序與GUI/WEB端實現

好的&#xff0c;下面是用 Go 語言實現的一個簡單的 BMI&#xff08;Body Mass Index&#xff0c;身體質量指數&#xff09;計算器&#xff0c;包含中文注釋與完整代碼&#xff0c;可以直接運行。 一、BMI 計算公式 BMI體重&#xff08;kg&#xff09;身高2&#xff08;m2&…

Windows系統優化命令-記錄

閑著無聊&#xff0c;近來電腦有些卡頓&#xff0c;記錄一下相關命令。最好的命令還是格式化╮(╯▽╰)╭ 1. 磁盤清理相關命令 cleanmgr - 磁盤清理工具 cleanmgr啟動磁盤清理工具&#xff0c;可清理臨時文件、回收站等內容 diskpart - 磁盤分區工具 diskpart用于磁盤管理&…

BFCP協議學習

BFCP是為了SIP呼叫中實現presentation的二進制協議。開源庫libbfcp 如何協商角色 SIP 消息的SDP中有BFCP 的部分&#xff0c;其中s-only 代表要當服務器角色&#xff0c;c-only 代表要當client角色。confid, userid 都是需要在后續消息中對齊的。 通過port信息可以為后續bfcp…

常用設計模式系列(十七)—命令模式

常用設計模式系列&#xff08;十七&#xff09;—命令模式 第一節、前言 各位老鐵好&#xff01; 今天我來跟大家分享對象行為型模式第二章節——《命令模式》&#xff0c;“命令”一詞&#xff0c;通俗易懂&#xff0c;我們在生活中經常會發出各種各樣的命令&#xff0c;就像你…

【AI繪畫】Stable Diffusion 全面指南:安裝、版本對比、功能解析與高級應用

引言&#xff1a;Stable Diffusion 概述 在人工智能圖像生成領域&#xff0c;商業工具如Midjourney憑借其集成化服務與高質量輸出占據市場&#xff0c;而Stable Diffusion&#xff08;簡稱SD&#xff09;則以開源特性構建了差異化優勢。與商業工具依賴云端資源、受限于訂閱費用…

kafka使用kraft

window 使用kafka-storage生成生成一個uuid .\kafka-storage.bat random-uuid格式化存儲 在這里插入代碼片.\kafka-storage.bat format -t 對應的uuid D:\configure\fisher\kafka\config\kraft\server.properties 啟動命令 .\kafka-server-start.bat D:\configure\fisher\kafka…

HCIA-Datacom認證筆記:IP路由基礎——核心概念與路由分類

網絡技術學習中&#xff0c;IP路由是繞不開的核心知識點&#xff0c;對于備考HCIA-Datacom認證的朋友來說&#xff0c;掌握路由基礎能為后續學習打下良好基礎。今天帶朋友們梳理一下IP路由的核心概念、路由表結構及路由分類一、路由核心概念什么是路由&#xff1f; 簡單來說&am…

FFmpeg 安裝與使用

文章目錄1. 環境部署&#xff08;Windows&#xff09;1.1. 安裝包下載1.2. 配置環境變量1.3. 驗證安裝2. FFmpeg 基礎使用教程2.1. 常用命令格式2.2. 基礎功能示例2.2.1. 視頻轉碼&#xff08;MP4 → MKV&#xff09;2.2.2. 調整分辨率&#xff08;1080p → 480p&#xff09;2.…

Python 數據分析(四):Pandas 進階

目錄 1. 概述2. 缺失項3. 分組聚合4. 數據合并5. 數據可視化 5.1 折線圖5.2 條形圖5.3 直方圖5.4 散點圖5.5 餅圖 1. 概述 我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹&#xff0c;本文我們進一步來學習 Pandas 的一些使用。 2. 缺失項 在現實中我們獲…

結構化文本文檔的內容抽取與版本重構策略

結構化文本文檔的內容抽取與版本重構策略 摘要 本文深入探討了結構化文本文檔處理領域中的兩大核心技術——內容抽取與版本重構。文章首先分析了結構化文檔的特點及其在現代信息管理中的重要性&#xff0c;隨后系統性地介紹了文檔內容抽取的技術路線與方法論&#xff0c;包括…

【BUUCTF系列】[HCTF 2018]WarmUp1

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Author:枷鎖 點開題目顯示一個圖片&#xff0c;沒有任何交互功能&#xff0c;我們直接查看網頁源代碼我們可以看到有一個歆慕的注釋source.php&#xff0c;我們進行拼接&#xff0c;訪問一下這個文件在url后加上/source.php進…

Flutter Chen Generator - IconFont Generator

Flutter Chen Generator &#x1f680; 一個強大的Flutter代碼生成工具包&#xff0c;包含多個實用的代碼生成器。 ? 功能特性 &#x1f4c1; 資源生成器 (Assets Generator) &#x1f504; 自動掃描assets目錄并生成Dart常量&#x1f9e0; 智能駝峰命名轉換&#xff0c;保…