デッドロックとは?データベースのデッドロックの意味や仕組み・原因・回避方法を解説!

せお丸のプログラマー養成講座【サイバーフリークス株式会社】
24 Jun 202012:18

Summary

TLDRこの動画ではデータベースにおけるデッドロック問題について解説しています。デッドロックは複数のユーザーが互いのロックを待機し、結果としてロックが解放されない状態を指し、これは非常に危険な状態につながります。デッドロックが発生した場合の解決方法と予防策について説明し、更新順序を守ることやアドバイザリーロックの使用を提案しています。また、ギャップロックという現象についても解説しており、これは存在しないレコードに対するロックが隙間の行にかかってしまう問題です。デッドロックやギャップロックを回避するためのテクニックを学ぶことで、データベースの運用において時間を無駄にすることを避けることができます。

Takeaways

  • 🔒 デッドロックとは、複数のユーザーがお互いのロックを解放待ちになり、結果的にロックが解放されなくなってしまう状態を指します。
  • 😨 データベースのトランザクションをうかつに扱うとデッドロックに陥り、データの整合性に重大な影響を与える恐ろしい呪いにかかる可能性がある。
  • 👀 セレクト4アップデートやアドバイザリーロックなどの知識が必要で、更新順序を守ることでデッドロックを回避することができる。
  • 📝 銀行口座の例を使ってデッドロックが発生する状況を説明しており、同時に処理されるトランザクションが互いにロックをかけ合ってしまい、デッドロックが発生する過程が解説されている。
  • 🛑 デッドロックが発生した場合、解決する方法はなく、タイムアウトエラーが発生するまで待つか手動でトランザクションを終了させる必要がある。
  • 🔄 更新する順番を守ることでデッドロックを予防できる。レコードの更新順序を決めておくと、同時進行のプロセスが競合しない。
  • 🚫 セレクト4アップデートの代わりにアドバイザリーロックを使用することで、デッドロックを回避できる。アドバイザリーロックは同時進行のプロセスがロックを取得できないようにする。
  • 🔄 ギャップロックは、存在しないレコードに対するロック要求が、その隙間にあるレコードにロックがかかってしまう現象であり、注意が必要。
  • 🚧 ギャップロックはデッドロックの発生源になる可能性がある。例えば、存在しないIDに対してセレクト4アップデートを実行すると、他のプロセスが同じ範囲にロックをかけることでデッドロックが発生する。
  • ⚠️ データがなければインサートするという処理でセレクト4アップデートを使うと、ギャップロックを引き起こしデッドロックが発生する可能性があるため、アドバイザリーロックを使うことが推奨されている。

Q & A

  • デッドロックとはどのような問題ですか?

    -デッドロックは、複数のユーザーがお互いのロックを解放されるのを待ち合わせ、結果としてロックが永久に解放されない状態を指します。

  • デッドロックが発生する状況を例に説明してください。

    -例えば、AさんがBさんの口座に振り込む一方で、BさんもAさんの口座に振り込む処理が同時に行われると、お互いのロックを待ち合わせてデッドロックが発生します。

  • デッドロックが発生した場合、どのように対処すればよいですか?

    -デッドロックが発生した場合、通常はロックを終了させるしかないため、タイムアウトエラーが発生するまで待つか、手動でトランザクションを終了させる必要があります。

  • デッドロックを回避するためにはどのような方法がありますか?

    -デッドロックを回避するためには、更新する順番を守る、レコードの更新順やテーブルの更新順をルールに従って守ることで回避できます。

  • セレクト4アップデートとは何ですか?

    -セレクト4アップデートは、データベースで行われるとき、特定のレコードをロックして更新を行う操作のことで、デッドロックの原因となることがあります。

  • アドバイザリーロックとは何で、デッドロックを回避するためにどのように使いますか?

    -アドバイザリーロックは、名前に対してロックをかけることで、同時に2つのプロセスが走ることがないようにするロック方法です。セレクト4アップデートの代わりに使用することでデッドロックを回避できます。

  • ギャップロックとはどのような現象ですか?

    -ギャップロックは、存在しないレコードに対してロックをかけようとすると、その隙間の行にロックがかかってしまう現象です。

  • ギャップロックが発生する状況を例に説明してください。

    -例えば、IDが5番、6番、10番のレコードのみ存在する状況で、7番の存在しないIDに対してセレクト4アップデートをかけると、5番と6番の間、6番と10番の間の隙間にロックがかかるためギャップロックが発生します。

  • ギャップロックを避けるためにはどのような方法がありますか?

    -ギャップロックを避けるためには、アドバイザリーロックを使用するなどの方法があります。アドバイザリーロックではギャップロックが発生しないためです。

  • データがなければインサートする処理でセレクト4アップデートを使用するとどうなりますか?

    -データがなければインサートする処理でセレクト4アップデートを使用すると、ギャップロックが発生し、複数のプロセスがロックを取得してデッドロックに陥る可能性があります。

  • デッドロックやギャップロックを避けるためには、どのようなアプローチが推奨されますか?

    -デッドロックやギャップロックを避けるためには、更新順序を明確にし、アドバイザリーロックを使用するなどの方法が推奨されます。また、データがなければインサートする処理ではセレクト4アップデートの代わりにアドバイザリーロックを使用することが重要です。

