2009-07-07 9 views
4

次の仮定で、このシナリオを考えます。選択(InnoDBは対MyISAMテーブル)

  • データベースが非クリティカルWebアプリケーションのために使用されています。
  • クエリの速度は非常に重要です。
  • 読み取り/書き込みパターンは、およそ> 95%読み取りであり、< 5%書き込みです。
  • データベースは毎日mysqldumpを使用してバックアップされます。
  • トランザクションや高度クラッシュリカバリは不要です。データベースがクラッシュした場合、私は昨晩のmysqldumpをインポートするだけです。このシナリオではこれで十分です。
  • フルテキスト検索は不要です。言った仮定の下で
のMyISAMの

長所:

  • それは(一つの例外を除いて - 下記参照)は非常に高速です。
  • 軽量で、ファイルシステム(.MYD/.MYI/.frm)のデータベース/テーブルと物理ファイルとのマッピングを分かりやすくしています。
  • 簡単バックアップ(mysqldump)。

オールインワン私はMyISAMに大変満足しています。 MyISAMには、上記の仮定の下で1つの大きな欠点があり、それはテーブルレベルのロックです。 UPDATEが頻繁に読み込まれるテーブルに向かって実行されている場合、すべての読み取りはブロックされます。言うまでもなく、これは解決しなければならない大きなパフォーマンス上の問題を引き起こします。

私の質問は以下のとおりです。

  1. のMyISAMから離れて切り替えることなく、テーブルレベルのロックを取り除くためにいくつかの方法がありますか?
  2. InnoDBに切り替える必要がある場合、InnoDBをできるだけMyISAMと同様に動作するように(どのトランザクション、論理ファイル構造なども考えないで)InnoDBを構成するにはどうすればよいですか? InnoDBを「MyISAMと似ていますが、テーブルレベルのロックがない」ように設定するにはどうすればよいですか?
+0

実際のデータベースを使用したことはありますか?たとえば、ポストグル。 – lumpynose

+0

ポストグルを使用することは、少なくともInnoDBと同じくらい多くの変更を意味します。これにより、より多くのバグが発生します。 – MarkR

答えて

1
  1. いいえ、MyISAMはテーブルレベルのロックを意味します。
  2. 「ちょっと好き」にすることはできませんが、「innodb_file_per_table」オプションをオンにすると「もっともっと好き」にすることができます。しかし、InnoDBは依然として重要な情報をシステムレベルのデータファイルに保存します。MyISAMと同じように、ディレクトリ名を変更してデータベースの名前を変更することはできません。
0

実際にmyisamテーブルとinnodbテーブルを使用してパフォーマンスメトリックを取得しましたか?私の経験では、速度の違いは、あなたがinnodbから得るすべてのACIDの利点を考慮すると、それほど多くはありません。テーブルロックだけで速度に影響を与え、innodbが全体的に速くなるでしょう。

また、myisamは挿入時にはるかに高速で、選択時にはそれほど高速ではありません。あなたは時間のわずか5%を挿入しています...数学を行います。

あなたはいつもinnodbを使ってmysqldumpを実行することができますので、あなたのバックアッププロセスは同じです。

0

私はいくつかのプロジェクトが検索のためにミラーDBを使用していることを知っています。検索に最適化される傾向があり、場合によってはオーバーヘッドを分離するために、別のマシンで実行されることもあります。

ここでの唯一の欠点は、同期を維持することが面倒です。あなたの検索テーブルの失効したデータがあまりにも面倒でないなら、それが最良の賭けかもしれません。パフォーマンスに問題がある場合

私のお気に入りの解決策ではありませんが、理論的には非常に簡単です。

0
  1. バックアップの場合、InnoDBはmysqldumpの使用を妨げません。
  2. データベーステーブルとディスク上のファイル間のマッピングを本当に維持する必要がありますか?データベースファイルの手動操作はめったに良い考えではありません。
  3. InnoDBではトランザクションを使う必要はなく、デフォルトでは「自動コミット」モードで動作します(すべてのクエリは自動的にコミットされます)。
  4. "InnoDBの速度が遅い"というのは最近の神話ですが、もちろんあなたの作業負荷によって異なります。

つまり、InnoDBにあなたのアプリケーションのパフォーマンスをベンチマークしようと思っています。移行は非常に簡単なので、私は試してはいけない理由は見当たりません。私にとって、InnoDBは長い間、デフォルトの選択肢です。

関連する問題