mysql锁表

MySQL表锁和行锁

匿名 (未验证) 提交于 2019-12-02 21:59:42
锁粒度 MySQL 不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现了锁机制,服务器层完全不了解存储引擎中的锁实现: InnoDB 存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MyISAM 和 MEMORY 存储引擎采用的是表级锁(table-level locking) BDB 存储引擎采用的是页面锁(page-level locking),但也支持表级锁 默认情况下,表锁和行锁都是自动获得的, 不需要额外的命令。 但是在有的情况下, 用户需要明确地进行锁表或者进行事务的控制, 以便确保整个事务的完整性,这样就需要使用事务控制和锁定语句来完成。 不同粒度锁的比较 表级锁 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 存储引擎通过总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁来避免死锁。 表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用,如Web 应用 行级锁 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 最大程度的支持并发,同时也带来了最大的锁开销。 在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB 中发生死锁是可能的。 行级锁只在存储引擎层实现

mysql中的锁表语句查看及解锁

北战南征 提交于 2019-12-02 19:03:29
1.显示等待执行的语句 show status like 'Table%'; Table_locks_immediate 指的是能够立即获得表级锁的次数 Table_locks_waited 指的是不能立即获取表级锁而需要等待的次数 2.查看正在被锁定的的表(显示被占用的表) show OPEN TABLES where In_use > 0; 3.查找mysql中的锁表语句 SHOW PROCESSLIST SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。如果有线程在 update或者 insert 某个表,此时进程的 status为updating 或者 sending data 4.kill掉找到锁表的sql语句ID SHOW PROCESSLIST kill 42093 来源: https://www.cnblogs.com/fangkong/p/11759153.html

MySQL 性能优化总结

本小妞迷上赌 提交于 2019-12-02 10:53:54
一、影响mysql的性能因素 io: 磁盘IO、随机IO、网络IO 扫描行数 内存、临时表、key cache、query cache cpu:排序、分组查询、distinct查询 事务导致的表锁等 一条慢sql查询消耗的性能 > 1000条快查询消耗的性能。性能优化归根结底就是查询语句的优化,如何写出高效的查询语句呢? 对mysql的索引结构要有一定深度的了解,才能更好的写出高效的查询语句。 二、b+ tree结构索引的特点 b+tree 适应于全键值、键值范围或左前缀匹配查找 支持order by排序 b+ tree 索引不支持跳过索引中的列查找 三、hash结构索引特点 hash索引是基于hash表实现。 全值匹配、只有全键值精确匹配才可以查到,也就是说只有等值比较,如:=、in 不支持范围、部分匹配查找 不支持排序 当hash冲突较多的话,索引维护代价较高,查询性能也会受到影响。 四、聚簇索引的select,没有union和子查询 MySQL innodb存储引擎是基于聚簇索引构建而来,一般是基于主键id构建的b+tree索引和数据行而来, 如果表不存在主键,那么mysql会自动选择其他的非空的索引字段;如果非空索引字段不存在,而mysql内部会自动生成内部的唯一标识作为主键构建聚簇索引。 插入速度严重依赖于插入顺序。当主键不是数值自增长类型,而是varchar类型

mysql行级锁和表级锁的区别

99封情书 提交于 2019-12-01 04:59:17
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低; 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高; 来源: https://www.cnblogs.com/linliquan/p/11656439.html

oracle查看被锁的表和解锁

佐手、 提交于 2019-11-29 21:30:52
oracle查看被锁的表和解锁 --以下几个为相关表 SELECT * FROM v$lock; SELECT * FROM v$sqlarea; SELECT * FROM v$session; SELECT * FROM v$process ; SELECT * FROM v$locked_object; SELECT * FROM all_objects; SELECT * FROM v$session_wait; --查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; --查看那个用户那个进程照成死锁 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; --查看连接的进程 SELECT sid, serial#, username, osuser FROM v$session; --3.查出锁定表的sid, serial#,os_user_name,

MySQL MVCC && 事务隔离级别 && 锁