Outlines

00:00

🔒 デッドロックの解説と解決方法

セヨ丸がデッドロックとその問題点、発生原因、解決方法について解説しています。デッドロックは複数のユーザーが互いのロックを待機して解放されない状態を指し、銀行口座の振込例を使って説明されています。デッドロックが発生した場合は、ロックを終了させるしかないとされ、予防策として更新順序の遵守やアドバイザリーロックの使用が提案されています。

05:03

😨 ギャップロックの危険性と対策

ギャップロックは存在しないレコードに対するロックが原因で発生し、隙間の行にロックがかかってしまう現象です。具体的な例を通じてギャップロックの動作と落とし穴について説明されています。ギャップロックは他人のセレクト4アップデートを許してしまうため、デッドロックのリスクがあります。アドバイザリーロックの使用が推奨され、前回の動画で詳細が解説されている旨も紹介されています。

10:05

⚠️ デッドロックとギャップロックの予防と解決

デッドロックが発生した場合の対処法として、タイムアウトエラーで終了することを説明し、予防策として更新順序のルールを守ることやアドバイザリーロックの使用が提案されています。ギャップロックについては、アドバイザリーロックを使用することで回避可能で、データがなければインサートする際に注意するようアドバイスされています。また、この動画の理解が重要であることと、感想や評価を共有するよう呼びかけています。

Mindmap

Keywords

💡デッドロック

デッドロックとは、複数のユーザーまたはプロセスが互いに相手のロックを解放するのを待機することで、システム全体が停止する状態を指します。このビデオでは、データベースにおけるデッドロックの概念が説明されており、銀行口座の例を使ってデッドロックが発生する状況が具体化されています。

💡トランザクション

トランザクションは、データベースにおける一連の操作の集合で、これらの操作はすべて成功するか、または失敗することがあり、一貫性を保ちます。ビデオではトランザクション中に発生するデッドロックについて解説しており、それがデータベースの整合性に与える影響についても触れられています。

💡ロック

データベースにおけるロックは、ある操作が特定のデータにアクセスし、変更する際に他の操作が同じデータにアクセスできないようにする仕組みです。ビデオでは、ロックがデッドロックの原因となるプロセスを説明しており、ロックの取得と解放の順序がデッドロック回避に重要な役割を果たすことが強調されています。

💡セレクト4アップデート

セレクト4アップデートは、データベースのレコードを更新するためのSQL文であり、そのレコードが存在すれば更新を行い、存在しなければエラーを返します。ビデオでは、このコマンドがデッドロックやギャップロックの原因になる可能性があると指摘されています。

💡アドバイザリーロック

アドバイザリーロックは、データベースにおけるロックの一形態で、あるレコードに対するアクセスを他のプロセスに許可しないことを示しますが、強制力はなく、他のプロセスが無視することも可能で、デッドロックを回避するために使用されることがあります。ビデオでは、アドバイザリーロックを使用することでデッドロックを回避する方法が紹介されています。

💡ギャップロック

ギャップロックは、データベースにおいて存在しないレコードに対するロックを要求した際に、そのレコードの前後にあるレコードにロックがかかってしまう現象です。ビデオでは、ギャップロックがデッドロックの発生につながることがあると警告しており、そのリスクについて解説しています。

💡インサート

インサートは、データベースに新しいレコードを追加するためのSQLコマンドです。ビデオでは、インサートがデッドロックの原因になる状況として触れられており、データが存在しない場合にインサートする際に注意する必要があると強調されています。

💡タイムアウトエラー

