最近幾天,隨機時間我的網站變得非常緩慢。我開始調查我能做的最好的事情。我看到MySQL進程正在使用我的服務器的可用內存的85-95%(我是否應該升級內存?)。等待MySQL表中的表級鎖
我檢查了我的MySQL進程的日誌,我注意到一個巨大的與查詢列表:
等待表級鎖
但我也注意到,是什麼,所有這些查詢與「表級鎖定」,只是與我的表有關的查詢,稱爲users
。
我有20個其他表,與持續查詢,但我沒有看到他們的名單..所以我想問題是與用戶表?
我想知道我該如何改進表格,並最終刪除表級鎖?
我也跑了這一點:
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等字段......經常在查詢中使用的任何內容。 – smoore4
索引?謹慎地闡述一下? (對不起,我對MySQL還是比較新的) – oliverbj