举个简单的例子:

CREATE TABLE `sample` (
`i` int(10) unsigned NOT NULL auto_increment,
`j` varchar(255) default NULL,
PRIMARY KEY (`i`),
KEY `j` (`j`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 mysql> show table status like "sample" \G;
*************************** 1. row ***************************
Name: sample
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 1638757
Avg_row_length: 61
Data_length: 100253696
Max_data_length: 0
Index_length: 128974848
Data_free: 0
Auto_increment: 1638401
Create_time: 2006-07-12 07:31:51
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment: InnoDB free: 1591296 kB
1 row in set (0.27 sec)

这个表有1638400条记录,如果通过加只读锁看看:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(i) from sample lock in share mode;
+----------+
| count(i) |
+----------+
| 1638400 |
+----------+
1 row in set (7.02 sec)

show engine innodb status看下:

History list length 5
Total number of lock structs in row lock hash table 6092
LIST OF TRANSACTIONS FOR EACH SESSION:
—TRANSACTION 0 42306982, ACTIVE 89 sec, process no 10099, OS thread id 1878960
6093 lock struct(s), heap size 503104

有503104字节用来锁1638400条记录,每行小于3bits,那么互斥锁占用多少内存呢?

mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> select count(i) from sample for update;
+----------+
| count(i) |
+----------+
| 1638400 |
+----------+
1 row in set (8.60 sec)

show engine innodb status的结果是:

History list length 5
Total number of lock structs in row lock hash table 6092
LIST OF TRANSACTIONS FOR EACH SESSION:
—TRANSACTION 0 42306989, ACTIVE 195 sec, process no 10099, OS thread id 1878960
6093 lock struct(s), heap size 503104
MySQL thread id 7429, query id 24542 localhost root

和前一个占用的内存一样,模糊匹配呢?

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(*) from sample where j like "5%" lock in share mode;
+----------+
| count(*) |
+----------+
| 102216 |
+----------+
1 row in set (4.44 sec)

show engine innodb status显示:

LIST OF TRANSACTIONS FOR EACH SESSION:
—TRANSACTION 0 42306999, ACTIVE 133 sec, process no 10099, OS thread id 1878960
441 lock struct(s), heap size 44352

100w行大概消耗44KB,每行小于4bits。

整个上面来看占用的内存还是很少的。

文章来源:

https://www.percona.com/blog/2006/07/13/how-much-memory-innodb-locks-really-take/

innodb的锁到底占用多少内存的更多相关文章

  1. InnoDB中锁的模式,锁的查看,算法

    InnoDB中锁的模式   Ⅰ.总览 S行级共享锁lock in share mode X行级排它锁增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X ...

  2. InnoDB中锁的查看

    Ⅰ. show engine innodb status\G 1.1 实力分析一波 锁介绍的那篇中已经提到了这个命令,现在我们开一个参数,更细致的分析一下这个命令 (root@localhost) [ ...

  3. innodb事务锁

    计算机程序锁   控制对共享资源进行并发访问 保护数据的完整性和一致性   lock  主要是事务,数据库逻辑内容,事务过程 latch/mutex 内存底层锁:   更新丢失 原因: B的更改还没有 ...

  4. new一个Object对象占用多少内存?

    Java的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况. 也许很多人都没有考虑过这 ...

  5. [转]new一个Object对象占用多少内存?

    我们分解下ArrayList arr = new ArrayList();等同于ArrayList arr = null;//初始化arr = new ArrayList();//实例化这两个过程.初 ...

  6. Android高效内存1:一张图片占用多少内存

    在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用.而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用可以带来直接的效果.本文就简单介绍一张图片到 ...

  7. Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

    写在前面 最近小伙伴加群时,我总是问一个问题:Java中的String类占用多大的内存空间?很多小伙伴的回答着实让我哭笑不得,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道 ...

  8. 一个Java对象到底占用多大内存?

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  9. 一个Java对象到底占用多大内存

    在网上搜到了一篇博客讲的非常好,里面提供的这个类也非常实用: import java.lang.instrument.Instrumentation; import java.lang.reflect ...

随机推荐

  1. Xcode编译错误和警告汇总<转>

    1.error: macro names must be identifiers YourProject_prefix.pch 原因: 因为你弄脏了预处理器宏,在它处于<Multiple Val ...

  2. h5固定表头公共样式

    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...

  3. Android 关于ExpandableListView刷新的解决办法

    正文 首先是最基础的 ExpandableListView vList = (ExpandableListView) this.findViewById(R.id.list); EListAdapte ...

  4. winston日志管理2

    上次讲到 Exceptions  例外 Handling Uncaught Exceptions with winston 使用winston处理未捕获的异常(这个如果对于异步,我不是很喜欢用) 使用 ...

  5. php Memcache

    <?php $mem = new Memcache();//实例化一个对象 $mem->connect("localhost",11211);//连接memcache服 ...

  6. tomcat 禁用不安全的http请求模式 .

    HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的.当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义.此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法. ht ...

  7. 红帽Linux 配置VNC桌面远程工具

    1.先确认VNC是否安装 默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上. 使用rpm命令检查是否安装了vnc,如果安装了就显示软件名称: [root@ ...

  8. Django 学习

    urls.py 路由系统 from django.conf.urls import url,includefrom django.contrib import adminfrom web import ...

  9. mySQL 教程 第7章 存储过程和函数

    存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...

  10. 可复用的js效果

    以下案例的html以及css代码 <!doctype html> <html lang="zh-hans"> <head> <meta c ...