MySQL深入——23

主機內存只有100G,現在對一個200G的大表進行掃描,會不會把數據庫的內存用完。

對大表做全表掃描對Sever層的影響

假設現對一個200G的InnoDB表db1,做一個全表掃描,當然要把掃描結果保存到客戶端。

InnoDB的數據時保存在主鍵索引上的,所以全表掃描實際上是掃描表t的主鍵索引,最后返回給客戶端。

返回的結果集并不是完整的,因為MySQL是邊讀邊發的
流程為:1.獲取一行寫到net_buffer當中,net_buffer是由net_buffer_length定義的,默認為16k。

???????????????2.重復獲取知道net_buffer寫滿,調用網絡接口發送出去。

???????????????3.若是發送成功,就清空net_buffer,然后繼續讀取下一行寫入net_buffer

???????????????4.若發送函數返回EAGAIN或WSAEWOULDBLOCK就表示本地網絡棧寫滿,直到網絡棧重寫可寫,再繼續重復操作。

一個查詢在發送過程當中,占用MySQL內部最大內存就是net_buffer這么大,并不會達到200G。這意味著,若客戶端接收慢,MySQL就會由于結果發送不出去導致事務執行的時間變長。

若是客戶端不讀socket receive buffer中的內容,然后再show processlist中可以看到state處于一個Sending to client的狀態。

對于線上業務來說,若是一個查詢的返回結果不會很多,就可以在客戶端使用一個-quick參數就可以使用,mysql_use_result這個方法,讀一行處理一行。當然前提是查詢返回結果不多,若是看到多個線程都處于Sending to client,可以將net_buffer_length設置為一個更大的值。

Sending data

MySQL查詢語句在進入執行階段之后,首先將狀態設置為Sending data,再繼續執行語句的流程,執行完成后就會將狀態改為空字符串。

也就是說在一個線程處于“等待客戶端的狀態”才會顯示未Sending to client,Sending data是正在執行。

全表掃描對InnoDB的影響

InnoDB內存的作用是保持更新結果在配合redo log避免了隨機寫盤,內存的數據頁是在BUffer Pool中管理的。

BUffer Pool還有一個加速功能,因為有WAL機制,當時事務要提交的時候,有一個查詢要讀該內存頁,就可以直接讀,因為這個時候,內存頁是最新的,直接讀內存頁就可以了,無需將redo log應用到數據頁當中再讀取。

Buffer Pool對于查詢加速效果還有一個重要的指標:內存命中率,一般情況下,內存命中率要在99%以上。

InnoDB Buffer Pool大小是由參數innodb_buffer_pool_size決定的,一般設置為物理內存的60%-80%。

innodb_buffer_pool_size小于磁盤的數據量很常見,若一個buffer pool滿了,就要淘汰一個舊數據頁來更新一個新數據頁。InnoDB通過改進LRU算法來實現這一目標。

LRU算法:假設內存當中有P1,P2,P3,P4,P5這么多數據頁,是以鏈表形式保存的,P1是剛剛更新的所以在頭部,這個時候有請求訪問P3,P3就會被移動到頭部,現在要更新一個數據頁,因為內存滿了,要刪除一個,就會刪除尾巴的P5數據頁。

InnoDB改進:InnoDB將其進行改進,以5:3將空間分為young和old區域,young區域中的操作和原LRU算法相同。

在old區域每次被訪問的時候做如下的操作:

1.若這個數據頁在LRU鏈表中存在時間超過1秒,就移動到頭部。

2.若是短于1秒,位置保持不變

時間有參數Innodb_old_blacks_time控制,單位為毫秒,默認一秒。

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

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

相關文章

數據結構從入門到精通——順序表

順序表 前言一、線性表二、順序表2.1概念及結構2.2 接口實現2.3 數組相關面試題2.4 順序表的問題及思考 三、順序表具體實現代碼順序表的初始化順序表的銷毀順序表的打印順序表的增容順序表的頭部/尾部插入順序表的頭部/尾部刪除指定位置之前插入數據和刪除指定位置數據順序表元…

Linux如何查看端口是否占用

在Linux中,有多種方法可以用來檢查端口是否被占用。以下是一些常用的命令: netstat:這是一個非常通用的命令,可以用來查看所有端口的使用情況。如果你想查找特定的端口是否被占用,可以使用netstat命令配合grep。例如&…

【MySQL】DQL

DQL(數據查詢語言)用于在MySQL數據庫中執行數據查詢操作。它主要包括SELECT語句,用于從表中檢索數據。 0. 基本語法 SELECT 字段列表 FROM 表名列表 WHERE 條件列表 GROUP BY 分組字段列表 HAVING 分組后條件列表 ORDER BY 排序字段列表 …

未來醫療技術的發展方向在Python中的重要性

未來醫療技術的發展方向在Python中的重要性體現在以下幾個方面: 數據分析和人工智能:Python作為一種強大的數據分析語言,可以進行大規模的數據處理、分析和挖掘。在醫療領域,大量的醫療數據可以通過Python進行分析,幫助…

【市工信】2024年青島市綠色工廠、綠色工業園區等綠色制造示范申報

科大睿智小編從青島市工信局了解到&#xff0c;為深入貫徹綠色發展理念&#xff0c;牢固樹立綠色低碳發展導向&#xff0c;進一步完善綠色制造體系&#xff0c;培育綠色制造先進典型&#xff0c;根據《工業和信息化部關于印發<綠色工廠梯度培育及管理暫行辦法>的通知》&a…

springcloud:3.1介紹雪崩和Resilience4j

