【发布时间】:2014-05-13 14:49:07
【问题描述】:
最近几天,我的网站有时变得很慢。我开始尽我所能进行调查。我看到 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 |
这基本上就是所有锁定进程的样子。
【问题讨论】:
-
开始为用户添加索引,特别是用户姓氏、部门、ID等字段......查询中经常使用的任何内容。
-
索引?想详细说明一下吗? (对不起,我对 MySQL 还是很陌生)