データベースのロックモジュール
MyISAMテーブルとInnoDBのロックについての違いについてはどうですか?
- MyISAMテーブルは、テーブル・レベルのロッキングのデフォルトの使用である、行レベルのロックが(サポートされていない行のみが操作されているロックされたデータベースの動作時)
- InnoDBは(行レベルのロックとデフォルトであり、また、テーブルレベルのロックをサポートするデータベースの操作にテーブル全体をロックします)
- MyISAMテーブルには、トランザクションをサポートしていません。
- InnoDBはトランザクションをサポート
テーブルレベルのロックインデックスデータベース操作を服用していないときに使用されます
MyISAMテーブル
このエンジンでは、データの選択操作は、テーブルのテーブルレベルの読み取りロックを追加する際にテーブルロックを追加するためにデフォルト設定されます。更新、挿入、および削除の操作が自動的に表レベルの書き込みロックを追加する時期。
該当シーン
- 行数が頻繁に完全なテーブル数文を実行し、MyISAMテーブルでは、テーブル全体を保持する変数があります
- データ周波数への追加や削除は、クエリ非常に頻繁に、(追加や削除は、操作ロックテーブルを伴うように)高くありません
- トランザクション・シーンありません
InnoDBの
このエンジンでは、デフォルトの行ロックで使用され、そのテーブル・レベルのロッキングに共有および排他的行レベルのロックが同じであるが、作用の異なる範囲、唯一の行の行レベルのロッキング効果がロックされています。
該当シーン
- データCRUDはかなり頻繁にあり
- 高い信頼性要件、必要なサポートサービス
データベースのロック分類
ロックを読みます
ロックを読むとしても知られている共有ロック、他のセッションをブロックせずにデータベースへの1つのセッションは、読み出し動作を読んでいるので、しかし、書き込み操作他のセッションをブロックします。
戻るセレクト動作時のプラスの更新のための共有ロックを追加する排他ロックプラス共有モードでロックを追加します
ロックを書きます
ロックの別名書く排他ロック書き込みロックが読み取りおよび書き込み操作の他のすべてのセッションをブロックします後、セッションがデータベースに追加されたときに、。
追加の読み取り/書き込みロック
テーブルをロックTABLE_NAME読み取り/書き込み。
ロック解除テーブルを削除します。
ページレベルのロック
テーブルと行レベルロックとの間に介在し、ロックは、データ内の操作データに隣接して配置されます
意図的ロック
トランザクションロックされたテーブルの行、トランザクションBは、あなたがテーブル全体に書き込みロックを適用する場合と、アプリケーションは、それがBをできるようになる成功し、Aが発生した場合、これは、行ロックが追加されたトランザクションデータ行からです競合。トランザクションBロックは電流分布テーブルデータベーステーブルを決定する必要がある場合したがって、ラインまたは他のトランザクション・テーブル・ロックを介して適用されていない、それは次のように決定する必要があります。
1:テーブルは、テーブルロックテーブルで他のトランザクションによって使用されているかどうかを判別
2:判定テーブルの行ロックでロックされている任意の行があります。
この場合、テーブル全体について決定される必要があるが、ステップ2で記録され、効率が比較的低いです。次に、意図的ロックの存在下でロックする意思があると、ロック前にテーブル上の任意のトランザクションまたは行が最初の意図ロックを取得する必要があり、意図的ロックと、上記検査工程は次のようになります。
1:変化なし
2:意図的ロックテーブルを取得
ロック操作を適用する意思が完全なデータベースでトランザクションがロックされていたとき、データベースは自動的に意図的テーブルロックのために適用されます、我々はコードを使用してプログラマを申請する必要はありません。
ペシミスティック・ロック
私たちは、データベース内のデータの一部にしたい場合は、同じ時間を避けるために変更することができますが、他の人々によって変更することが、最善の方法は、同時防ぐためにロックされたデータを向けることです。これは、データを変更する前にロックし、次に方法はペシミスティック並行性制御と呼ばれている変更する、データベースのロック機構を意味します。
オプティミスティック・ロック
ロックは悲観的ロックの点では比較的楽観的である場合には、楽観的ロックは、データが一般的に競合が発生するので、見つかった場合は、競合を検出するための正式な紛争やないデータの前に更新されたデータを提出しないことを前提とし、リターンユーザーが何をすべきかを決定することができ、ユーザにエラーメッセージ、。
ACIDトランザクション
アトミック(原子性):トランザクションを意味するが、いずれかのトランザクションに作業操作の不可分単位で発生し又は発生しません
一貫性(一貫性):トランザクションは一貫していなければならないの前と後に、それはエネルギー保存則と比較することができ、データの整合性
分離(単離):操作は同時複数のトランザクション間の分離のために、他のトランザクションによって妨害されていない、各ユーザのトランザクションのデータベースがオープン、複数のユーザデータベースへの同時アクセスを指し
(耐久性)永続:トランザクションがコミットされると、彼は永続的なデータベース内のデータを変更することを意味し、その後、データベース障害は、それらに影響を与えてはならない場合でも、
トランザクション分離レベルの下で、すべてのレベルでの同時アクセスの問題
ビューの会話トランザクション分離レベルselect @@tx_isolation
設定セッションの分離レベルset session transaction isolation level read uncommitted
セキュリティが高い、トランザクション分離レベルが高いほど、より深刻なシリアル化された実行は、同時実行データベースを減らします。OracleのデフォルトはREAD-COMMITTEDされ、MySQLのデフォルトはREPEATABLE-READです
同時アクセスの問題トランザクションによって引き起こされるとどのように回避します
データベーストランザクション分離レベルのすべての側面について1.更新損失が-MySQL再び回避することができます
別のトランザクションの更新によってカバーされたトランザクションを更新、現在主流のデータベースロックが不足している更新を避けるためのイニシアチブをとるだろう。
2.汚れを避けるために、より多くの-READ-COMMITTEDトランザクション分離レベルを読みます
トランザクションは、別のコミットされていないトランザクションで更新データを読み込み
3.非反復可能読み取りより-REPEATABLE-READトランザクション分離レベルを回避することができます
結果の不整合を返すために、複数の読み取り操作
4.ファントム・リード・トランザクションの分離レベルを回避することができる-SERIALIZALE
リード線トランザクションには、複数の検索条件に一致する結果の欠失または挿入によって変更トランザクションBは、トランザクションを設定します
ファントム読み取りを回避する方法で、InnoDBの反復可能読み取り分離レベル
外観:読んでスナップショット(非ブロッキング読み取り) - 擬似MVCC
現在の読書
CRUD文のプラスロック:、...共有モードでロックを選択する選択...更新のため、更新、削除、挿入
スナップショット・リード(SERIALIZALEで分離レベル、それを確立することができます)
ロック解除された非ブロック読み込み、選択、同時実行、低オーバーヘッドの能力を高める、データの読み出しができない場合があり、現在のバージョン
内部:ネクストキーロック(ラインロックロック+ギャップ)
主キー索引または一意索引がギャップでそれをロックします
- すべてのヒットは、あなたがギャップロックを使用しない条件は、ロックはレコードのみを追加する場合
- 一部または全部がヒットを欠場条件ならば、ロックがギャップを追加します