タイムアウトエラーは、データベース操作が一定時間以上実行されていなければ自動的に中断されるエラーです。ビデオでは、デッドロックが発生した場合にタイムアウトエラーが発生し、システムが自動的に操作を終了する可能性があると説明されています。

💡更新順序

更新順序とは、データベースのレコードやテーブルを更新する際に、どの順序で更新を行うかというルールです。ビデオでは、デッドロックを回避するために更新順序を守ることが重要であると強調されており、アルファベット順などの具体的な例が紹介されています。

💡レコードの更新

レコードの更新とは、データベース内のレコードに対して変更を加える操作です。ビデオでは、レコード更新時に発生するデッドロックやギャップロックのリスクについて解説されており、適切なロック戦略を用いてこれらの問題を回避することが示唆されています。

Highlights

データベースのデッドロック問題について解説。トランザクションを誤って使用するとデッドロックに陥り、ロックが解放されない恐ろしい状態に陥ることがある。

デッドロックの原因と解決方法を説明。なぜデッドロックが発生し、どのようにして解決できるかを解説することで、問題をスッキリ理解できるようになる。

セレクト4アップデートやアドバイザリーロックの知識が必要。前回の動画で解説した内容を理解することで、デッドロックの回避方法をより深く理解できる。

デッドロックとは、複数のユーザーがお互いのロックを解放するのを待って、最終的にロックが解放されない状態を指す。

銀行口座の例を使ってデッドロックの発生過程を説明。AさんとBさんが同時に振込を行う場合のデッドロックの例を通じて、問題を具体的に理解する。

デッドロックが発生した場合の解決策として、ロックを終了させる方法を提案。放置するとタイムアウトエラーが発生するため、手動での終了が推奨される。

デッドロックを回避するための方法として、更新する順番を守ることを提案。レコードの更新順序を決めることでデッドロックを回避できる。

セレクト4アップデートではなく、アドバイザリーロックを使用することでデッドロックを回避できる。アドバイザリーロックの使用方法とその利点を解説。

ギャップロックの概念とその発生条件を説明。存在しないレコードに対してロックをかけると、隙間の行にロックがかかってしまうことを解説。

ギャップロックのリスクを解説。他人のセレクト4アップデートを許してしまう性質があるため、デッドロックのリスクがある。

データがなければインサートする処理でセレクト4アップデートを使用しないように警告。そのような使用はデッドロックの原因になる。

アドバイザリーロックの利点を強調。ギャップロックが発生しないため、デッドロックを回避するのに適した方法であることを説明。

デッドロックの予防策として、レコードの更新順序やテーブルの更新順番をルールに従って守ることを提案。

デッドロックとギャップロックの違いと対策を比較。セレクト4アップデートとアドバイザリーロックの使い分けを解説。

デッドロックのリスクとデッドロックを回避するための重要なポイントを再確認。データベース運用における注意点を示す。

動画の評価や共有、コメント欄への書き込みを促す。視聴者が動画を活用し、理解を深めるためのエンゲージメントを促進する。

Transcripts

play00:00

セヨ丸です今日はデータベースの

play00:02

デッドロックという問題について解説し

play00:05

ます

play00:06

これを知らずにうかつにトランザクション

play00:08

を張っているとロックが aa に解放さ

play00:10

れないという恐ろしい呪いにかかって

play00:12

しまいますその動画を見ることでデッド

play00:15

ロックとはどういう問題なのかなぜ起きて

play00:19

しまうのか阿蘇市てどうすれば解決できる

play00:21

のか

play00:22

このあたりがスッキリわかるようになり

play00:24

ますので最後まで動画をご覧下さい

play00:27

なお今回の内容はセレクト4アップデート

play00:29

やアドバイザリーロックの知識が必要に

play00:31

なります

play00:32

この意味が分からないという方は前回の

play00:34

動画で解説していますのでまずはそちらの

play00:36

動画をご覧下さい動画の url は概要

play00:39

欄に貼っておきますえっ

play00:42

レッドロックとは複数のユーザーがお互い

play00:45

のロック解放されるのを待って a に

play00:48

ロックが解放されない状態のことを言い

play00:51

ます

play00:52

例えば a さんの銀行口座に10万円が

play00:55

入っています

play00:56

そして b さんの銀行口座にも10万円

play00:59

が入っていますここで a さんが b

play01:02

さんの高座に対して振込

play01:05

そして b さんも a さんの高座に

play01:08

対してお金を振り込みというのを同時に