与世无争的帅哥 提交于 2019-11-29 03:34:16
MySQL MVCC && 事务隔离级别 && 锁 InnoDB多版本并发控制——MVCC http://my.oschina.net/xinxingegeya/blog/208821 MySQL_S锁_X锁_read lock_write lock http://my.oschina.net/xinxingegeya/blog/215417 MySQL事务隔离级别 http://my.oschina.net/xinxingegeya/blog/215419 MySQL命令行控制事务 http://my.oschina.net/xinxingegeya/blog/296459 MySQL REPEATABLE-READ && 幻读 http://my.oschina.net/xinxingegeya/blog/296513 MySQL/InnoDB锁机制 http://my.oschina.net/xinxingegeya/blog/296591 MySQL事务隔离级别之REPEATABLE-READ http://my.oschina.net/xinxingegeya/blog/296612 MySQL锁表_LOCK TABLES_UNLOCK TABLES http://my.oschina.net/xinxingegeya/blog/341593 MySQL

MySQL锁表查询SQL

偶尔善良 提交于 2019-11-29 01:46:46
// 查看进程 SHOW PROCESSLIST; // 查看是否锁表 SHOW OPEN TABLES WHERE In_use > 0; // 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; // 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 来源: https://www.cnblogs.com/mzq123/p/11438259.html

TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘

半腔热情 提交于 2019-11-28 21:48:31
原文出处: 阿里云RDS-数据库内核组 HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OLAP)混合场景的关系型数据库。HybridDB采用一份数据存储来进行OLTP和OLAP处理,解决了以往需要把一份数据多次复制来分别进行业务交易和数据分析的问题,极大地降低了数据存储的成本,缩短了数据分析的延迟,使得实时分析决策称为可能。 HybridDB for MySQL兼容MySQL的语法及函数,并且增加了对Oracle常用分析函数的支持,100%完全兼容TPC-H和TPC-DS测试标准,从而降低了用户的开发、迁移和维护成本。 TokuDB是TokuTek公司(已被 Percona收购)研发的新引擎,支持事务/MVCC,有着出色的数据压缩功能,支持异步写入数据功能。 TokuDB索引结构采用fractal tree数据结构,是buffer tree的变种,写入性能优异,适合写多读少的场景。除此之外,TokuDB还支持在线加减字段,在线创建索引,锁表时间很短。 Percona Server和Mariadb支持TokuDB作为大数据场景下的引擎,目前官方MySQL还不支持TokuDB。ApsaraDB for MySQL从2015年4月开始支持TokuDB,在大数据或者高并发写入场景下推荐使用。 TokuDB优势 数据压缩

mysql索引优化

怎甘沉沦 提交于 2019-11-28 15:03:32
作为免费又高效的数据库,mysql基本是首选。良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多。即使有这么多优点,仍依赖人去做点优化,看书后写个总结巩固下,有错请指正。   完整的mysql优化需要很深的功底,大公司甚至有专门写mysql内核的,sql优化攻城狮,mysql服务器的优化,各种参数常量设定,查询语句优化,主从复制,软硬件升级,容灾备份,sql编程,需要的不是一星半点的知识与时间来掌握,作为一名像俺这样的菜鸟开发,强吃这么多消化不了也没意义:没地儿用啊,况且还有运维和dba,还不如把手头的业务写好,也就是写好点的sql,而且很多sql语句优化跟索引还是有很大关系的。   首先,mysql的查询流程大致是:mysql客户端通过协议与mysql服务器建立连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API获取数据,最后返回给客户端。怎么存数据、怎么取数据,都与存储引擎有关。然后

Mysql 查看所有线程,被锁的表

柔情痞子 提交于 2019-11-27 13:00:43
查看所有MySQl相关的线程 show full processlist; 杀死线程id为2的线程 kill 2 查看服务器状态 show status like '%lock%'; 查看服务器配置参数 show variables like '%timeout%'; /* 查看所有MYSQl相关的线程 */ show full processlist; /* 杀死线程id为2的线程 */ kill 2 /* 查看服务器状态 */ show status like '%lock%'; /* 查看服务器配置参数 */ show variables like '%timeout%'; 参考链接 MySQL表不能修改、删除等操作,卡死、锁死情况的处理办法。 如何查询mysql中是否表被锁 来源: https://www.cnblogs.com/lick468/p/11364250.html