8

InnoDB テーブルを使用して MySQL データベース上に構築されたシステムを継承しました。システムには、高負荷時に現れるバグがあります。制御された環境でバグを確認することを期待して、システムをロードするための jmeter テストをいくつか作成しました。ただし、システムに正しくストレスを与えていないため、バグは表示されません。現在の理論では、頻繁にロックされたテーブルがロールバックを引き起こし、ユーザーのデータが奇妙な状態のままになっているというものです。これは、トランザクションが正しく構造化されていないことを意味している可能性が高く、それを見つけて修正したいのですが、最初に問題を見つける必要があります。

データベースでさまざまな制御された「テーブルロック負荷」を作成できれば、システム全体でシミュレートされたユーザーを実行して、バグを強制的に発生させたり、理論が間違っていることを証明したりできると思いますが、そのような作成方法はわかりません事。これを行う最善の方法について誰かが考えを持っていますか? この時点では、まずい最初のバージョンがどのようなものになるかさえわかりません。ありがとう!

4

1 に答える 1

5

テーブル内の行のロック状態を具体的に探している場合(テーブル自体にその場で変更を加えていない限り、これが意味していると思います)。これを実装するには、2番目のスクリプトで一連の行に対してトランザクションを開始し、トランザクションをロールバックまたはコミットする前に一定期間一時停止します。

たとえば、次のようなテーブル構造があるとします。

CREATE TABLE `allkindsofvalues` (
  `value1` int(11) NOT NULL,
  `value2` int(11) NOT NULL,
  `irrelevant_value3` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

MySQLプロンプトを開き、トランザクションを開始します。

BEGIN;

UPDATE allkindsofvalues SET irrelevant_value3 = '32143234232';

次に、アプリケーションを起動します。この時点で、これらの行を使用しようとすると、開始されたトランザクションが完了するのを待ちます。

MySQLプロンプトでトランザクションをコミットまたはロールバックすると、通常どおり処理が続行されますが、その時点まで、行はロックされた状態になり、アクセスできなくなります。それはあなたが複製しようとしている状態であるように聞こえます。

于 2012-11-03T05:00:11.443 に答える