Latch

什么是latch:

鎖是數據庫系統區別與文件系統的一個關鍵特性。鎖機制用於管理對共享資源的並發訪問。Innodb存儲引擎在行級別上對表數據上鎖,這固然不錯。但是Innodb也會在多個地方使用鎖,從而允許多種不同資源提供並發訪問。例如,操作緩沖池匯總的LRU列表,刪除、添加、移動LRU列表中的元素,為了保證一致性,必須有鎖的介入,這就是latch鎖。

latch與lock的區別

latch一般稱為閂鎖(輕量級別的鎖),因為其要求鎖定的時間必須非常短。若持續的時間長,則應用的性能會非常差。在Innodb存儲引擎中,latch又可以分為mutex(互斥量)和RW-Lock(讀寫鎖)。

而lock對象是事務,用來鎖定的是數據庫中的對象,如表、行、頁。並且一般lock的對象僅在事務commit或rollback后進行釋放(不同事務隔離級別釋放的時間可能不同)。此外,lock,正如在大多數數據庫中一樣,是有死鎖機制的。

同過show engine innodb mutex 進行查看latch

name列顯示的是latch的信息以及源碼所在的位置(行數)。

latch的分類

分為:mutex:互斥量;有時候有些資源需要共享和並發,但是又不是分頻繁,所以向操作系統申請一個mutex,mutex都是排他的。

RW-LATCH : 讀寫鎖

latch的理解:

一個例子:

當我們在執行select 時,數據是緩存在buffer pool中的,多個線程並發訪問或者修改這個數據必然需要一個並發控制機制,這個就是latch

數據庫要訪問的數據必須先存在緩存中,而緩存一般比磁盤空間要小,數據緩沖使用hash表來記錄數據頁是否在內存中。在MySQL中對應的RW-Latch在errlog中說的很清楚,該RW-Latch是在buf0sea.cc的658行創建的RW-Latch。

看errorlog 的壓測示例:

根據日志我們可以分析到線程140140355766016要對記錄加一個x鎖,但是等待線程0x4c407b8線程的RW-Latch的釋放。

latch爭用過程

1)a以x訪問鏈表

2)b排隊等待x解鎖  占了cpu,但是cpu發現你在等待,所以cpu將b踢出

3)鎖鏈的時間,就是找數據的時間。

4)b知道很a快所以,b不去排隊,這是后去spin也就是空轉cpu,然后再去看一下內存數據結構,a是否已解鎖

5)b轉了一圈后,在bspin的時間段的時間中,c進來了,連續多次的spin后, 產生了os waits

6)操作系統將b從cpu中踢出

latch鎖特點:

1.不排隊

2.spin

3.os waits

4.cpu繁忙

mutex:

內存結構 很小 數據庫從操作系統申請到的,不占用buffer pool,完全排他

mutex鎖的持有過程:

a線程持有想mutex內存數據結構中寫一個1

b線程看到內存數據結構有數字, 那么就去spin

確認latch爭用類型:

(這就是在源碼中的173語句)由errorlog 得到的

latch爭用的過程

鏈表上有一個鏈的保護機制latch,小內存結構,這時候有讀的線程a上來要讀取鏈,這個時候這個管理就變成r,讀鎖,當在鏈上找到數據的時候(讀),一找到就釋放讀鎖,b上來也要讀取,這時候一看是r,讀鎖是可以共享的,她也是對鏈進行訪問讀取的,c上來要修改鏈中的兩個塊的內容,一看是r,r和w是互斥的,不能夠同時進行,要么

1、主動要求退出cpu

2、空占着cpu資源(執行一段空代碼,loop,隔一段時間看看a和b有沒有使用完(spin),但是在這個過程中因為c沒有排隊等待,所以可能在等待的過程中又有其他的線程上來霸占鏈,如果執行多次仍這樣,可能就sleep,退出cpu了)為什么空占(害怕操作系統看她閑的把他強行拖走),等(因為他知道a和b占用了資源時間比較短,就是遍歷一條鏈的時間非常短)。

latch爭用的現象:

1、latch爭用會表現為cpu繁忙

2、latch爭用沒有排隊,等一段隨機的時間再回來看一看

監控指標

----------

SEMAPHORES

----------

OS WAIT ARRAY INFO: reservation count 2

OS WAIT ARRAY INFO: signal count 2

RW-shared spins 0, rounds 4, OS waits 2

RW-excl spins 0, rounds 0, OS waits 0

RW-sx spins 0, rounds 0, OS waits 0

Spin rounds per wait: 4.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx

rounds的意思是每次詢問旋轉的參數

os waits:表示sleep,當突然增長比較快的時候,說明latch爭用比較嚴重

rw-shared spin 的次數

rw-excl  spin的次數

latch爭用發生的原因

1、內存訪問太頻繁(不停地找)

2、list鏈太長(鏈上掛10000個快,被持有的幾率太大)