play01:11

処理をしたとします

play01:13

すると何が起きるのでしょうがまずは a

play01:15

さんが b さんに振り込むために自分の

play01:18

口座にロックをかけてお金を引き落とし

play01:21

ますそれと同時に b さん側も a さん

play01:24

に対して振込を行うために自分の口座に

play01:27

ロックをかけてお金を引き落としますこれ

play01:30

で a さんも b さんもお互い自分の

play01:33

口座にロックをかけている状態です次に a

play01:36

さんは d 3に対して振り込みを行え

play01:39

ます振り込みを行うので b さんの口座

play01:43

の残高が増えるためのアップレイド文を

play01:45

実行します

play01:47

ところが b さんはすでに自分の口座に

play01:49

対してロックをかけてしまっているので

play01:52

このロックが解放されるまでこちらの処理

play01:55

は待たされることになります b さんも

play01:58

同様に a さんに対して振り込みを行う

play02:00

落とします

play02:02

a さんの口座残高をアップデートしよう

play02:04

としますがこちらの a さんの講座は a

play02:07

さんが先程自分の構造をロックしているの

play02:10

でこの a さんのロックの解放待ちと

play02:13

なりますこのようにこちらの a さんの

play02:15

振り込み処理は b さんのロックの解放

play02:17

を待っている

play02:19

b さんの振り込み処理も a さんの

play02:21

ロックの解放を待っているとこのようにお

play02:24

互いのロックの解放町がクロスしてしまっ

play02:27

て a にロックが解放されない状態

play02:30

これをデッドロックと呼びます

play02:33

それでは deadlock の回避方法

play02:35

と解消方法について解説していきます

play02:39

まずは解消方法について解説しますデッド

play02:42

ロックが起きてしまったらどうすればいい

play02:44

のでしょうかこの場合はもうどうしようも

play02:47

ないのでロックを終了するしかありません

play02:50

そのまま放置していればデータベースの

play02:52

タイムアウトエラー

play02:53

いうのを発生しますのでいずれは勝手に

play02:55

終了しますでは次にデッドロックの回避

play02:59

方法

play03:00

予防するためにはどうしたらいいのかと

play03:02

いう話をしていきますテッドロックを予防

play03:04

するためには更新する順番を守るようにし

play03:08

ましょう

play03:09

例えばレコードの更新順を守るようにし

play03:11

ましょう

play03:12

このレコードの更新順とはどういうことか

play03:15

というとたとえば先ほどの例で言うと

play03:18

ロックをかけるときはアルファベットの

play03:20

若い順にロックをかけましょうという

play03:23

ルールにしたとしますすると二人の処理が

play03:25

同時に走ってもアルファベットの若い順に

play03:29

ロックをかけるので a さんの方を先に

play03:31

ロックに欠けるというルールになります

play03:34

ですので a さんは初めに自分の方に

play03:36

ロックをかけます一方で同時に処理が走っ

play03:40

たとしても b さんはまず a さんの

play03:42

方にロックをかけなければいけませんここ

play03:44

で同じで行動に対してセレクト4

play03:46

アップデートでロックのとリアになるので

play03:49

ロックが取得できるのはどちらか一方と

play03:51

いうことになります

play03:53

これによってデッドロックを回避すること

play03:55

ができます

play03:56

今回は例としてアルファベットの若い順と

play03:59

いうルールでロックをかけるルールにし

play04:00

ましたが実際には id の若い順などが

play04:04

現実的だと思いますこれがレコードの更新

play04:07

順を考慮しましょうねという話です同様に

play04:10

テーブルを更新する順番にお気を付け

play04:13

ましょう複数のテーブルに対して更新する

play04:16

場合にどの順番に行進していくかという

play04:19

ことを気をつけないとデッドロックが発生

play04:21

する可能性があります

play04:23

もう一つのデッドロックの解決策としては

play04:25

セレクト4アップデートを使わずに

play04:27

アドバイザリーロックを使うという方法

play04:30

です

play04:31

前回の動画でも解説しましたが

play04:33

アドバイザリーロックというのは名前に

play04:36

対してロックをかけにいくロック方法です

play04:38

ので同時に2つのプロセスが走るという

play04:41

ことがありえませんですので確実にテッド

play04:44

ロックを排除することができますこの

play04:46

アドバイザリーロックについて解説して

play04:48

いる前回の動画は概要欄に貼っておくので

play04:51

で復習してみてください

