1つ:事務:
トランザクションはデータベース管理システムの論理ユニットであり、限られた一連の操作で構成されており、最も有名なのはそのACID4属性です。
Atomicityは、トランザクションに含まれる操作がすべて実行されるか、すべてが実行されないかのいずれかです。
一貫性、データベース内のデータは整合性の制約を満たす必要があります。
分離、データベース内のトランザクションの実行は、他のトランザクションに影響を与えるべきではありません。
耐久性、コミットされたトランザクション(状態)、データベースへの変更などは、データベースに永続的に保存する必要があります。
トランザクションの使用
1)トランザクションの開始時に、2つの記述方法があります。
1)BEGIN; 2)トランザクションを開始します。
2)トランザクションが終了します。2つの状況があります。
1)COMMIT;-トランザクションを確認します 2)ROLLBACK;-トランザクションをロールバックします
テストアナリストの場合、トランザクションの概念は分析の問題にも適用できます。たとえば、SQLステートメントの更新/挿入/削除の実行計画を分析する場合は、トランザクションの概念を使用してデータベースデータをより適切に管理できます。
次のSQLの実行計画を分析したいと思います。
public。 "Department"から削除します。ここで "DepID" = '1';
次に、次のように実行できます。
ベギン; パブリックからの分析削除について説明します。 "Department" where "DepID" = '1';
SQLの削除ステートメントの実行計画は上記で取得されていますが、実際にデータを削除したくない場合は、次のステートメントの実行を続行できます。
ロールバック;
2:ロック
Postgresqlのロックの概念は、ほとんどのリレーショナルデータベースと一致しており、トランザクションでのデータの一貫性の目的を満たすことです。一般に、同時実行性の高いデータベースでは、制御されていない場合、データの読み取りと保存に一貫性がない可能性があります。
1)デッドロック:2つのトランザクションが相互にトランザクションの完了を待機している場合、デッドロックが発生する可能性が非常に高くなります。デッドロックが発生すると、postgresqlはそれらを自動的に検出し、関連するすべてのトランザクションをロールバックして終了します。プログラムがオブジェクトを同じ順序でロックする必要があることを確認すると、デッドロックを効果的に回避できます。
2)次に、ロックタイプの分割は、テーブルレベルのロックと行レベルのロックに分けることができます。最も一般的な2つのロックは、共有ロックと排他ロックです。共有とは、読み取りロックを指します。つまり、テーブルの内容を変更することはできません。このロックは複数のトランザクションに追加できますが、いずれかのトランザクションがロックを解放しない場合、テーブルの内容を変更することはできません。排他はテーブルレベルです。書き込みロックがロックされています。ロックを取得したトランザクションが解放されていない場合、他のトランザクションは読み取りまたは書き込みを行うことができません。もちろん、マルチバージョンメカニズム(MVCC)は後で導入されました。この状況は改善され、アクセス共有/アクセス排他の2つのロックが追加されました。Access Shareに対応するデータベース操作は、通常、select操作ステートメントです。AccessExclusiveに対応するデータベース操作は、通常、alter table / drop table / truncate / reindex / vacuumfullなどです。
リソースの競合やその他の問題をより適切に回避する方法は、次の側面を考慮することで合理的に回避できます。
1)高い同時実行性で一部の共有リソースを処理する場合、このプレッシャーの焦点をリレーショナルデータベースからredisなどのメモリ内NO-SQLデータベースにシフトすることを検討できます。フロントエンドはマルチスレッドや高い同時実行性などのビジネス要件の実現を考慮することができますが、キーバックエンドはredisに付属するネイティブのシングルスレッド処理モードを使用でき、その実行効率は必ずしも悪いわけではありません。
2)すべてのデータベーストランザクションで同じ順序でリソースを使用します。
3)より低い分離レベルを使用してみてください。
また、WeChat公式アカウントをスキャンしてフォローし、パフォーマンス関連のコンテンツをさらに取得することもできます。