所以有時候會增加instance的數量,把大pool切成小的pool,讓list鏈變的短一些

如何降低latch爭用:

如果出現latch爭用比較嚴重

1.優化sql,降低對內存讀的數量——效果比較明顯

2.增加instances的數量

如何准確發現解決latch

1.show engine Innodb mutex

2.查看什么類型的latch

3.定位sql

latch mysql_MySQL中的latch(閂鎖)詳解——易產生的問題以及原因分析相关推荐

  1. escape mysql_MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"" ...

  2. matlab求最小割,matlab實現圖割算法中的最大流最小割Max-flow/min-cut問題(一)

    本篇主要介紹matlab實現Max-flow/min-cut的方法,介紹一種只實現了Max-flow/min-cut的工具箱Bk_matlab. 一:最大流最小割的由來 了解這個問題之前先說說這個問題 ...

  3. FPGA 中的latch 锁存器

    一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除.为什么说他不好? 一,是什么 锁存器是一种在异步时序电路系统中,对 ...

  4. oracle中的latch: cache buffers chains 与热块

    oracle中的latch: cache buffers chains 与热块 oracle中的latch: cache buffers chains 与热块 ORACLE中的buffer cache ...

  5. oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件

    关于Oracle数据库latch: cache buffers chains等待事件 latch: cache buffers chains等待事件的原理 当一个数据块读入到sga中时,该块的块头(b ...

  6. matlab怎么用wavedec,Matlab中wavedec使用學習及詳解 | 學步園

    最近在使用對ECG訊號進行小波係數的提取,所以用到了wavedec這個matlab中內置函數.然後盡心學習,發現還挺高深,不是我學到的衹是一點皮毛,因爲要對一段波形進行特徵提取,所以我要看哪個小波係數 ...

  7. Unity 3D : ComputeShader 全面詳解

    Unity 3D : ComputeShader 全面詳解 https://blog.csdn.net/weixin_38884324/article/details/80570160 前言: 會寫一 ...

  8. redhat linux ls ls,Linux(3)RedHat7 基本命令二-ls命令詳解

    導語 本文將講述關於ls命令的詳細解析. ls命令 用法 ls [選項]... [文件]... ls [-aAdfFhilnrRSt] 目錄名稱 ls [–color={never,auto,alwa ...

  9. Java正則表達式詳解

    來源:http://www.computerworld.com.cn 如果你曾經用過Perl或任何其他內建正則表達式支持的語言,你一定知道用正則表達式處理文本和匹配模式是多簡單.如果你不熟悉這個術語, ...

  10. php 時間比較,PHP用strtotime()函數比較兩個時間的大小實例詳解

    在PHP開發中,我們經常會對兩個時間的大小進行判斷,但是,在PHP中,兩個時間是不可以直接進行比較,因為時間是由年.月.日.時.分.秒組成的,所以,如果需要將兩個時間進行比較的話,我們首先要做的就是將 ...

最新文章

  1. 阿里巴巴发布AI养蜂系统
  2. Science:人工智能的发展离不开神经科学,先天结构或是下一个方向
  3. 对gridview中的一些操作。
  4. 机器学习的部分名词解释20180724
  5. oracle 按某个字段分类汇总,[数据库]Oracle语句分类汇总
  6. SQL注入(1)--判断是否存在SQL注入漏洞
  7. div 设置a4大小_如何在A4纸张尺寸页面制作HTML页面?
  8. Qt工作笔记-ui文件连接信号与槽
  9. Oracle坏块处理常用SQL
  10. java小新人 带着萌新看springboot源码
  11. 剑指 Offer 09. 用两个栈实现队列(day 03)
  12. PHP地方门户分类信息网站源码讯客分类信息系统商业版 含手机版
  13. 程序员英文简历范例(Java, Python)
  14. php pdo连接oracle乱码,PHP编程:php pdo oracle中文乱码的快速解决方法
  15. 结构化、半结构化、非结构化的理解
  16. 循环小题题库存档(期末复习)
  17. 创建内嵌SIS文件的安装包
  18. excel绝对引用与相对引用$
  19. 批量删除iPhone苹果通讯录的办法
  20. 【高新技术企业】高企申报材料以及要求

热门文章

  1. 看了几个技术入股的帖子,忍不住写个自己亲身经历吧
  2. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  3. 基本组件之botton
  4. 题解 | Birthday Reminders-2019牛客暑期多校训练营第九场F题
  5. Handling App Links
  6. WMware虚拟化IntelVT-x/EPT或AMD-V/RVI(V)不能启用,导致AVD不能启动
  7. 个人公众号成长记 - 做什么内容?
  8. matlab实验7符号计算器,MATLAB自学笔记(二十一):符号微积分、积分变换、代数方程以及可视化...
  9. Apache主机如何强制HTTP重定向到HTTPS WorldPress
  10. 教师评计算机课缺点及建议,评课用语优缺点及建议