SQLを使用すると、データベース全体を完全にハングアップさせることができます。

初めて技術的な乾物と業界情報を入手してください!

SQLを使用すると、データベース全体を完全にハングアップさせることができます。

私たちのeコマースシステムには、それを終わらせることができないほど多くの要求があります。同時に、技術的な問題に直面することもよくあります。たとえば、今回はSQLステートメントによってデータベース全体がハングアップしました。

最近のパフォーマンスの急増により、システム内のテーブルが適切に設計されておらず、大量の冗長データが発生していました。したがって、いくつかの議論の後、冗長データの一部を移動したいと思います。これは、前に言ったこととは少し異なります。以前はデータベース全体を移行していましたが、現在は1つのテーブルを移行しています。

単一テーブルの読み取り専用の場合、テーブルロック構文ロックテーブル…読み取り/書き込み…を使用します。具体的な使用法は次のとおりです。

SQLを使用すると、データベース全体を完全にハングアップさせることができます。

上記のステートメントを使用した後、操作が完了した後、ロック解除テーブルを介してロックを解除するか、クライアントが切断されたときに自動的に解放することができます。

SQLを使用すると、データベース全体を完全にハングアップさせることができます。

ロックテーブルxttblogreadおよびwritxttblog2文法を使用する場合、現在のセッションはxttblogテーブルのみを読み取ることができ、書き込みはできないことに注意してください。他のセッションでは、xttblogテーブルの書き込み、xttblog2テーブルの読み取りおよび書き込みはできません。現在のセッションは他のテーブルの読み取りまたは書き込みを行うことができず、ロックを解除する前は、現在のセッションはxttblogの読み取りとxttblog2の読み取りおよび書き込みのみを行うことができます。

このようなBTの制限により、進行中のトランザクションがブロックされました。トランザクションにはタイムアウトメカニズムがあるため、ライトブロッキングは悪くありません。

ただし、スレッドプール構成には大きなバグがあり、タイムアウト後に再試行します。現在のテーブルがロックされ、読み取り専用が制限されると、すべての追加、削除、および変更要求がブロックされます。その結果、スレッドは継続的にブロックされ、再試行が行われます。

元々、このテーブル用に設計された冗長データはより多く、操作はより頻繁です。さて、今、多くのスレッドがブロックされています。そのため、プロダクションライブラリ全体がダウンしました。

ですから、DBAを持っていることは大きな幸せである場合があります。営業時間のピーク時に本番ライブラリを操作することを忘れないでください。真夜中にデータを移行するときが来ました。

また、このような問題が発生した場合は、最初にビジネスコードを変更してください。ソースからの制御。常にデータ移行について考えるだけではありません。このメカニズムを再試行することには長所と短所があるため、合理的に使用してください。

最後に、前の記事を組み合わせて、グローバルロックフラッシュテーブルと読み取りロック(FTWRL)とロックテーブルtable_name読み取り/書き込みロックの違いを要約します。

  • 読み取りロックでテーブルをフラッシュ:グローバル読み取りロック、ロック解除:テーブルのロックを解除します。

  • テーブルtable_nameの読み取り/書き込みのロック:テーブルロックの指定、ロック解除:テーブルのロック解除table_name /テーブルのロック解除table_namesは一度に1つのロックしか保持できません。

  • テーブルのロックテーブルの読み取り:DMLでロックされたテーブルを読み取ることができるセッションはありません。

  • ロックテーブルtable_namewrite:ロックを保持しているセッションを除いて、どのセッションも書き込みロックされたテーブルにアクセスできません。

セッションは、それ自体のロックを取得および解放することしかできず、他のセッションのロックを取得することも、他のセッションによって保持されているロックを解放することもできません。ロックを保持しているセッションは、ロックされたテーブルを読み取ることはできますが、書き込みはできません。また、ロックされていないテーブルの読み取りまたは書き込みもできません。複数のセッションが同時に同じテーブルのREADロックを取得できます。現在のセッションは、明示的にREADロックを取得したテーブルのみを読み取ることができ、このテーブルを更新することも、READロックを取得していない他のテーブルを読み取って更新することもできません。他のセッションは、現在のセッションでREADロックを明示的に取得していないテーブルを読み取ることができます。もちろん、READロックを取得したテーブルを読み取ることもできます。ただし、他のセッションでREADロックを取得したテーブルの更新はブロックされ、他のテーブルは正常に更新できます。

インターネット上のコードはコピーに適しています、そしてデモをするのは非常に滑りやすく、そしてそれが生産されているときそれは自動車事故です。主な理由は、理解が一方的すぎ、理解が深くなく、転覆しやすいためです。

おすすめ

転載: blog.51cto.com/15127565/2666216