質問

MySQLとのトランザクションが必要になりそうで、InnoDB / MyISAMの混合テーブルを使用してMysqlでトランザクションを管理する方法がわからないように見えます。

なぜテーブルを一緒にしたいのかと疑問に思うかもしれません...答えはパフォーマンスです。多くの開発者が気づいているように、InnoDBテーブルは一般にパフォーマンスが悪いですが、代わりに高い分離レベルなどを与えます...

この問題に関して何かアドバイスはありますか?

役に立ちましたか?

解決

MyISAMとInnoDBのパフォーマンスの違いを過大評価していると思います。 MyISAMは、データウェアハウジングの状況(フルテーブルスキャンレポートなど)では高速ですが、InnoDBは実際には多くの場合、通常のOLTPクエリで高速になります。

InnoDBはノブが多いため調整が困難ですが、適切に調整されたInnoDBシステムは、ロックとI / Oパターンが優れているため、多くの場合MyISAMよりもスループットが高くなります。

他のヒント

MyISAMテーブルにトランザクションを保持できないことを考えると、実際の問題が何であるかわかりません。トランザクションが必要なデータはInnoDBテーブルに存在する必要があり、使用しているアクセスライブラリを使用して、または手動のSQLコマンドでトランザクションを管理します。

正確に1つのエンジンを使用することにより、パフォーマンスが確実に向上します。

1つのエンジン用に調整されたサーバーは、他のエンジン用に調整されません-どちらも、かなりの量のRAMを専用に割り当てる必要があるため、両方に最適な量を与えることはできません。

(明らかに64ビットですが、まだ比較的小さい)データベースサーバーに8GのRAMがあるとします。その約3/4をinnodbページキャッシュに割り当てることをお勧めします。または、MyISAMを使用している場合、その約半分をkey_bufferにしたい場合があります。両方を行うことはできません。

エンジンを選択して、排他的に使用します。パフォーマンスの問題を回避する方法があります-そのほとんどは簡単ではありません(つまり、データ構造またはアプリケーションの再設計が必要です)。

簡単な答えは、MyISAMにはトランザクションサポートがないということです。トランザクションを開始し、一部のInnoDBテーブルのデータを追加または変更し、MyISAMテーブルのデータを追加または変更してからロールバックする必要がある場合、MyISAMの変更を削除することはできません。そのような混合エンジンをサポートするには、MyISAMに保存されているデータの変更が「外部」で発生することをアプリケーションで認識する必要があります。トランザクションの。

一部のプロセスでトランザクションが必要な場合は、トランザクション可能である必要があるデータを分離し、そのデータをInnoDBにすべて配置します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top