ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

等待MySQL表上的表级别锁定

2019-11-21 23:16:03  阅读:226  来源: 互联网

标签:innodb myisam sql mysql


最近几天,随机地,我的网站变得非常慢.我开始尽力调查.我看到MySQL进程正在使用服务器可用内存的85%-95%(我也应该升级内存吗?).

我检查了我的MySQL进程日志,发现有很多查询,其中包括:

Waiting for table level lock

但是我还注意到,所有这些带有“表级锁定”的查询都是与我的表有关的查询,即用户.

我还有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列执行此操作.

标签:innodb,myisam,sql,mysql
来源: https://codeday.me/bug/20191121/2055348.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有