MySQL 實戰 45 講 筆記 ----來源《極客時間》

01 | 基礎架構:一條SQL查詢語句是如何執行的?

1. MySQL 可以分為 Server層?和?存儲引擎層?兩部分。Server 層包括連接器、查詢緩存、分析器、優化器、執行器等。存儲引擎層支持 InnoDB、MyISAM等.

(1)?連接器:管理連接,權限認證。

(2)?查詢緩存:命中則直接返回結果。

(3) 分析器:詞法分析,語法分析。

(4) 優化器:生成執行計劃,選擇索引。

(5) 執行器:操作引擎,返回結果。

(6) 存儲引擎:存儲數據,提供讀寫接口。

2. 臨時內存累積問題: 在執行過程中臨時使用的內存會保留在連接對象里面,在連接斷開的時候才釋放。所以長連接累積下來,會導致內存占用太大,被系統強行殺掉(OOM)。

? ? 解決辦法:可以執行 mysql_reset_connection 來重新初始化連接資源,釋放內存。而且它不需要重連和重做權限驗證。

3.?查詢緩存往往弊大于利,MySQL 8.0 版本將查詢緩存的功能刪掉了。

02 | 日志系統:一條SQL更新語句是如何執行的?

1. MySQL 最重要的兩個日志:物理日志 redo log 和邏輯日志 binlog。

2.?redo log 相關:

(1) 作用:避免每一次update語句都需要查找磁盤,降低 IO 成本。

(2) 簡述:處理update語句時,不查找對應的記錄去寫入,而是把數據寫進內存和日志,并把日志本身持久化到磁盤。之后空閑了再把日志對應的數據同步到磁盤。

(3) WAL 技術,關鍵點就是先寫日志,再寫磁盤。 應用于 redo log。

(4) redo log寫入方式:環形方式,先從頭開始寫,寫到末尾就又回到開頭循環寫。

(5)?redo log的數據是寫入磁盤的,所以可以保證即使數據庫發生異常重啟,之前提交的記錄都不會丟失,這個能力稱為 crash-safe。

2. binlog 相關:

(1) 作用:記錄原始的SQL語句,用于數據恢復操作。

3.?redo log 和 binlog 的區別:

(1)?redo log 是為了降低IO成本;binlog 是為了可以恢復數據。

(2)?redo log 是 屬于SQL的存儲引擎層(InnoDB )的;binlog 是屬于 MySQL 的 Server 層的。

(3)?redo log 記錄的是“在某個數據頁上做了什么修改”;binlog 記錄的是這個語句的原始邏輯。

(4)?redo log 是循環寫的,空間用完后會擦除數據;binlog 是追加寫入的,并不會擦除以前的日志。

4.?update 語句基于redo log和binlog相關的內部流程:

(1) 在內存查找相關數據,不在內存的話就從硬盤讀取。

(2) 根據update語句,在內存中修改數據。

(3) 把操作記錄寫入到 redo log 里。redo log 設置為 prepare 狀態。

(4)?生成這個操作的 binlog,并把 binlog 寫入磁盤。

(5) 把redo log 設置成commit狀態。

(6) 如果在上面(4)(5)步驟時出現了系統掛掉的情況,那么在系統重啟時,會接著做完(4)(5)步驟。

作用:上面的“兩階段提交模式”,保證了任何情況下,redo log 和 binlog都是同步一致的

03 | 事務隔離:為什么你改了我還看不見?

1.?事務是在MySQL的引擎層實現的。原生的 MyISAM 引擎不支持事務,是 MyISAM 被 InnoDB 取代的重要原因之一。

2. 有多個事務同時執行的時候,可能出現臟讀、幻讀的問題。SQL通過 “隔離級別”的概念,來解決這些問題。

3.?SQL 標準的事務隔離級別包括:讀未提交讀提交可重復讀?串行化

(1)?讀未提交:一個事務 還沒提交,它做的變更,在別的事務里 已經生效

(2)?讀提交:一個事務 提交之后,它做的變更,在別的事務里 才生效

