举个简单的例子:

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/

最新文章

  1. 求n!质因数分解之后素数a的个数
  2. MyBatis入门学习教程-MyBatis缓存
  3. JS-改变页面的颜色(一)
  4. SQL Server中的事务日志管理(4/9):简单恢复模式里的日志管理
  5. Nuget~管理自己的包包~丢了的包包快速恢复
  6. 项目回顾1-图片上传-form表单还是base64-前端图片压缩
  7. Android任务和返回栈完全解析
  8. iframe 传值问题
  9. Ubuntu 16.04 Vysor 破解 和黑屏问题解决+ 闪屏问题解决
  10. Hadoop分布式文件系统(HDFS)详解
  11. HW3.19
  12. Asus 安装 windows 7
  13. 14.3.4 Phantom Rows 幻影行
  14. rabbitmq-message(C#)
  15. Android监听WebView滑动到底部
  16. [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
  17. 解决Javascript大数据列表引起的网页加载慢/卡死问题。
  18. 三、Html常用标签
  19. leetcode02大数相加
  20. 记录-eureka

热门文章

  1. 创建数据库和表的SQL语句
  2. .net 4.0 ValidateRequest="false"
  3. ASIHTTPRequest实现https双向认证请求
  4. 话说 依赖注入(DI) or 控制反转(IoC)
  5. 调试 rewrite
  6. 强制回收和IDisposable.Dispose方法
  7. [OpenS-CAD]屏幕坐标转换分析
  8. Silverlight以列表显示数据库数据_DataGrid
  9. iOS 快递查询
  10. Java基础之创建窗口——颜色和光标(TryWindow4)