play04:56

次にギャップロックについて解説します

play04:59

ギャップロックというのは存在しないで

play05:02

コードに対してロックをかけようとすると

play05:06

隙間の行にロックがかかってしまうこと

play05:08

です

play05:09

それでは具体的にどういうことかっていう

play05:11

のを説明していきます

play05:12

ここに id が5番6番

play05:16

そして間がなくて10番

play05:19

この3つのレコードが存在していたとし

play05:21

ます

play05:22

5番の手前の1234のレコードは存在し

play05:25

ていません

play05:26

そして5番6番が存在していて

play05:29

789のレコードはまた存在していません

play05:32

そして10番が存在していて11番以降も

play05:35

存在していません

play05:37

このように3レコードだけが存在している

play05:40

という前提で解説をしていきます

play05:42

ん通常のセレクト4アップデートでは

play05:45

例えば6番を指定してロックをかけにいく

play05:47

とこの6番の位置でコードだけがロックさ

play05:51

れます

play05:52

では問題です

play05:54

7番という存在しない id に対して

play05:56

セレクト4アップデートで六甲を取りに

play05:59

行くとどういうことが起きるのでしょうか

play06:02

答えとしては隙間の行にロックがかかり

play06:05

ます

play06:06

今回は7番という id を指定したの

play06:08

ですがそれが存在しなかったので

play06:11

789

play06:13

の3つに対してロックがかかります

play06:15

このように存在しない隙間の行に対して

play06:19

すべてロックを取りに行くことをギャップ

play06:21

ロックと言います

play06:23

それでは今度はこちらを手前に対して

play06:25

ロープをかけてみましょう id 4番に

play06:28

対してロックをかけた場合

play06:30

この場合はどうなるかというと id 4

play06:33

番からその手前のすべてこのハエに対して

play06:37

ロックがかかります

play06:39

1234の範囲に対してロックがかかり

play06:42

ます

play06:43

それでは次はこちらの11番に対して

play06:45

ロックをかけてみたとします

play06:48

するとどうなるかというと11番以降の

play06:51

全て

play06:53

無限大ですね

play06:55

11番以降のすべてに対してロックが

play06:58

かかります

play06:59

これが存在しないで神戸に対してセレクト

play07:02

4アップデートいうロックを取りにいった

play07:04

場合のギャップロックという挙動ですので

play07:07

覚えておきましょう

play07:14

このギャップロックですが実は落とし穴が

play07:16

あります

play07:18

それはロックは他人のセレクト4

play07:21

アップデートを許してしまうという性質を

play07:23

持っているのです

play07:25

これがどういう意味なのかというのを解説

play07:27

します

play07:29

ここにプロセス8プロセス b の二つの

play07:33

プロセスがありますそしてまずはプロセス

play07:35

a のほうで id 11番に対して

play07:38

セレクト4アップデートをかけます

play07:40

するとどうなるのかというと11番は存在

play07:44

しないので11番以降のこちらの範囲に

play07:47

対してプロセス映画ロックを取得します

play07:51

次にプロセス b が同じように id

play07:54

11番に対してセレクト4アップデートを

play07:57

実行します

play07:58

するとどうなるのかというとギャップ

play08:01

ロックは他人のセレクト4アップデート

play08:04

許してしまうという性質があります

play08:07

ですので今11番以降はプロセス映画

play08:11

ギャップロックをしている状態です

play08:13

ですがプロセス b も実はこれロックを

play08:17

取得できてしまうんです

play08:19

なぜかというとキャップロックは他人の

play08:22

セレクト4アップデートを許してしまうと

play08:24

いう性質を持っているからです

play08:26

その結果 id 11番以降はプロセス a

play08:30

も b もどちらもロックを取得している

play08:33

状態になってしまいます

play08:35

この状態でプロセス映画 insert 文

play08:39

を実行したらどうなるでしょうか

play08:41

インサートを実行すると当然

play08:45

最終 ydr 10番の次の11番に対し

play08:49

てインサートをしようとします

play08:51

ところが id 11番以降はプロセス b

play08:54

のほうもロックを取得してしまっているの

play08:57

でここでデッドロックが発生します

play09:01

実はこれプログラマーあるあるな

play09:03

deadlock で必ず皆さんもその

play09:06

うち行ってしまうと思うので注意しておい

play09:08

てください

play09:08

皆さんもこういう処理書いたことありませ

play09:10

んかデータがなければインサートする