(3)?可重復讀:一個事務執行過程中看到的數據,與事務在啟動時的數據是一致的。未提交的變更,對其他事務是不生效的。

(4)?串行化:對于同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。后訪問的事務必須等前一個事務執行完成,才能繼續執行。

4.??在實現上,數據庫里會創建一個視圖,訪問時以視圖的結果為準。

(1)?讀未提交:沒有視圖概念,直接返回記錄上的最新值。

(2)?讀提交是指:視圖是在每個 SQL 語句開始執行時創建的。

(3)?可重復讀是指:視圖在事務啟動時創建,整個事務存在期間都用這個視圖。

(4)?串行化:沒有視圖概念,用加鎖的方式來避免并行訪問。

5. MySql的事務隔離級別是可重復讀,Oracle是讀提交。做數據遷移時要注意修改。

6.?事務隔離的實現:每條記錄在更新的時候,都會同時記錄一條回滾操作。通過這些回滾操作,可以得到前一個狀態的值。也就可以獲得各個隔離級別狀態下的值。

7.?回滾日志帶來的問題:當沒有事務再需要用到這些回滾日志時,回滾日志才會被刪除。時間很長的事務,會導致大量占用存儲空間。應盡量避免使用長事務

8.?建議通過顯式語句來啟動事務(begin 或 start transaction),具體是使用 set autocommit=1。

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

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

相關文章

nextjs+supabase vercel部署失敗

1.不能含有<any> 改成unknown或者增加類(如圖) 2.檢查vecel是否配置環境變量&#xff08;即supabase的url和anon-key&#xff09;

數據庫Mysql_聯合查詢

或許自己的不完美才是最完美的地方&#xff0c;那些讓自己感到不安的瑕疵&#xff0c;最終都會變成自己的特色。 ----------陳長生. 1.介紹 1.1.為什么要進行聯合查詢 在數據設計的時候&#xff0c;由于范式的需求&#xff0c;會被分為多個表&#xff0c;但是當我們要查詢數據…

(37)VTK C++開發示例 ---紋理地球

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 將圖片紋理貼到球體上&#xff0c;實現3D地球的效果。 該代碼使用了 VTK (Visualization Toolkit) 庫來創建一個紋理…

VMware-centOS7安裝redis分布式集群

1.部署redis包 1.1 在usr/local文件夾里創建文件夾 mkdir software 1.2 進入文件夾 cd /usr/local/software/ 下載redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解壓 tar zxvf redis-6.2.6.tar.gz重命名文件夾 mv redis-6.2.6 redis安裝gcc編譯器 yum i…

【RocketMQ Broker 相關源碼】- broker 啟動源碼(2)

文章目錄 1. 前言2. 創建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加載 ConsumeQueue 文件3.3 創建 StoreCheckpoint3.4 indexService.load 加載 IndexFile 文件3.5 recover 文件恢復3.6 延時消息服務加載 4. registerProcesso…

認識含鹽褶皺和沖斷帶中的前造山運動蒸發巖變形

主要觀察結果的示意圖模型&#xff0c;并提出了三疊紀前造山蒸發巖變形的演化模型。&#xff08;a&#xff09; 蒸發巖的初始平緩隆起&#xff0c;在鹽枕和鹽背斜頂部有滑塌褶皺和同沉積伸展斷層。&#xff08;b&#xff09; 底辟形成&#xff0c;主動刺穿和拖動折疊長底辟&…

數據庫MySQL學習——day8(復習與鞏固基礎知識)

文章目錄 1. 數據庫基礎概念復習2. 常用SQL命令復習2.1 SELECT 查詢數據2.2 INSERT 插入數據2.3 UPDATE 更新數據2.4 DELETE 刪除數據 3. 表操作復習3.1 創建表3.2 修改表3.3 刪除表 4. 實踐任務4.1 創建樣例數據庫和表4.2 插入和更新數據4.3 使用WHERE、ORDER BY、LIMIT進行查…

TS 字面量類型

str是string類型l str2是常量&#xff0c;類型是字面量類型 用途&#xff1a;配合聯合類型確定更嚴謹精確的可選值利恩

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)1.3.1 工具定位與適用場景1.3.2 深度解析三大工具1.3.2.1 psql:命令行的終極掌控核心特性基礎操作示例優缺點分析1.3.2.2 PGAdmin:PostgreSQL 專屬管理平臺…

