最近几天,随机地,我的网站变得非常缓慢。我开始尽力调查。我看到MySQL进程正在使用服务器可用内存的85%-95%(我也应该升级我的内存吗?)。
我检查了我的MySQL进程日志,发现有很多查询,其中包括:
等待表级锁定
但是我还注意到,所有这些带有“表级锁定”的查询都是与表有关的查询users
。
我还有20个其他表,它们具有不变的查询,但是我在列表中没有看到它们。.所以我猜问题出在users表上吗?
我想知道如何改进表,并最终删除表级别的锁?
我也跑了这个:
SHOW VARIABLES LIKE 'query_cache%';
结果是这样的:
query_cache_limit
1048576
query_cache_min_res_unit
4096
query_cache_size
33554432
query_cache_type
ON
query_cache_wlock_invalidate
OFF
请让我知道我可以做些什么来改善我的数据库/ mysql。
这是过程的列表:
| 228 | db_user | localhost | db_db| Query | 5 | Waiting for table level lock | SELECT count(*) FROM users WHERE createtime>'1396411200' OR createtime='1396411200' |
| 229 | db_user | localhost | db_db| Query | 4 | Waiting for table level lock | UPDATE users SET upline_clicks=upline_clicks+'1', upline_earnings=upline_earnings+'0.0000' WHERE use |
| 203 | db_user | localhost | db_db| Query | 6 | Waiting for table level lock | SELECT SUM(cashedout) FROM users |
| 204 | db_user | localhost | db_db| Query | 4 | Waiting for table level lock | UPDATE users SET upline_clicks=upline_clicks+'1', upline_earnings=upline_earnings+'0.0000' WHERE use |
| 205 | db_user | localhost | db_db| Query | 1 | Waiting for table level lock | SELECT * FROM users WHERE id='12055' |
| 206 | db_user | localhost | db_db| Query | 2 | Waiting for table level lock | SELECT * FROM users WHERE id='22530'
| 197 | db_user | localhost | db_db| Query | 3 | Waiting for table level lock | SELECT * FROM `users` WHERE `username` = 'ptc4life123' LIMIT 1 |
| 200 | db_user | localhost | db_db| Query | 3 | Waiting for table level lock | UPDATE users SET upline_clicks=upline_clicks+'1', upline_earnings=upline_earnings+'0.0050' WHERE use |
这基本上就是所有锁定过程的样子。
在较慢的时段之一中,运行以下命令:
show processlist;
这将向您显示正在运行的实际SQL命令,以及在添加索引方面要寻找的位置。如果可能,请发布运行时间最长的SQL。
添加索引如下所示:
ALTER TABLE MYTABLE ADD INDEX idx_columnname (COLUMN_NAME ASC) ;
但是您要小心,不要在生产期间这样做。乍一看,您想对用户表中的ID和username列执行此操作。
这是我的servlet的doPost方法,理论上它在db中添加数据 这里是在db中插入数据的方法 但是,当我尝试使用servlet执行此操作时,出现了以下错误 错误1205(HY000):超出锁定等待超时; 有人知道如何解决?如果我对一个普通的java类做同样的事情,那么一切都很好。
我已经阅读了大约4个级别的隔离: 我想了解每个事务隔离在表上使用的锁 以下是事务隔离中可能出现的三种现象 脏读取-无锁定 不可重复读取-无脏读取作为对提交数据的锁定 幻影读取-锁定sql块(使用select query选择) 我想了解我们在哪里定义这些隔离级别:仅在jdbc/hibernate级别或在DB中定义 PS:我已经浏览了oracle中隔离级别的链接,但是它们看起来很笨拙,而且只针对数据库
本文向大家介绍检查事务列表以等待锁定SAP HANA,包括了检查事务列表以等待锁定SAP HANA的使用技巧和注意事项,需要的朋友参考一下 M_BLOCKED_TRANSACTIONS系统视图用于提供等待锁定的事务列表。 您可以在编辑器中运行以下SQL查询- SAP HANA中M_BLOCKED_TRANSACTIONS系统视图下的详细信息
问题内容: 在Java线程转储中,您可以看到堆栈跟踪中提到的锁。 似乎有三种信息: 1: 2: 3: 1:线程已获得对象0x00002aab329f7fa0的锁。 2&3:似乎是说线程正在等待该对象上的锁可用… 但是2和3有什么区别? 问题答案: 使用内在锁时,您将在线程转储中获得“等待锁”,而使用java.util.concurrent中的锁时,将获得“停放以等待”。考虑以下示例: 随着您将获得
本文向大家介绍MySQL 行锁和表锁的含义及区别详解,包括了MySQL 行锁和表锁的含义及区别详解的使用技巧和注意事项,需要的朋友参考一下 一、前言 对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答。 MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支