play09:14

プロセス a としては一番最初にデータ

play09:17

があるかないかをまずはセレクト4

play09:19

アップデートしていきますそしてデータが

play09:22

なければインサートしようとしています

play09:24

このようにデータがなければインサートと

play09:28

いう処理でセレクト4アップデートを使っ

play09:30

てしまうとデッドロックが発生するという

play09:33

ことを覚えておきま超ではこういうとき

play09:36

どうしたらよいかというとセレクト4

play09:38

アップデートを使うのではなくて

play09:40

アドバイザリーロックを使うようにし

play09:42

ましょう

play09:42

重要なことなのでもう一度言いますが

play09:44

データがなければインサートという処理で

play09:47

セレクト4アップデートを使うとデッド

play09:50

ロックが発生しますですのでそれを避ける

play09:53

ためにアドバイザーリーロックを使うよう

play09:55

にしましょう

play09:57

deadlock とは複数ユーザーがお

play10:00

互いのロックが解放されるのを待って

play10:02

えいえんにロックが解放されなくなって

play10:04

しまう状態のことでした

play10:06

ではデッドロックが起きてしまったらどう

play10:08

すればよいかというとどうしようもないの

play10:10

で六甲終了するしかありません放置して

play10:13

おけばそのままタイムアウトエラーで終了

play10:15

します次に回避法方法つまり予防策として

play10:19

は更新する順番を守りましょうレコードの

play10:22

更新順だったりテーブルの懇親順番を

play10:25

ルールをつけて守るようにしましょう

play10:27

そしてもう一点としてはそもそもセレクト

play10:29

4アップデートを使うのをやめて

play10:30

アドバイザリーロックを使うとお手軽に

play10:33

デッドロックを回避することができます次

play10:35

にギャップロックについて解説ました

play10:37

ギャップロックというのは存在しない

play10:40

レコードにロックをかけようとすると隙間

play10:42

の行にロックがかかってしまうことでした

play10:45

こういったところやこういったところこう

play10:47

いったところにロックがかかるので注意し

play10:49

ましょう

play10:50

ちなみにこのギャップロックというのは

play10:51

アドバイザリーロックを使った場合では

play10:53

発生しませんあくまでこの隙間に対して

play10:56

セレクト4アップデートを実行するとか

play10:59

買ってしまうロックですそんなギャップ

play11:02

ロックには罠がありましたそれは他人のを

play11:05

セレクト4アップデートを許してしまうと

play11:07

いう落とし穴です

play11:09

例えばこのようにデータが存在しなければ

play11:11

インサートのような処理で存在しない

play11:14

ところにセレクト4アップデートをかけに

play11:15

いってしまうと複数のプロセスがセレクト

play11:18

4アップデートで6校に切ってしまって

play11:20

結果デッドロックが発生しますこのように

play11:23

データがなければインサート

play11:25

の処理でセレクト4アップデートを使って

play11:27

しまうのはプログラマーあるあるなんです

play11:29

がこれをやってしまうとデッドロックが

play11:31

発生しますこのデータがなければ

play11:34

インサートの処理ではセレクト4

play11:36

アップデートではなくてアドバイザリー

play11:38

ロックを使うようにしましょう

play11:40

なぜならば先ほど解説したように

play11:41

アドバイザリーロックではギャップロック

play11:43

が発生しないからです

play11:45

こちらのセレクト4アップデートや

play11:46

アドバイザリーロックの使い分けがまだ

play11:48

よくわかってないという方は前回の動画で

play11:51

詳しく解説していますので概要欄から前回

play11:53

の動画をご覧くださいはいってことで今回

play11:55

はテッドロックについて解説しました

play11:57

ロックマーリーについてはちゃんと理解し

play11:59

ないとかなりはまりやすくて時間の無駄に

play12:01

なってしまいますので今回の動画と前回の

play12:04

動画を理解できるようになるまで見直して

play12:06

くださいそしてこの動画がちょっとでも役

play12:08

に立ったという方は高評価のグッドボタン

play12:10

や sns などへの共有お願いします

play12:12

またコメント欄に感想などの書き込みをし

play12:14

てくれたらうれしいですそれではまた次回

play12:16

の動画でお会いしましょう

Rate This

5.0 / 5 (0 votes)

Related Tags
デッドロックデータベーストランザクションロック解放問題解決更新順序セレクト4アップデートアドバイザリーロックギャップロックプログラミング
Do you need a summary in English?