2023年第十四屆藍橋杯省賽B組Java題解【 簡潔易懂】

2023年第十四屆藍橋杯省賽B組Java 題解 比賽整體情況說明 第十四屆藍橋杯大賽省賽B組Java賽道共有10道題目&#xff0c;題型分布如下&#xff1a; 題目類型題量難度分布考察重點結果填空題53簡單 2中等基礎算法、數學邏輯、字符串處理編程大題52中等 3困難動態規劃、圖論、…

深度學習中的數據增強:提升食物圖像分類模型性能的關鍵策略

深度學習中的數據增強&#xff1a;提升食物圖像分類模型性能的關鍵策略 在深度學習領域&#xff0c;數據是模型訓練的基石&#xff0c;數據的數量和質量直接影響著模型的性能表現。然而&#xff0c;在實際項目中&#xff0c;獲取大量高質量的數據往往面臨諸多困難&#xff0c;…

jakarta.mail(javax.mail)包中關于SMTP協議支持的屬性參數配置

一、程序屬性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默認用戶名。2mail.smtp.hostString要連接的SMTP服務器。3mail.smtp.portint如果 connect()方法未明確指定一個&#xff0c;則要連接的SMTP服務器端口。默認為25。4mail.smtp.connectiontimeoutint套接字連…

《解鎖SCSS算術運算:構建靈動樣式的奧秘》

SCSS作為CSS預處理器&#xff0c;算術運算功能猶如一顆璀璨明珠&#xff0c;賦予我們動態計算樣式屬性值的強大能力&#xff0c;讓網頁樣式不再是一成不變的刻板呈現&#xff0c;而是能夠根據各種條件和需求靈動變化。 在SCSS的世界里&#xff0c;算術運算絕非孤立的存在&…

Java 入門篇

文章目錄 一、注釋1、單行注釋2、多行注釋3、文檔注釋 二、字面量注意 三、變量四、標識符 一、注釋 1、單行注釋 // 同 C992、多行注釋 /* 同 C89和 C99 等 */3、文檔注釋 /** 文檔注釋&#xff0c;其內容是可以提取到一個程序說明文檔中去的*/二、字面量 同 C 常量 注意…

PowerShell安裝Chocolatey

文章目錄 環境背景安裝參考 環境 Windows 11 專業版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有點類似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默認沒有 grep 命令&#xff0c;則可以通過…

將Airtable導入NocoDB

將Airtable導入NocoDB 0. 前提條件1. 詳細步驟 NocoDB提供了一種簡化流程&#xff0c;可在幾分鐘內將您的Airtable數據庫無縫轉移到各種數據庫管理系統&#xff0c;包括MySQL、Postgres和SQLite。此功能特別適合希望將Airtable數據庫遷移到更強大且可擴展的數據庫管理系統中的用…

微軟發布了最新的開源推理模型套件“Phi-4-Reasoning

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Elasticsearch入門速通01:核心概念與選型指南

一、Elasticsearch 是什么&#xff1f; 一句話定義&#xff1a; 開源分布式搜索引擎&#xff0c;擅長處理海量數據的實時存儲、搜索與分析&#xff0c;是ELK技術棧&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心組件。 核心能力&#xff1a; 近實時搜索&…

【angular19】入門基礎教程(三):關于angular里面的響應式數據入門使用

三個框架&#xff0c;都有響應式數據的概念。在angular里面有專門的叫法&#xff0c;響應式數據叫信號,英文名signal。其他兩個框架式沒有專門的名字的&#xff0c;統稱為動態數據。這點可以說&#xff0c;angular還是太細了&#xff0c;細節值得點贊&#xff01;&#xff01; …

GitHub Actions 和 GitLab CI/CD 流水線設計

以下是關于 GitHub Actions 和 GitLab CI/CD 流水線設計 的基本知識總結: 一、核心概念對比 維度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml執行環境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市場生態Actions Mar…