災難性雪崩效應 簡介 服務與服務之間的依賴性,故障會傳播,造成連鎖反應,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的“雪崩”效應。 原因 1.服務提供者不可用(硬件故障、程序bug、緩存擊穿、用戶大量請求) 2.重試加大流量(用戶重試,代碼邏輯重試) 3.服…

在golang中使用protoc

【Golang】proto生成go的相關文件 推薦個人主頁&#xff1a;席萬里的個人空間 文章目錄 【Golang】proto生成go的相關文件1、查看proto的版本號2、安裝protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 1、查看proto的版本號 protoc --version2、安裝protoc-…

Acwing 周賽132 解題報告 | 珂學家 | 并查集 + floyd尋路

前言 整體評價 A. 大小寫轉換 Q: 把字符串s統一成小寫字母形態 題型&#xff1a;簽到 知識點: 考察字符串的API題 c可以借助transform函數&#xff0c;進行轉化 #include <bits/stdc.h>using namespace std;int main() {string s;cin >> s;// 把自己轉化為小寫…

10-Java裝飾器模式 ( Decorator Pattern )

Java裝飾器模式 摘要實現范例 裝飾器模式&#xff08;Decorator Pattern&#xff09;允許向一個現有的對象添加新的功能&#xff0c;同時又不改變其結構 裝飾器模式創建了一個裝飾類&#xff0c;用來包裝原有的類&#xff0c;并在保持類方法簽名完整性的前提下&#xff0c;提供…

代購程序api接口采集商品信息接入演示示例

以下是一個使用Java編寫的簡單示例&#xff0c;演示如何通過API接口采集商品信息并接入到代購程序中&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; impor…

vue使用swiper(輪播圖)-真實項目使用

一、安裝 我直接安裝的vue-awesome-swiper": "^3.1.3"指定版本 npm install vue-awesome-swiper3.1.3 swiper --save二、vue頁面使用&#xff0c;寫了一個小demo <template><div class"vue-swiper"><h1>{{ msg }}</h1><…

陶瓷工業5G智能制造工廠數字孿生可視化平臺,推進行業數字化轉型

陶瓷工業5G智能制造工廠數字孿生可視化平臺&#xff0c;推進行業數字化轉型。在陶瓷工業領域&#xff0c;5G智能制造工廠數字孿生可視化平臺的應用正在改變著行業的傳統生產模式&#xff0c;推動著數字化轉型的進程。本文將圍繞這一主題展開探討&#xff0c;分析數字孿生可視化…

Unity GC + C# GC + Lua GC原理

Unity垃圾回收原理 參考文章&#xff1a;垃圾回收 (計算機科學) - 維基百科&#xff0c;自由的百科全書 (wikipedia.org) 在計算機科學中&#xff0c;垃圾回收&#xff08;英語&#xff1a;Garbage Collection&#xff0c;縮寫為GC&#xff09;是指一種自動的存儲器管理機制。…

配置之道:深入研究Netty中的Option選項

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 配置之道&#xff1a;深入研究Netty中的Option選項 前言Option的基礎概念ChannelOption與Bootstrap Option常見的ChannelOption類型ChannelConfig的使用Option的生命周期不同傳輸協議的Option 前言 在…

Linux下檢查端口占用

很多網站都給出方法檢查出端口占用的進程&#xff0c;直接就kill掉&#xff0c;并不檢查占用進程的詳細情況&#xff0c;如&#xff1a;https://www.runoob.com/w3cnote/linux-check-port-usage.html 正常情況下&#xff0c;需要對進程進行檢查 ls /proc/進程ID -l

Tomcat部署Web服務器及基礎功能配置

前言 Tomcat作為一款網站服務器&#xff0c;目前市面上Java程序使用的比較多&#xff0c;作為運維工人&#xff0c;有必要了解一款如何去運行Java環境的網站服務。 目錄 一、Java相關介紹 1. Java歷史 2. Java跨平臺服務 3. Java實現動態網頁功能 3.1 servelt 3.2 jsp …

Revit-二開之創建TextNote-(1)

Revit二開之創建TextNote TextNode在Revit注釋模塊中&#xff0c;具體位置如圖所示 圖中是Revit2018版本 【Revit中的使用】 Revit 中的操作是點擊上圖中的按鈕在平面視圖中點擊任意放置放置就行&#xff0c; 在屬性中可以修改文字 代碼實現 創建TextNode ExternalComm…

Web Tomcat

目錄 1 前言2 Tomcat的安裝3 Tomcat文件的構成4 Tomcat的使用步驟 1 前言 Tomcat是一個 http(web)的容器&#xff0c;籠統的理解一下所有的網站都叫做web。這個web容器可以把我們的前端(htmlcssjs)和后端(servlet)代碼都運行起來。 Tomcat是一個免費的開源的Servlet容器&#…

Flutter中的三棵樹

Widget Tree&#xff1a; 頁面配置信息。 Element Tree&#xff1a; Widget tree的實例化對象&#xff0c;創建出renderObject&#xff0c;并關聯到element.renderobject屬性上&#xff0c;最后完成RenderObject Tree的創建。 RenderObject Tree&#xff1a;完成布局和圖層繪制…

【C++ 函數重載】

C 函數重載 ■ C 函數重載簡介■ C 運算符重載■ 一元運算符重載■ 二元運算符重載 &#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff09;■ 關系運算符重載 &#xff08; < 、 > 、 < 、 > 、 等等&#xff09;■ 輸入/輸出運算符重載&#xff08;運…