D'attente pour la table de niveau de verrouillage sur une table MySQL

Depuis quelques jours, à des heures aléatoires mon site est devenu très lent. J'ai commencé à étudier la meilleure que j'ai pu. J'ai vu que le MySQL processus a été à l'aide de 85 à 95% de la mémoire disponible de mon serveur (dois-je mettre à jour mon mémoire aussi?).

J'ai vérifié mon MySQL processus de journal, et j'ai remarqué une énorme liste de requêtes avec:

D'attente pour la table de verrou au niveau de la

Mais je l'avais aussi remarqué, ce que l'ENSEMBLE de ces questions avec "niveau de la table de verrouillage", a seules les requêtes qui avait quelque chose à faire avec ma table appelée users.

J'ai 20 autres tables, avec la constante de requêtes, mais je ne les vois pas sur la liste.. Donc je suppose que le problème est avec la table des utilisateurs?

Je veux savoir comment je peux améliorer la table, et, éventuellement, de supprimer de la table verrou de niveau?

J'ai aussi couru ce:

SHOW VARIABLES LIKE 'query_cache%';

Qui a abouti à ceci:

query_cache_limit
1048576
query_cache_min_res_unit
4096
query_cache_size
33554432
query_cache_type
ON
query_cache_wlock_invalidate
OFF

S'il vous plaît laissez-moi savoir ce que je peux faire pour améliorer ma base de données/mysql.

Ceci est une liste des processus:

   | 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 |

C'est essentiellement ce que tous les verrouillé processus ressemble.

  • Commencer à ajouter des index pour les utilisateurs, en particulier des domaines comme l'utilisateur nom de famille, dept, ID...tout ce qui pourrait souvent être utilisé dans les requêtes.
  • Index? Soin d'élaborer un peu? (Désolé, je suis encore assez nouveau pour MySQL)
InformationsquelleAutor oliverbj | 2014-04-02