0

LinuxWebサーバー上の一部のデータベースで非常に奇妙なパフォーマンスの問題が発生します。初め:

  • 問題はさまざまなINNODBテーブルで発生します
  • テーブル内の10〜15000エントリのみ
  • 正しく索引付けされている
  • 1日に1回か2回だけ発生します

次のクエリは非常に遅いです(時々):

UPDATE t_contentlocks 
SET  lastaccess = NOW(),  has_write_access = '1'  
WHERE id = '10'

フィールド「id」はプライマリ(整数)であり、テーブルには約20のエントリがあります。このようなクエリを処理するには、どのように30秒かかるのでしょうか。現時点では、他のクエリはありませんでした。mysqlサーバーがある種の休止状態になり、再びウェイクアップする時間が必要になっているように見えます。通常、このクエリは0.00001秒未満かかります。

誰かが同じ問題/それに対する修正を持っていますか?

ありがとう!

4

2 に答える 2

0

queryを実行するid = '10'と、id は int になります。クエリが実行されるたびに、ID は varchar に変換され、indez はユーザーではなくなります。したがって、次のことを行う方がはるかに高速です。

WHERE id = 10

これで、インデックスはユーザーになります。30 秒の問題が解決するかどうかはわかりません。

于 2013-02-04T10:12:15.643 に答える
0

ピアの回答とは別に、クエリのプロファイリングを確認してから、クエリの実行に時間がかかる場所を調べて適切な決定を下すこともできます。

 SET PROFILING=1;
UPDATE t_contentlocks 
SET  lastaccess = NOW(),  has_write_access = '1'  
WHERE id = '10';
show profile for QUERY 1;
于 2013-02-04T10:15:23.037 に答える