[解決済み] MySQL テーブルのテーブルレベルロック待ち
2022-02-14 04:52:04
質問
ここ数日、不定期に私のウェブサイトが非常に遅くなることがあります。私はできる限りの調査を開始しました。私は、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) ;
しかし、制作期間中にそれをしないように気をつけたいものです。 一見すると、userテーブルのID列とusername列で行いたいところです。
関連
-
[解決済み] MySQLにおけるOracleのRowIDに相当する。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] 特定のテーブルの MySQL エンジンタイプを確認するにはどうすればよいですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】FROM句で更新対象のテーブルを指定できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】1052:フィールドリストの列「id」が曖昧である
-
[解決済み】MySQLユーザーDBにパスワードカラムがない - OSXへのMySQLインストール
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
[解決済み] 1030 ストレージエンジンからエラー28が発生しました
-
[解決済み] MySQLを使用したパーセンタイル値の計算
-
[解決済み] 各単語の最初の文字を大文字にする(既存のテーブルの場合
-
[解決済み] エラー 1049 (42000)。不明なデータベース
-
[解決済み] MySQLから最後のN行を選択する
-
[解決済み] エラー1022 - 書き込みできません; テーブルに重複したキーがあります。
-
[解決済み] エラーコード1111。グループ関数の無効な使用