查看数据库锁
查看sql server数据库被锁表可以用用如下语句:
拓展资料:
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
⑵ mysql 查看数据库中有没有锁
第一步,查看行锁使用情况,命令:
show statue like 'innodb_row_lock%';
如下图所示:
第二步,创建数据库表monitor_amount,如下图所示:
第三步,查看innodb的状态,命令:
show innodb status \G;
如下图所示:
第四步,向数据库表monitor_amount插入四条记录,如下图所示:
第五步,再次查看innodb状态,如下图所示:
第六步,可以利用删除表命令来停止查看,如下图所示:
⑶ MYSQL数据库怎么查看 哪些表被锁了
以下五种方法可以快速定位全局锁的位置,仅供参考。
方法1:利用 metadata_locks 视图
此方法仅适用于 MySQL 5.7 以上版本,该版本 performance_schema 新增了 metadata_locks,如果上锁前启用了元数据锁的探针(默认是未启用的),可以比较容易的定位全局锁会话。
方法2:利用 events_statements_history 视图此方法适用于 MySQL 5.6 以上版本,启用 performance_schema.eventsstatements_history(5.6 默认未启用,5.7 默认启用),该表会 SQL 历史记录执行,如果请求太多,会自动清理早期的信息,有可能将上锁会话的信息清理掉。
方法3:利用 gdb 工具如果上述两种都用不了或者没来得及启用,可以尝试第三种方法。利用 gdb 找到所有线程信息,查看每个线程中持有全局锁对象,输出对应的会话 ID,为了便于快速定位,我写成了脚本形式。也可以使用 gdb 交互模式,但 attach mysql 进程后 mysql 会完全 hang 住,读请求也会受到影响,不建议使用交互模式。
方法4:show processlist
如果备份程序使用的特定用户执行备份,如果是 root 用户备份,那 time 值越大的是持锁会话的概率越大,如果业务也用 root 访问,重点是 state 和 info 为空的,这里有个小技巧可以快速筛选,筛选后尝试 kill 对应 ID,再观察是否还有 wait global read lock 状态的会话。
方法5:重启试试!
⑷ orcal数据库表被锁了怎么解锁
1、在做Oracle监听程序测试时,发现帐户已经被锁定。
⑸ MySQL数据库中查询表是否被锁以及解锁
1.查看表被锁状态
2.查看造成死锁的sql语句
3.查询进程
4.解锁(删除进程)
5.查看正在锁的事物 (8.0以下版本)
6.查看等待锁的事物 (8.0以下版本)
⑹ 如何查看oracle数据库用户是否被锁
这个要dba权限的用户才能查看,具体的查看方法是 select * from dba_users 。用户状态一般是open(正常) locked(锁定)expire(过期失效)几种。
⑺ 分析解决数据库锁Waiting for table metadata lock
参考:
https://www.cnblogs.com/digdeep/p/4892953.html
https://blog.csdn.net/u013235478/article/details/68062939/
从 information_schema.innodb_trx 表中查看当前未提交的事务
lock_wait_timeout 表示获取metadata lock的超时(单位为秒),允许的值范围为1到31536000(1年)。 默认值为31536000。详见 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。默认值为一年!!!已哭瞎!将其调整为30分钟
1.2 查看表是否太大
看出表非常小,不存在由于数据量大导致更新慢的问题;
1.3 查看引擎状态
数据量太大,一屏幕都显示不完,不看了。
既然几个比较直接的方法都查不到原因,那只能更深入的查下了,我打算从数据字典中查下(information_schema,performance_schema):
1.4,查找当前等待事务:
显示空。
查找 information_schema 中的 事件表(EVENTS )、锁等待表(INNODB_LOCK_WAITS),innodb 当前出现的锁****(INNODB_LOCKS )均没看到异常(这里就不贴图了)。
1.5 查找事务
既然造成该锁的原因是事务没有提交导致的,那我们应该去查找当前是否有事务在运行( runing 注:由于事务一直是runing状态,这也就是为什么我之前查找各种锁都找不到的原因)
不过有重大发现:一个 trx_mysql_thread_id: 275255348 是从 trx_started: 2015-12-03 14:58:45 一直处于runing状态的。
既然我们找到了id了 那我们再回顾使用 show processlist 查找该ID就行了:
发现了吗,该ID一直是sleep状态。很难发现该进程打开了这个表(可以通过show open tables 查看当前打开的表)。
解决办法: 询问了开发这个点的脚本,操作。确认后通过后台mysql 直接kill掉这个进程,业务的alter操作瞬间完成。
⑻ 怎么知道数据库表已经锁表了
可直接在mysql命令行执行:show engine innodb statusG;
查看造成死锁的sql语句,分析索引情况,然后优化sql然后show processlist;
show status like ‘%lock%’
show OPEN TABLES where In_use > 0; 这个语句记录当前锁表状态
另外可以打开慢查询日志,linux下打开需在my.cnf的[mysqld]里面加上以下内容:
slow_query_log=TRUE(有些mysql版本是ON)
slow_query_log_file=/usr/local/mysql/slow_query_log.txt
long_query_time=3
select *from v$locked_object:可以获得被锁的对象的object_id及产生锁的会话sid。通过查询结果中的object_id,可以查询到具体被锁的对象。
(8)查看数据库锁扩展阅读:
注意事项
也可以直接把这几个视图和表关联起来,在查询结果中直接得到“alter system kill session 'sid, serial#'”这样的方便的kill sessoin命令。
如果执行kill session命令后,锁并没有除掉,session依然存在。这种情况,通过select spid from v$process where addr in(select paddr from v$session where sid = &sid)查询到oracle会话在服务器上的pid,然后登陆到服务器上,执行kill -9 pid这样就能杀掉进程解锁了。
⑼ 如何查看MySQL数据库的死锁信息
查看MySQL数据库的死锁日志
1. 使用终端或命令提示符登录到MySQL,输入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p解释:xxxx.xxx.xxx是数据库IP地址,username是数据库用户名,输入命令后,会让你输入username对应的密码,就可以登录了
4. 如何分析日志,定位死锁原因看3里面的图,紫色划线部分分析:事务1,等待RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,这个位置的X锁事务2,持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`这个地方的S锁事务2,等待这个地方的X锁理论上这个事务2是可以提交的不会,死锁,但是这个事务日志只打印最后一部分死锁,信息,这里面隐含的条件是,事务1也持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`这个地方的S锁,这样,事务2不能加X锁,同时事务1也不能加X锁,产生死锁。